1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-08-01 16:38:02 +08:00

#61 优化权限管理,根据部门过滤数据

This commit is contained in:
Hai Liang Wang 2018-09-07 19:07:52 +08:00
parent 0efb7615e0
commit cf2ecee7db
2 changed files with 353 additions and 317 deletions

View File

@ -17,6 +17,7 @@
package com.chatopera.cc.webim.web.handler; package com.chatopera.cc.webim.web.handler;
import static org.elasticsearch.index.query.QueryBuilders.termQuery; import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import static org.elasticsearch.index.query.QueryBuilders.termsQuery;
import java.text.ParseException; import java.text.ParseException;
@ -25,6 +26,7 @@ import javax.servlet.http.HttpServletRequest;
import com.chatopera.cc.core.UKDataContext; import com.chatopera.cc.core.UKDataContext;
import com.chatopera.cc.util.UKView; import com.chatopera.cc.util.UKView;
import com.chatopera.cc.util.exception.CSKefuException;
import com.chatopera.cc.webim.service.cache.CacheHelper; import com.chatopera.cc.webim.service.cache.CacheHelper;
import com.chatopera.cc.webim.service.repository.TenantRepository; import com.chatopera.cc.webim.service.repository.TenantRepository;
import com.chatopera.cc.webim.web.handler.api.rest.QueryParams; import com.chatopera.cc.webim.web.handler.api.rest.QueryParams;
@ -36,6 +38,8 @@ import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator; import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator;
import org.elasticsearch.index.query.RangeQueryBuilder; import org.elasticsearch.index.query.RangeQueryBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
@ -49,6 +53,8 @@ import com.chatopera.cc.webim.web.model.SystemConfig;
@Controller @Controller
@SessionAttributes @SessionAttributes
public class Handler { public class Handler {
private static final Logger logger = LoggerFactory.getLogger(Handler.class);
@Autowired @Autowired
private TenantRepository tenantRes; private TenantRepository tenantRes;
@ -86,6 +92,32 @@ public class Handler {
return user ; return user ;
} }
/**
* 构建ElasticSearch基于部门查询的Filter
* @param request
* @param boolQueryBuilder
* @return
* @throws CSKefuException
*/
public boolean esOrganFilter(final HttpServletRequest request, final BoolQueryBuilder boolQueryBuilder) throws CSKefuException {
// 组合部门条件
User u = getUser(request);
if( u == null){
throw new CSKefuException("[esOrganFilter] 未能获取到登录用户。");
} else if(u.isSuperuser()){
// 超级管理员, 查看任何数据
return true;
} else if(u.getMyorgans().size() == 0){
// 用户没有被分配到部门返回空数据
return false;
} else {
// 用户在部门中通过部门过滤数据
String[] values = u.getMyorgans().toArray(new String[u.getMyorgans().size()]);
boolQueryBuilder.filter(termsQuery("organ", values));
return true;
}
}
/** /**
* *
* @param queryBuilder * @param queryBuilder

View File

@ -17,29 +17,28 @@
package com.chatopera.cc.webim.web.handler.apps.contacts; package com.chatopera.cc.webim.web.handler.apps.contacts;
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import com.chatopera.cc.util.Menu; import com.chatopera.cc.util.Menu;
import com.chatopera.cc.util.PinYinTools; import com.chatopera.cc.util.PinYinTools;
import com.chatopera.cc.util.UKTools;
import com.chatopera.cc.util.exception.CSKefuException;
import com.chatopera.cc.util.task.DSData;
import com.chatopera.cc.util.task.DSDataEvent;
import com.chatopera.cc.util.task.ExcelImportProecess;
import com.chatopera.cc.util.task.export.ExcelExporterProcess;
import com.chatopera.cc.util.task.process.ContactsProcess;
import com.chatopera.cc.webim.service.es.ContactsRepository;
import com.chatopera.cc.webim.service.repository.MetadataRepository;
import com.chatopera.cc.webim.service.repository.PropertiesEventRepository; import com.chatopera.cc.webim.service.repository.PropertiesEventRepository;
import com.chatopera.cc.webim.service.repository.ReporterRepository;
import com.chatopera.cc.webim.util.PropertiesEventUtils; import com.chatopera.cc.webim.util.PropertiesEventUtils;
import com.chatopera.cc.webim.web.handler.Handler;
import com.chatopera.cc.webim.web.model.*;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
@ -50,360 +49,365 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import com.chatopera.cc.util.UKTools; import javax.servlet.http.HttpServletRequest;
import com.chatopera.cc.util.task.DSData; import javax.servlet.http.HttpServletResponse;
import com.chatopera.cc.util.task.DSDataEvent; import javax.validation.Valid;
import com.chatopera.cc.util.task.ExcelImportProecess; import java.io.File;
import com.chatopera.cc.util.task.export.ExcelExporterProcess; import java.io.IOException;
import com.chatopera.cc.util.task.process.ContactsProcess; import java.text.SimpleDateFormat;
import com.chatopera.cc.webim.service.es.ContactsRepository; import java.util.*;
import com.chatopera.cc.webim.service.repository.MetadataRepository;
import com.chatopera.cc.webim.service.repository.ReporterRepository; import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import com.chatopera.cc.webim.web.handler.Handler; import static org.elasticsearch.index.query.QueryBuilders.termsQuery;
import com.chatopera.cc.webim.web.model.Contacts;
import com.chatopera.cc.webim.web.model.MetadataTable;
import com.chatopera.cc.webim.web.model.PropertiesEvent;
@Controller @Controller
@RequestMapping("/apps/contacts") @RequestMapping("/apps/contacts")
public class ContactsController extends Handler{ public class ContactsController extends Handler {
private final static Logger logger = LoggerFactory.getLogger(ContactsController.class);
@Autowired @Autowired
private ContactsRepository contactsRes ; private ContactsRepository contactsRes;
@Autowired @Autowired
private PropertiesEventRepository propertiesEventRes ; private PropertiesEventRepository propertiesEventRes;
@Autowired @Autowired
private ReporterRepository reporterRes ; private ReporterRepository reporterRes;
@Autowired @Autowired
private MetadataRepository metadataRes ; private MetadataRepository metadataRes;
@Value("${web.upload-path}") @Value("${web.upload-path}")
private String path; private String path;
@RequestMapping("/index") @RequestMapping("/index")
@Menu(type = "customer" , subtype = "index") @Menu(type = "customer", subtype = "index")
public ModelAndView index(ModelMap map , HttpServletRequest request , @Valid String q , @Valid String ckind) { public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String ckind) throws CSKefuException {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(!StringUtils.isBlank(q)){
map.put("q", q) ;
}
if(!StringUtils.isBlank(ckind)){
boolQueryBuilder.must(termQuery("ckind" , ckind)) ;
map.put("ckind", ckind) ;
}
map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(),super.getOrgi(request), null , null , false, boolQueryBuilder ,q , new PageRequest(super.getP(request) , super.getPs(request)))) ;
return request(super.createAppsTempletResponse("/apps/business/contacts/index")); if(!super.esOrganFilter(request, boolQueryBuilder)){
return request(super.createAppsTempletResponse("/apps/business/contacts/index"));
}
if (!StringUtils.isBlank(q)) {
map.put("q", q);
}
if (!StringUtils.isBlank(ckind)) {
boolQueryBuilder.must(termQuery("ckind", ckind));
map.put("ckind", ckind);
}
map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request), null, null, false, boolQueryBuilder, q, new PageRequest(super.getP(request), super.getPs(request))));
return request(super.createAppsTempletResponse("/apps/business/contacts/index"));
} }
@RequestMapping("/today") @RequestMapping("/today")
@Menu(type = "customer" , subtype = "today") @Menu(type = "customer", subtype = "today")
public ModelAndView today(ModelMap map , HttpServletRequest request , @Valid String q , @Valid String ckind) { public ModelAndView today(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String ckind) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(!StringUtils.isBlank(q)){ if (!StringUtils.isBlank(q)) {
map.put("q", q) ; map.put("q", q);
} }
if(!StringUtils.isBlank(ckind)){ if (!StringUtils.isBlank(ckind)) {
boolQueryBuilder.must(termQuery("ckind" , ckind)) ; boolQueryBuilder.must(termQuery("ckind", ckind));
map.put("ckind", ckind) ; map.put("ckind", ckind);
} }
map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request),UKTools.getStartTime() , null , false, boolQueryBuilder ,q , new PageRequest(super.getP(request) , super.getPs(request)))) ; map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request), UKTools.getStartTime(), null, false, boolQueryBuilder, q, new PageRequest(super.getP(request), super.getPs(request))));
return request(super.createAppsTempletResponse("/apps/business/contacts/index")); return request(super.createAppsTempletResponse("/apps/business/contacts/index"));
} }
@RequestMapping("/week") @RequestMapping("/week")
@Menu(type = "customer" , subtype = "week") @Menu(type = "customer", subtype = "week")
public ModelAndView week(ModelMap map , HttpServletRequest request , @Valid String q , @Valid String ckind) { public ModelAndView week(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String ckind) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(!StringUtils.isBlank(q)){ if (!StringUtils.isBlank(q)) {
map.put("q", q) ; map.put("q", q);
} }
if(!StringUtils.isBlank(ckind)){ if (!StringUtils.isBlank(ckind)) {
boolQueryBuilder.must(termQuery("ckind" , ckind)) ; boolQueryBuilder.must(termQuery("ckind", ckind));
map.put("ckind", ckind) ; map.put("ckind", ckind);
} }
map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(),super.getOrgi(request), UKTools.getWeekStartTime() , null , false, boolQueryBuilder ,q , new PageRequest(super.getP(request) , super.getPs(request)))) ; map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request), UKTools.getWeekStartTime(), null, false, boolQueryBuilder, q, new PageRequest(super.getP(request), super.getPs(request))));
return request(super.createAppsTempletResponse("/apps/business/contacts/index")); return request(super.createAppsTempletResponse("/apps/business/contacts/index"));
} }
@RequestMapping("/creater") @RequestMapping("/creater")
@Menu(type = "customer" , subtype = "creater") @Menu(type = "customer", subtype = "creater")
public ModelAndView creater(ModelMap map , HttpServletRequest request , @Valid String q , @Valid String ckind) { public ModelAndView creater(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String ckind) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("creater" , super.getUser(request).getId())) ; boolQueryBuilder.must(termQuery("creater", super.getUser(request).getId()));
if(!StringUtils.isBlank(ckind)){ if (!StringUtils.isBlank(ckind)) {
boolQueryBuilder.must(termQuery("ckind" , ckind)) ; boolQueryBuilder.must(termQuery("ckind", ckind));
map.put("ckind", ckind) ; map.put("ckind", ckind);
} }
if(!StringUtils.isBlank(q)){ if (!StringUtils.isBlank(q)) {
map.put("q", q) ; map.put("q", q);
} }
map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(),super.getOrgi(request), null , null , false, boolQueryBuilder ,q , new PageRequest(super.getP(request) , super.getPs(request)))) ; map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request), null, null, false, boolQueryBuilder, q, new PageRequest(super.getP(request), super.getPs(request))));
return request(super.createAppsTempletResponse("/apps/business/contacts/index")); return request(super.createAppsTempletResponse("/apps/business/contacts/index"));
} }
@RequestMapping("/delete") @RequestMapping("/delete")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public ModelAndView delete(HttpServletRequest request ,@Valid Contacts contacts ,@Valid String p) { public ModelAndView delete(HttpServletRequest request, @Valid Contacts contacts, @Valid String p) {
if(contacts!=null){ if (contacts != null) {
contacts = contactsRes.findOne(contacts.getId()) ; contacts = contactsRes.findOne(contacts.getId());
contacts.setDatastatus(true); //客户和联系人都是 逻辑删除 contacts.setDatastatus(true); //客户和联系人都是 逻辑删除
contactsRes.save(contacts) ; contactsRes.save(contacts);
} }
return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/index.html?p="+p+"&ckind="+contacts.getCkind())); return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/index.html?p=" + p + "&ckind=" + contacts.getCkind()));
} }
@RequestMapping("/add") @RequestMapping("/add")
@Menu(type = "contacts" , subtype = "add") @Menu(type = "contacts", subtype = "add")
public ModelAndView add(ModelMap map , HttpServletRequest request,@Valid String ckind) { public ModelAndView add(ModelMap map, HttpServletRequest request, @Valid String ckind) {
map.addAttribute("ckind",ckind); map.addAttribute("ckind", ckind);
return request(super.createRequestPageTempletResponse("/apps/business/contacts/add")); return request(super.createRequestPageTempletResponse("/apps/business/contacts/add"));
} }
@RequestMapping("/save") @RequestMapping("/save")
@Menu(type = "contacts" , subtype = "save") @Menu(type = "contacts", subtype = "save")
public ModelAndView save(HttpServletRequest request , @Valid Contacts contacts) { public ModelAndView save(HttpServletRequest request, @Valid Contacts contacts) {
contacts.setCreater(super.getUser(request).getId()); contacts.setCreater(super.getUser(request).getId());
contacts.setOrgi(super.getOrgi(request)); contacts.setOrgi(super.getOrgi(request));
contacts.setOrgan(super.getUser(request).getOrgan()); contacts.setOrgan(super.getUser(request).getOrgan());
contacts.setPinyin(PinYinTools.getInstance().getFirstPinYin(contacts.getName())); contacts.setPinyin(PinYinTools.getInstance().getFirstPinYin(contacts.getName()));
if(StringUtils.isBlank(contacts.getCusbirthday())) { if (StringUtils.isBlank(contacts.getCusbirthday())) {
contacts.setCusbirthday(null); contacts.setCusbirthday(null);
} }
contactsRes.save(contacts) ; contactsRes.save(contacts);
return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/index.html?ckind="+contacts.getCkind())); return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/index.html?ckind=" + contacts.getCkind()));
} }
@RequestMapping("/edit") @RequestMapping("/edit")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public ModelAndView edit(ModelMap map , HttpServletRequest request , @Valid String id) { public ModelAndView edit(ModelMap map, HttpServletRequest request, @Valid String id) {
map.addAttribute("contacts", contactsRes.findOne(id)); map.addAttribute("contacts", contactsRes.findOne(id));
return request(super.createRequestPageTempletResponse("/apps/business/contacts/edit")); return request(super.createRequestPageTempletResponse("/apps/business/contacts/edit"));
} }
@RequestMapping("/detail") @RequestMapping("/detail")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public ModelAndView detail(ModelMap map , HttpServletRequest request , @Valid String id) { public ModelAndView detail(ModelMap map, HttpServletRequest request, @Valid String id) {
map.addAttribute("contacts", contactsRes.findOne(id)) ; map.addAttribute("contacts", contactsRes.findOne(id));
return request(super.createRequestPageTempletResponse("/apps/business/contacts/detail")); return request(super.createRequestPageTempletResponse("/apps/business/contacts/detail"));
} }
@RequestMapping( "/update") @RequestMapping("/update")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public ModelAndView update(HttpServletRequest request , @Valid Contacts contacts) { public ModelAndView update(HttpServletRequest request, @Valid Contacts contacts) {
Contacts data = contactsRes.findOne(contacts.getId()) ; Contacts data = contactsRes.findOne(contacts.getId());
if(data!=null){ if (data != null) {
List<PropertiesEvent> events = PropertiesEventUtils.processPropertiesModify(request, contacts , data , "id" , "orgi" , "creater" ,"createtime" , "updatetime") ; //记录 数据变更 历史 List<PropertiesEvent> events = PropertiesEventUtils.processPropertiesModify(request, contacts, data, "id", "orgi", "creater", "createtime", "updatetime"); //记录 数据变更 历史
if(events.size()>0){ if (events.size() > 0) {
String modifyid = UKTools.getUUID() ; String modifyid = UKTools.getUUID();
Date modifytime = new Date(); Date modifytime = new Date();
for(PropertiesEvent event : events){ for (PropertiesEvent event : events) {
event.setDataid(contacts.getId()); event.setDataid(contacts.getId());
event.setCreater(super.getUser(request).getId()); event.setCreater(super.getUser(request).getId());
event.setOrgi(super.getOrgi(request)); event.setOrgi(super.getOrgi(request));
event.setModifyid(modifyid); event.setModifyid(modifyid);
event.setCreatetime(modifytime); event.setCreatetime(modifytime);
propertiesEventRes.save(event) ; propertiesEventRes.save(event);
} }
} }
contacts.setCreater(data.getCreater()); contacts.setCreater(data.getCreater());
contacts.setCreatetime(data.getCreatetime()); contacts.setCreatetime(data.getCreatetime());
contacts.setOrgi(super.getOrgi(request)); contacts.setOrgi(super.getOrgi(request));
contacts.setOrgan(super.getUser(request).getOrgan()); contacts.setOrgan(super.getUser(request).getOrgan());
contacts.setPinyin(PinYinTools.getInstance().getFirstPinYin(contacts.getName())); contacts.setPinyin(PinYinTools.getInstance().getFirstPinYin(contacts.getName()));
if(StringUtils.isBlank(contacts.getCusbirthday())) { if (StringUtils.isBlank(contacts.getCusbirthday())) {
contacts.setCusbirthday(null); contacts.setCusbirthday(null);
} }
contactsRes.save(contacts); contactsRes.save(contacts);
} }
return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/index.html?ckind="+contacts.getCkind())); return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/index.html?ckind=" + contacts.getCkind()));
} }
@RequestMapping("/imp") @RequestMapping("/imp")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public ModelAndView imp(ModelMap map , HttpServletRequest request,@Valid String ckind) { public ModelAndView imp(ModelMap map, HttpServletRequest request, @Valid String ckind) {
map.addAttribute("ckind",ckind); map.addAttribute("ckind", ckind);
return request(super.createRequestPageTempletResponse("/apps/business/contacts/imp")); return request(super.createRequestPageTempletResponse("/apps/business/contacts/imp"));
} }
@RequestMapping("/impsave") @RequestMapping("/impsave")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public ModelAndView impsave(ModelMap map , HttpServletRequest request , @RequestParam(value = "cusfile", required = false) MultipartFile cusfile,@Valid String ckind) throws IOException { public ModelAndView impsave(ModelMap map, HttpServletRequest request, @RequestParam(value = "cusfile", required = false) MultipartFile cusfile, @Valid String ckind) throws IOException {
DSDataEvent event = new DSDataEvent(); DSDataEvent event = new DSDataEvent();
String fileName = "contacts/"+UKTools.getUUID()+cusfile.getOriginalFilename().substring(cusfile.getOriginalFilename().lastIndexOf(".")) ; String fileName = "contacts/" + UKTools.getUUID() + cusfile.getOriginalFilename().substring(cusfile.getOriginalFilename().lastIndexOf("."));
File excelFile = new File(path , fileName) ; File excelFile = new File(path, fileName);
if(!excelFile.getParentFile().exists()){ if (!excelFile.getParentFile().exists()) {
excelFile.getParentFile().mkdirs() ; excelFile.getParentFile().mkdirs();
} }
MetadataTable table = metadataRes.findByTablename("uk_contacts") ; MetadataTable table = metadataRes.findByTablename("uk_contacts");
if(table!=null){ if (table != null) {
FileUtils.writeByteArrayToFile(new File(path , fileName), cusfile.getBytes()); FileUtils.writeByteArrayToFile(new File(path, fileName), cusfile.getBytes());
event.setDSData(new DSData(table,excelFile , cusfile.getContentType(), super.getUser(request))); event.setDSData(new DSData(table, excelFile, cusfile.getContentType(), super.getUser(request)));
event.getDSData().setClazz(Contacts.class); event.getDSData().setClazz(Contacts.class);
event.getDSData().setProcess(new ContactsProcess(contactsRes)); event.getDSData().setProcess(new ContactsProcess(contactsRes));
event.setOrgi(super.getOrgi(request)); event.setOrgi(super.getOrgi(request));
/*if(!StringUtils.isBlank(ckind)){ /*if(!StringUtils.isBlank(ckind)){
event.getValues().put("ckind", ckind) ; event.getValues().put("ckind", ckind) ;
}*/ }*/
event.getValues().put("creater", super.getUser(request).getId()) ; event.getValues().put("creater", super.getUser(request).getId());
reporterRes.save(event.getDSData().getReport()) ; reporterRes.save(event.getDSData().getReport());
new ExcelImportProecess(event).process() ; //启动导入任务 new ExcelImportProecess(event).process(); //启动导入任务
} }
return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/index.html")); return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/index.html"));
} }
@RequestMapping("/expids") @RequestMapping("/expids")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public void expids(ModelMap map , HttpServletRequest request , HttpServletResponse response , @Valid String[] ids) throws IOException { public void expids(ModelMap map, HttpServletRequest request, HttpServletResponse response, @Valid String[] ids) throws IOException {
if(ids!=null && ids.length > 0){ if (ids != null && ids.length > 0) {
Iterable<Contacts> contactsList = contactsRes.findAll(Arrays.asList(ids)) ; Iterable<Contacts> contactsList = contactsRes.findAll(Arrays.asList(ids));
MetadataTable table = metadataRes.findByTablename("uk_contacts") ; MetadataTable table = metadataRes.findByTablename("uk_contacts");
List<Map<String,Object>> values = new ArrayList<Map<String,Object>>(); List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
for(Contacts contacts : contactsList){ for (Contacts contacts : contactsList) {
values.add(UKTools.transBean2Map(contacts)) ; values.add(UKTools.transBean2Map(contacts));
} }
response.setHeader("content-disposition", "attachment;filename=UCKeFu-Contacts-"+new SimpleDateFormat("yyyy-MM-dd").format(new Date())+".xls"); response.setHeader("content-disposition", "attachment;filename=UCKeFu-Contacts-" + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + ".xls");
ExcelExporterProcess excelProcess = new ExcelExporterProcess( values, table, response.getOutputStream()) ; ExcelExporterProcess excelProcess = new ExcelExporterProcess(values, table, response.getOutputStream());
excelProcess.process(); excelProcess.process();
} }
return ; return;
} }
@RequestMapping("/expall") @RequestMapping("/expall")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public void expall(ModelMap map , HttpServletRequest request , HttpServletResponse response) throws IOException { public void expall(ModelMap map, HttpServletRequest request, HttpServletResponse response) throws IOException {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("datastatus" , false)) ; //只导出 数据删除状态 未删除的 数据 boolQueryBuilder.must(termQuery("datastatus", false)); //只导出 数据删除状态 未删除的 数据
Iterable<Contacts> contactsList = contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request),null , null , false, boolQueryBuilder , null , new PageRequest(super.getP(request) , super.getPs(request))); Iterable<Contacts> contactsList = contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request), null, null, false, boolQueryBuilder, null, new PageRequest(super.getP(request), super.getPs(request)));
MetadataTable table = metadataRes.findByTablename("uk_contacts") ; MetadataTable table = metadataRes.findByTablename("uk_contacts");
List<Map<String,Object>> values = new ArrayList<Map<String,Object>>(); List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
for(Contacts contacts : contactsList){ for (Contacts contacts : contactsList) {
values.add(UKTools.transBean2Map(contacts)) ; values.add(UKTools.transBean2Map(contacts));
} }
response.setHeader("content-disposition", "attachment;filename=UCKeFu-Contacts-"+new SimpleDateFormat("yyyy-MM-dd").format(new Date())+".xls"); response.setHeader("content-disposition", "attachment;filename=UCKeFu-Contacts-" + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + ".xls");
ExcelExporterProcess excelProcess = new ExcelExporterProcess( values, table, response.getOutputStream()) ; ExcelExporterProcess excelProcess = new ExcelExporterProcess(values, table, response.getOutputStream());
excelProcess.process(); excelProcess.process();
return ; return;
} }
@RequestMapping("/expsearch") @RequestMapping("/expsearch")
@Menu(type = "contacts" , subtype = "contacts") @Menu(type = "contacts", subtype = "contacts")
public void expall(ModelMap map , HttpServletRequest request , HttpServletResponse response , @Valid String q , @Valid String ekind) throws IOException { public void expall(ModelMap map, HttpServletRequest request, HttpServletResponse response, @Valid String q, @Valid String ekind) throws IOException {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(!StringUtils.isBlank(q)){ if (!StringUtils.isBlank(q)) {
map.put("q", q) ; map.put("q", q);
} }
if(!StringUtils.isBlank(ekind)){ if (!StringUtils.isBlank(ekind)) {
boolQueryBuilder.must(termQuery("ekind" , ekind)) ; boolQueryBuilder.must(termQuery("ekind", ekind));
map.put("ekind", ekind) ; map.put("ekind", ekind);
} }
Iterable<Contacts> contactsList = contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(),super.getOrgi(request), null , null , false, boolQueryBuilder ,q , new PageRequest(super.getP(request) , super.getPs(request))); Iterable<Contacts> contactsList = contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request), null, null, false, boolQueryBuilder, q, new PageRequest(super.getP(request), super.getPs(request)));
MetadataTable table = metadataRes.findByTablename("uk_contacts") ; MetadataTable table = metadataRes.findByTablename("uk_contacts");
List<Map<String,Object>> values = new ArrayList<Map<String,Object>>(); List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
for(Contacts contacts : contactsList){ for (Contacts contacts : contactsList) {
values.add(UKTools.transBean2Map(contacts)) ; values.add(UKTools.transBean2Map(contacts));
} }
response.setHeader("content-disposition", "attachment;filename=UCKeFu-Contacts-"+new SimpleDateFormat("yyyy-MM-dd").format(new Date())+".xls"); response.setHeader("content-disposition", "attachment;filename=UCKeFu-Contacts-" + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + ".xls");
ExcelExporterProcess excelProcess = new ExcelExporterProcess( values, table, response.getOutputStream()) ; ExcelExporterProcess excelProcess = new ExcelExporterProcess(values, table, response.getOutputStream());
excelProcess.process(); excelProcess.process();
return ; return;
} }
@RequestMapping("/embed/index") @RequestMapping("/embed/index")
@Menu(type = "customer" , subtype = "embed") @Menu(type = "customer", subtype = "embed")
public ModelAndView embed(ModelMap map , HttpServletRequest request , @Valid String q , @Valid String ckind) { public ModelAndView embed(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String ckind) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(!StringUtils.isBlank(q)){ if (!StringUtils.isBlank(q)) {
map.put("q", q) ; map.put("q", q);
} }
if(!StringUtils.isBlank(ckind)){ if (!StringUtils.isBlank(ckind)) {
boolQueryBuilder.must(termQuery("ckind" , ckind)) ; boolQueryBuilder.must(termQuery("ckind", ckind));
map.put("ckind", ckind) ; map.put("ckind", ckind);
} }
map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request),null , null , false, boolQueryBuilder ,q , new PageRequest(super.getP(request) , super.getPs(request)))) ; map.addAttribute("contactsList", contactsRes.findByCreaterAndSharesAndOrgi(super.getUser(request).getId(), super.getUser(request).getId(), super.getOrgi(request), null, null, false, boolQueryBuilder, q, new PageRequest(super.getP(request), super.getPs(request))));
return request(super.createRequestPageTempletResponse("/apps/business/contacts/embed/index")); return request(super.createRequestPageTempletResponse("/apps/business/contacts/embed/index"));
} }
@RequestMapping("/embed/add") @RequestMapping("/embed/add")
@Menu(type = "contacts" , subtype = "embedadd") @Menu(type = "contacts", subtype = "embedadd")
public ModelAndView embedadd(ModelMap map , HttpServletRequest request) { public ModelAndView embedadd(ModelMap map, HttpServletRequest request) {
return request(super.createRequestPageTempletResponse("/apps/business/contacts/embed/add")); return request(super.createRequestPageTempletResponse("/apps/business/contacts/embed/add"));
} }
@RequestMapping( "/embed/save") @RequestMapping("/embed/save")
@Menu(type = "contacts" , subtype = "embedsave") @Menu(type = "contacts", subtype = "embedsave")
public ModelAndView embedsave(HttpServletRequest request , @Valid Contacts contacts) { public ModelAndView embedsave(HttpServletRequest request, @Valid Contacts contacts) {
contacts.setCreater(super.getUser(request).getId()); contacts.setCreater(super.getUser(request).getId());
contacts.setOrgi(super.getOrgi(request)); contacts.setOrgi(super.getOrgi(request));
contacts.setOrgan(super.getUser(request).getOrgan()); contacts.setOrgan(super.getUser(request).getOrgan());
contacts.setPinyin(PinYinTools.getInstance().getFirstPinYin(contacts.getName())); contacts.setPinyin(PinYinTools.getInstance().getFirstPinYin(contacts.getName()));
if(StringUtils.isBlank(contacts.getCusbirthday())) { if (StringUtils.isBlank(contacts.getCusbirthday())) {
contacts.setCusbirthday(null); contacts.setCusbirthday(null);
} }
contactsRes.save(contacts) ; contactsRes.save(contacts);
return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/embed/index.html")); return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/embed/index.html"));
} }
@RequestMapping("/embed/edit") @RequestMapping("/embed/edit")
@Menu(type = "contacts" , subtype = "embededit") @Menu(type = "contacts", subtype = "embededit")
public ModelAndView embededit(ModelMap map , HttpServletRequest request , @Valid String id) { public ModelAndView embededit(ModelMap map, HttpServletRequest request, @Valid String id) {
map.addAttribute("contacts", contactsRes.findOne(id)) ; map.addAttribute("contacts", contactsRes.findOne(id));
return request(super.createRequestPageTempletResponse("/apps/business/contacts/embed/edit")); return request(super.createRequestPageTempletResponse("/apps/business/contacts/embed/edit"));
} }
@RequestMapping( "/embed/update") @RequestMapping("/embed/update")
@Menu(type = "contacts" , subtype = "embedupdate") @Menu(type = "contacts", subtype = "embedupdate")
public ModelAndView embedupdate(HttpServletRequest request , @Valid Contacts contacts) { public ModelAndView embedupdate(HttpServletRequest request, @Valid Contacts contacts) {
Contacts data = contactsRes.findOne(contacts.getId()) ; Contacts data = contactsRes.findOne(contacts.getId());
if(data!=null){ if (data != null) {
List<PropertiesEvent> events = PropertiesEventUtils.processPropertiesModify(request, contacts , data , "id" , "orgi" , "creater" ,"createtime" , "updatetime") ; //记录 数据变更 历史 List<PropertiesEvent> events = PropertiesEventUtils.processPropertiesModify(request, contacts, data, "id", "orgi", "creater", "createtime", "updatetime"); //记录 数据变更 历史
if(events.size()>0){ if (events.size() > 0) {
String modifyid = UKTools.getUUID() ; String modifyid = UKTools.getUUID();
Date modifytime = new Date(); Date modifytime = new Date();
for(PropertiesEvent event : events){ for (PropertiesEvent event : events) {
event.setDataid(contacts.getId()); event.setDataid(contacts.getId());
event.setCreater(super.getUser(request).getId()); event.setCreater(super.getUser(request).getId());
event.setOrgi(super.getOrgi(request)); event.setOrgi(super.getOrgi(request));
event.setModifyid(modifyid); event.setModifyid(modifyid);
event.setCreatetime(modifytime); event.setCreatetime(modifytime);
propertiesEventRes.save(event) ; propertiesEventRes.save(event);
} }
} }
contacts.setCreater(data.getCreater()); contacts.setCreater(data.getCreater());
contacts.setCreatetime(data.getCreatetime()); contacts.setCreatetime(data.getCreatetime());
contacts.setOrgi(super.getOrgi(request)); contacts.setOrgi(super.getOrgi(request));
contacts.setOrgan(super.getUser(request).getOrgan()); contacts.setOrgan(super.getUser(request).getOrgan());
contacts.setPinyin(PinYinTools.getInstance().getFirstPinYin(contacts.getName())); contacts.setPinyin(PinYinTools.getInstance().getFirstPinYin(contacts.getName()));
if(StringUtils.isBlank(contacts.getCusbirthday())) { if (StringUtils.isBlank(contacts.getCusbirthday())) {
contacts.setCusbirthday(null); contacts.setCusbirthday(null);
} }
contactsRes.save(contacts); contactsRes.save(contacts);
} }
return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/embed/index.html")); return request(super.createRequestPageTempletResponse("redirect:/apps/contacts/embed/index.html"));
} }