add name prefix filter

This commit is contained in:
Shaun Chyxion 2018-11-23 22:49:43 +08:00
parent 348232f4af
commit 0ab913e0a9
8 changed files with 77 additions and 18 deletions

View File

@ -11,9 +11,9 @@ import me.chyxion.tigon.model.ViewModel;
import me.chyxion.tigon.model.ListResult;
import com.pudonghot.ambition.crm.model.*;
import org.apache.commons.lang3.tuple.Pair;
import javax.validation.constraints.NotBlank;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.hibernate.validator.constraints.NotBlank;
import com.pudonghot.ambition.crm.service.UserService;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.web.bind.annotation.RequestParam;
@ -63,6 +63,8 @@ public class ApplicationController
start, limit, strSearch, null, filters, null);
result.setAttr("users", userService.listViewModels(
new Search().asc(User.EMPLOYEE_ID)));
result.setAttr("namePrefixes",
((ApplicationService) queryService).listNamePrefixes());
return result;
}
@ -167,6 +169,12 @@ public class ApplicationController
*/
@Override
protected Pair<String, Class<?>> filterCol(final String field) {
return Application.OWNER.equals(field) ? Pair.of(field, String.class) : null;
if (Application.OWNER.equals(field)) {
return Pair.of(field, String.class);
}
if (Application.NAME_PREFIX.equals(field)) {
return Pair.of(field, String.class);
}
return null;
}
}

View File

@ -1,8 +1,10 @@
package com.pudonghot.ambition.crm.service;
import java.util.Map;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import com.pudonghot.ambition.crm.model.Application;
import org.hibernate.validator.constraints.NotBlank;
import me.chyxion.tigon.service.BaseCrudByFormService;
import com.pudonghot.ambition.crm.model.ApplicationImage;
import com.pudonghot.ambition.crm.model.ApplicationAttachment;
@ -61,5 +63,11 @@ public interface ApplicationService
* @param form form
*/
void updateAttachment(@Valid ApplicationAttachmentFormForUpdate form);
/**
* list name prefixes
* @return name prefixes
*/
List<Map<String, String>> listNamePrefixes();
}

View File

@ -2,6 +2,7 @@ package com.pudonghot.ambition.crm.service.support;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.io.IOException;
import java.io.InputStream;
@ -67,6 +68,7 @@ public class ApplicationServiceSupport
final String id = idSeq.get();
final Application application = form.copy(new Application());
application.setId(id);
application.setNamePrefix(namePrefix(application.getName()));
final Date now = new Date();
application.setDateUpdated(now);
@ -118,6 +120,7 @@ public class ApplicationServiceSupport
else {
application.setOwner(updatedBy);
}
application.setNamePrefix(namePrefix(application.getName()));
return update(application);
}
@ -194,6 +197,14 @@ public class ApplicationServiceSupport
updateFile(form, attachmentMapper::find, attachmentMapper::listSort, attachmentMapper::update);
}
/**
* {@inheritDoc}
*/
@Override
public List<Map<String, String>> listNamePrefixes() {
return mapper.listNamePrefixes();
}
/**
* {@inheritDoc}
*/
@ -359,4 +370,12 @@ public class ApplicationServiceSupport
return false;
});
}
private String namePrefix(final String name) {
int i = name.indexOf("-");
if (i > 0) {
return name.substring(0, i);
}
return null;
}
}

View File

@ -1,17 +1,16 @@
package com.pudonghot.ambition.crm;
import com.pudonghot.ambition.crm.model.ApplicationImage;
import com.pudonghot.ambition.crm.util.AmDateUtil;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;
import org.joda.time.Interval;
import org.joda.time.Period;
import org.junit.Test;
import java.text.ParseException;
import java.util.Date;
import java.text.ParseException;
import org.joda.time.DateTimeConstants;
import org.apache.commons.lang3.time.DateUtils;
import com.pudonghot.ambition.crm.util.AmDateUtil;
import com.pudonghot.ambition.crm.model.ApplicationImage;
/**
* @version 0.0.1
@ -20,6 +19,7 @@ import java.util.Date;
* chyxion@163.com <br />
* Sep 1, 2015 2:34:08 PM
*/
@Slf4j
public class TestDriver {
@Test
@ -102,4 +102,12 @@ public class TestDriver {
image.setSort(sortOld - 1.5f);
System.err.println(image);
}
@Test
public void testNamePrefix() {
String name = "AT-Foo";
int i = name.indexOf('-');
log.info("index [{}].", i);
log.info("prefix [{}].", name.substring(0, i));
}
}

View File

@ -1,5 +1,7 @@
package com.pudonghot.ambition.crm.mapper;
import java.util.List;
import java.util.Map;
import me.chyxion.tigon.mybatis.BaseMapper;
import com.pudonghot.ambition.crm.model.Application;
@ -10,4 +12,9 @@ import com.pudonghot.ambition.crm.model.Application;
*/
public interface ApplicationMapper extends BaseMapper<String, Application> {
/**
* list name prefixes
* @return name prefixes
*/
List<Map<String, String>> listNamePrefixes();
}

View File

@ -39,4 +39,11 @@
<include refid="Tigon.search" />
</select>
<select id="listNamePrefixes" resultType="map">
select
distinct name_prefix text, name_prefix value
from <include refid="table" />
where name_prefix is not null
order by name_prefix
</select>
</mapper>

View File

@ -5,6 +5,7 @@ import lombok.Setter;
import me.chyxion.tigon.model.M3;
import me.chyxion.tigon.mybatis.Table;
import me.chyxion.tigon.mybatis.Transient;
import lombok.experimental.FieldNameConstants;
/**
* @author Donghuang <br>
@ -14,15 +15,10 @@ import me.chyxion.tigon.mybatis.Transient;
@Getter
@Setter
@Table("crm_application")
@FieldNameConstants(prefix = "")
public class Application extends M3<String, String> {
private static final long serialVersionUID = 1L;
// Column Names
public static final String NAME = "name";
public static final String NAME_PREFIX = "name_prefix";
public static final String CONTENT = "content";
public static final String OWNER = "owner";
// Properties
private String name;
private String namePrefix;

View File

@ -20,7 +20,13 @@
<thead class="thin-border-bottom">
<tr>
<th>
Name
{{th-filter name='namePrefix'
text='Name'
label='Name Filter'
options=model.namePrefixes
value-field='value'
text-field='text'
}}
</th>
<th>
<i class="ace-icon fa fa-sticky-note-o bigger-110 hidden-480"></i>
@ -40,7 +46,7 @@
<i class="ace-icon fa fa-exchange bigger-110 hidden-480"></i>
Enabled
</th>
<th>
<th style="min-width: 114px">
<i class="ace-icon fa fa-cogs bigger-110 hidden-480"></i>
Settings
</th>