| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- package cn.com.lzt.maintainbill.service.impl;
- import cn.com.lzt.common.util.DictUtil;
- import cn.com.lzt.maintainbill.dao.MaintainBillDao;
- import cn.com.lzt.maintainbill.entity.MaintainBillEntity;
- import cn.com.lzt.maintainbill.service.MaintainBillServiceI;
- import cn.com.lzt.maintainplan.entity.MaintainPlanEntity;
- import cn.com.lzt.maintainplantimes.entity.MaintainPlanTimesEntity;
- import cn.com.lzt.message.send.entity.MMessageEntity;
- import cn.com.lzt.message.send.entity.MessageWxTemplateConfig;
- import cn.com.lzt.message.send.service.MMessageSendServiceI;
- import cn.com.lzt.useractiviti.data.service.UseractivitiDataServiceI;
- import com.xcgl.projecttask.entity.ProjecttaskEntity;
- import com.xcgl.projecttask.service.ProjecttaskServiceI;
- import com.xcgl.taskplatform.dao.TaskPlatformDao;
- import com.xcgl.taskplatform.service.TaskServiceI;
- import com.xcgl.taskresult.entity.TaskResultEntity;
- import com.xcgl.utils.XcglConstant;
- import org.apache.commons.collections.list.SetUniqueList;
- import org.apache.commons.lang3.StringUtils;
- import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
- import org.jeecgframework.core.constant.Globals;
- import org.jeecgframework.core.util.*;
- import org.jeecgframework.p3.core.common.utils.DateUtil;
- import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter;
- import org.jeecgframework.web.system.pojo.base.TSUser;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.io.Serializable;
- import java.text.SimpleDateFormat;
- import java.util.*;
- @Service("maintainBillService")
- @Transactional
- public class MaintainBillServiceImpl extends CommonServiceImpl implements MaintainBillServiceI {
- @Autowired
- TaskPlatformDao taskPlatformDao;
- @Autowired
- TaskServiceI taskService;
- @Autowired
- MaintainBillDao billdao;
- @Autowired
- ProjecttaskServiceI projecttaskService;
- @Autowired
- UseractivitiDataServiceI useractivitiDataService;
- @Autowired
- MMessageSendServiceI mMessageSendService;
- public void delete(MaintainBillEntity entity) throws Exception{
- super.delete(entity);
- //执行删除操作增强业务
- this.doDelBus(entity);
- }
- public ProjecttaskEntity saveAndGenTask(MaintainBillEntity entity) throws Exception{
- Serializable s = save(entity);
- ProjecttaskEntity task = taskService.createTask(entity);
- return task;
- }
- public Serializable save(MaintainBillEntity entity) throws Exception{
- //如果编码为空,则按照编码规则设置默认编码(编码可编辑)
- if(StringUtil.isEmpty(entity.getCode())) {
- entity.setCode(com.xcgl.utils.OrderNumTools.generateNextBillCode(getMaxLocalCode("t_b_maintain_bill"),Globals.CODE_PREFIX_MAINTAINBILL,4));
- }
- //设置项目负责人
- Map<String,String> leader = findProjectLeader(entity.getProjectid());
- if(leader.size() == 1) {
- for(java.util.Map.Entry<String,String> en:leader.entrySet()) {
- entity.setTaskuserid(en.getKey());
- entity.setTaskusername(en.getValue());
- }
- }
- // 设置合同信息
- /*Map<String,String> contract = findContract(entity);
- if (contract.size() == 1) {
- for(java.util.Map.Entry<String,String> en:contract.entrySet()) {
- entity.setContractid(en.getKey());
- entity.setContractname(en.getValue());
- }
- }*/
- entity.setCreateDate(new Date());
- Serializable t = super.save(entity);
- //执行新增操作增强业务
- this.doAddBus(entity);
- return t;
- }
- public void saveOrUpdate(MaintainBillEntity entity) throws Exception{
- super.saveOrUpdate(entity);
- //执行更新操作增强业务
- this.doUpdateBus(entity);
- }
-
- /**
- * 新增操作增强业务
- * @param t
- * @return
- */
- private void doAddBus(MaintainBillEntity t) throws Exception{
- //-----------------sql增强 start----------------------------
- //-----------------sql增强 end------------------------------
-
- //-----------------java增强 start---------------------------
- //-----------------java增强 end-----------------------------
- }
- /**
- * 更新操作增强业务
- * @param t
- * @return
- */
- private void doUpdateBus(MaintainBillEntity t) throws Exception{
- //-----------------sql增强 start----------------------------
- //-----------------sql增强 end------------------------------
-
- //-----------------java增强 start---------------------------
- //-----------------java增强 end-----------------------------
- }
- /**
- * 删除操作增强业务
- * @return
- */
- private void doDelBus(MaintainBillEntity t) throws Exception{
- //-----------------sql增强 start----------------------------
- //-----------------sql增强 end------------------------------
-
- //-----------------java增强 start---------------------------
- //-----------------java增强 end-----------------------------
- }
-
- private Map<String,Object> populationMap(MaintainBillEntity t){
- Map<String,Object> map = new HashMap<String,Object>();
- map.put("id", t.getId());
- map.put("create_name", t.getCreateName());
- map.put("create_by", t.getCreateBy());
- map.put("create_date", t.getCreateDate());
- map.put("update_name", t.getUpdateName());
- map.put("update_by", t.getUpdateBy());
- map.put("update_date", t.getUpdateDate());
- map.put("sys_org_code", t.getSysOrgCode());
- map.put("sys_company_code", t.getSysCompanyCode());
- map.put("bpm_status", t.getBpmStatus());
- map.put("name", t.getName());
- map.put("code", t.getCode());
- map.put("servicedate", t.getServicedate());
- map.put("projectid", t.getProjectid());
- map.put("projectname", t.getProjectname());
- map.put("servicetypedetail", t.getServicetypedetail());
- map.put("projectservcieid", t.getProjectserviceid());
- map.put("projectservicename", t.getProjectservicename());
- map.put("relatedunitid", t.getRelatedunitid());
- map.put("relatedunitname", t.getRelatedunitname());
- map.put("step_name", t.getStepName());
- map.put("proc_inst_id", t.getProcInstId());
- map.put("description", t.getDescription());
- map.put("sourcetype", t.getSourcetype());
- map.put("score", t.getScore());
- map.put("averaged", t.getAveraged());
- map.put("valuate", t.getValuate());
- map.put("busistatus", t.getBusistatus());
- map.put("taskuserid", t.getTaskuserid());
- map.put("taskusername", t.getTaskusername());
- map.put("contractid", t.getContractid());
- map.put("contractname", t.getContractname());
- return map;
- }
-
- /**
- * 替换sql中的变量
- * @param sql
- * @param t
- * @return
- */
- public String replaceVal(String sql,MaintainBillEntity t){
- sql = sql.replace("#{id}",String.valueOf(t.getId()));
- sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName()));
- sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy()));
- sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate()));
- sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName()));
- sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy()));
- sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate()));
- sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode()));
- sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode()));
- sql = sql.replace("#{bpm_status}",String.valueOf(t.getBpmStatus()));
- sql = sql.replace("#{name}",String.valueOf(t.getName()));
- sql = sql.replace("#{code}",String.valueOf(t.getCode()));
- sql = sql.replace("#{servicedate}",String.valueOf(t.getServicedate()));
- sql = sql.replace("#{projectid}",String.valueOf(t.getProjectid()));
- sql = sql.replace("#{projectname}",String.valueOf(t.getProjectname()));
- sql = sql.replace("#{servicetypedetail}",String.valueOf(t.getServicetypedetail()));
- sql = sql.replace("#{projectservcieid}",String.valueOf(t.getProjectserviceid()));
- sql = sql.replace("#{projectservicename}",String.valueOf(t.getProjectservicename()));
- sql = sql.replace("#{relatedunitid}",String.valueOf(t.getRelatedunitid()));
- sql = sql.replace("#{relatedunitname}",String.valueOf(t.getRelatedunitname()));
- sql = sql.replace("#{step_name}",String.valueOf(t.getStepName()));
- sql = sql.replace("#{proc_inst_id}",String.valueOf(t.getProcInstId()));
- sql = sql.replace("#{description}",String.valueOf(t.getDescription()));
- sql = sql.replace("#{sourcetype}",String.valueOf(t.getSourcetype()));
- sql = sql.replace("#{score}",String.valueOf(t.getScore()));
- sql = sql.replace("#{averaged}",String.valueOf(t.getAveraged()));
- sql = sql.replace("#{valuate}",String.valueOf(t.getValuate()));
- sql = sql.replace("#{busistatus}",String.valueOf(t.getBusistatus()));
- sql = sql.replace("#{taskuserid}",String.valueOf(t.getTaskuserid()));
- sql = sql.replace("#{taskusername}",String.valueOf(t.getTaskusername()));
- sql = sql.replace("#{contractid}",String.valueOf(t.getContractid()));
- sql = sql.replace("#{contractname}",String.valueOf(t.getContractname()));
- sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
- return sql;
- }
-
- /**
- * 执行JAVA增强
- */
- private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map<String,Object> data) throws Exception {
- if(StringUtil.isNotEmpty(cgJavaValue)){
- Object obj = null;
- try {
- if("class".equals(cgJavaType)){
- //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断
- obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance();
- }else if("spring".equals(cgJavaType)){
- obj = ApplicationContextUtil.getContext().getBean(cgJavaValue);
- }
- if(obj instanceof CgformEnhanceJavaInter){
- CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj;
- javaInter.execute("t_b_maintain_bill",data);
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw new Exception("执行JAVA增强出现异常!");
- }
- }
- }
-
- private String getMaxLocalCode(String tablename){
- StringBuilder sb = new StringBuilder();
- sb.append("SELECT code FROM ");
- sb.append(tablename);
- sb.append(" where left(create_date,10) = '"+ DateUtils.date_sdf.format(new Date())+"' ");
- sb.append(" ORDER BY code DESC");
- List<Map<String, Object>> objMapList = findForJdbc(sb.toString(), 1, 1);
- String returnCode = null;
- if(objMapList!=null && objMapList.size()>0){
- returnCode = (String)objMapList.get(0).get("code");
- }
- return returnCode;
- }
- /**
- * 查询项目负责人
- * */
- private Map<String,String> findProjectLeader(String projectid) {
- Map<String,String> leader = new HashMap<String,String>();
- List<Map<String, String>> userList = taskPlatformDao.getUserByProjectAndRoleCode(projectid, Globals.roleCode_ProjectManager);
- if(userList.size()>0) {
- leader.put(userList.get(0).get("userid").toString(),userList.get(0).get("realname").toString());
- }
- return leader;
- }
- /**
- * 匹配到合同
- * */
- private Map<String,String> findContract(MaintainBillEntity entity) {
- Map<String,String> contract = new HashMap<String,String>();
- String sqlContract = "select distinct(con.id),con.name " +
- "from t_b_contract_item item " +
- "left join t_b_contract con on item.contractid = con.id " +
- "where con.projectid =? " +
- "and item.serviceid =? " +
- "and con.startdate <=? " +
- "and con.enddate >=? " +
- "and con.bpm_status = '3'" +
- "and con.busstatus <> '9'";
- List<Map<String, Object>> contractList = findForJdbc(sqlContract, entity.getProjectid(),entity.getProjectserviceid(),entity.getPlandatestart(),entity.getPlandateend());
- if(contractList.size()>0) {
- contract.put(contractList.get(0).get("id").toString(),contractList.get(0).get("name").toString());
- }
- return contract;
- }
- /**
- * 根据计划,整理出服务记录单数据,然后调用保存方法
- * 保存后,自动生成任务
- * */
- public void genTaskFromPlan() throws Exception{
- Calendar c= Calendar.getInstance();
- c.add(Calendar.DAY_OF_MONTH,60);
- String firstDay = DateUtil.formatDateTime(c.getTime(),"yyy-MM-dd")+" 23:59:59";
- List<MaintainBillEntity> billList = billdao.getMaintainBillFromPlan(firstDay,null);
- String code = getMaxLocalCode("t_b_maintain_bill");
- for(MaintainBillEntity entity : billList) {
- code = com.xcgl.utils.OrderNumTools.generateNextBillCode(code,Globals.CODE_PREFIX_MAINTAINBILL,4);
- entity.setCode(code);
- List<String> years = SetUniqueList.decorate(new ArrayList());
- List<String> months = SetUniqueList.decorate(new ArrayList());
- Date start = entity.getPlandatestart();
- Date end = entity.getPlandateend();
- Calendar c1 = Calendar.getInstance();
- c1.setTime(start);
- c1.set(Calendar.DAY_OF_MONTH,1);
- do{
- int year = c1.get(Calendar.YEAR);
- years.add(String.valueOf(year));
- months.add(DateUtil.formatDateTime(c1.getTime(),"yyyy-MM"));
- c1.add(Calendar.MONTH,1);
- }while(c1.getTime().getTime()<=end.getTime());
- entity.setMaintainYear(StringUtils.join(years,","));
- entity.setMaintainMonth(StringUtils.join(months,","));
- ProjecttaskEntity task = saveAndGenTask(entity);
- entity.setTaskId(task.getId());
- String timeId = entity.getMaintainPlanTimeId();
- MaintainPlanTimesEntity timesEntity = getEntity(MaintainPlanTimesEntity.class,timeId);
- timesEntity.setIsGenTask(Globals.YES);
- //发消息
- String owner = task.getOwner();
- TSUser ownerUser = getEntity(TSUser.class, owner);
- task.setWxMsgTitle(ownerUser.getRealName()+",您有一个维保计划已生成,请及时关注。");
- String serviceType = DictUtil.formatToTypeName(entity.getServicetypedetail(),"servicetypedetail");
- task.setWxTaskName(ownerUser.getRealName()+","+serviceType+"的维保计划已生成,请查收");
- String remark = "发起人:%s\r\n发起时间:%s";
- remark = String.format(remark,entity.getCreateName(), DateUtils.formatDate(entity.getCreateDate(),"yyyy-MM-dd HH:mm:ss" ));
- task.setWxRemark(remark);
- projecttaskService.sendMsg(task);
- }
- }
- @Override
- /**
- * maintainIdStr == null 则为删除支付信息
- */
- public void updatePaymentInfo(String maintainIdStr,String paymentid) throws Exception {
- String sql;
- if(StringUtils.isNotEmpty(maintainIdStr)) {
- maintainIdStr.replaceAll(",", "','");
- maintainIdStr = "'"+maintainIdStr + "'";
- sql = " update t_b_maintain_bill set paymentid =? where id in ("+maintainIdStr+")";
- }else {
- sql = " update t_b_maintain_bill set paymentid = null where paymentid =? ";
- }
- this.executeSql(sql, paymentid);
- }
-
- public void afterTaskFinish(ProjecttaskEntity task) {
- TaskResultEntity result ;
- List<TaskResultEntity> list = findByProperty(TaskResultEntity.class, "taskid", task.getId());
- if(list.size() > 0) {
- result = list.get(0);
- if(task.getTasktype().equals("maintainbill")) {
- MaintainBillEntity maintain = get(MaintainBillEntity.class, task.getSourceid());
- maintain.setScore(result.getTaskObjectScore());
- maintain.setValuate(result.getMemo());
- maintain.setBusistatus(Globals.MAINTAIN_STATUS_FINISH);
- maintain.setServicedate(new Date());
- }
- }
- }
- @Override
- public void checkNoContractPlan() {
- Calendar c =Calendar.getInstance();
- c.add(Calendar.MONTH,3);
- Date findDate = c.getTime();
- List<MaintainPlanEntity> list = billdao.findNoContractPlan(findDate);
- List<TSUser> cgjlList = useractivitiDataService.getUserByDepartIdAndRoleCode(null,Collections.singletonList(Globals.POSITION_TYPE_XZBJL));
- TSUser cgjl=null;
- if(cgjlList.size()>0){
- cgjl = cgjlList.get(0);
- }
- for(MaintainPlanEntity planEntity :list){
- String serviceType = DictUtil.formatToTypeName(planEntity.getServicetype(),"servicetypedetail");
- if(cgjl!=null){//采购经理发消息
- String first ="%s您好,%s%s计划已生成,但合同未签订,请及时续签。";
- first = String.format(first,cgjl.getRealName(),planEntity.getDepName(),serviceType);
- String remark = "提示";
- sendWxMessage(cgjl.getId(),first,first,remark,null);
- }
- List<TSUser> managerList = useractivitiDataService.getDepManager(planEntity.getDepartId());
- if(managerList.size()>0){
- TSUser manager = managerList.get(0);
- String first ="%s您好,预计%s进行%s,但维保合同未签订。";
- first = String.format(first,manager.getRealName(),DateUtils.formatDate(planEntity.getFirstTimeStart(),"yyyy-MM-dd"),serviceType);
- String remark = "点击查看";
- String host = ResourceUtil.getConfigByName(Globals.SERVER_WXMSG);
- String managerUrl = host+"/maintainPlanController.do?planViewMobile&id="+planEntity.getId();
- sendWxMessage(manager.getId(),first,first,remark,managerUrl);
- }
- }
- }
- @Override
- public void checkMatchContract() {
- Calendar c = Calendar.getInstance();
- c.set(Calendar.DAY_OF_WEEK,2);
- c.set(Calendar.HOUR_OF_DAY,0);
- c.set(Calendar.MINUTE,0);
- c.set(Calendar.SECOND,0);
- c.set(Calendar.MILLISECOND,0);
- c.add(Calendar.MILLISECOND,-1);
- Date end =c.getTime();
- c.add(Calendar.DAY_OF_MONTH,-7);
- c.add(Calendar.MILLISECOND,1);
- Date start = c.getTime();
- List<Map<String,Object>> list = billdao.findMatchContract(start,end);
- if(list.size()>0){
- List<TSUser> userList = useractivitiDataService.getUserByDepartIdAndRoleCode(null,Collections.singletonList(Globals.POSITION_TYPE_PZBZY));
- if(userList.size()>0){
- TSUser user = userList.get(0);
- String msg = "%s新签订%s合同,可能与该项目%s匹配,请关注。";
- for(Map<String,Object> map :list){
- String depName = StringUtil.getObject(map.get("dep_name"));
- String planName = StringUtil.getObject(map.get("planName"));
- String contractName = StringUtil.getObject(map.get("contractName"));
- String servicetype =StringUtil.getObject( map.get("servicetype"));
- servicetype = DictUtil.formatToTypeName(servicetype,"servicetypedetail");
- String first = String.format(msg,depName,servicetype,planName);
- String remark="";
- sendWxMessage(user.getId(),first,first,remark,null);
- }
- }
- }
- }
- private void sendWxMessage(String userId,String first,String keyword1,String remark,String url){
- Map<String, Object> userMsgParms = new HashMap<String, Object>();
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- userMsgParms.put("first", first);
- userMsgParms.put("keyword1", keyword1);//工作内容
- userMsgParms.put("keyword2", format.format(new Date()));//创建时间
- userMsgParms.put("remark", remark);
- MessageWxTemplateConfig config = new MessageWxTemplateConfig();
- config.setTemplateId(XcglConstant.TEMPLATE_WXMSG_TASK);
- config.setUserMsgParms(userMsgParms);
- config.setShowUrl(url!=null);
- mMessageSendService.sendMessage(Collections.singletonList(userId),url,"","",config,new MMessageEntity.MessageSendWay[]{MMessageEntity.MessageSendWay.wx});
- }
- }
|