package com.goafanti.order.service.impl; import com.goafanti.admin.bo.AdminListBo; import com.goafanti.admin.service.DepartmentService; import com.goafanti.common.bo.Error; import com.goafanti.common.bo.OrderExamineBo; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.dao.*; import com.goafanti.common.enums.NoticeStatus; import com.goafanti.common.error.BusinessException; import com.goafanti.common.model.*; import com.goafanti.common.utils.DateUtils; import com.goafanti.common.utils.ExportExcelUtil; import com.goafanti.common.utils.OrderUtils; import com.goafanti.common.utils.StringUtils; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.JDBCIdGenerator; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.order.bo.*; import com.goafanti.order.enums.OrderChangeProcess; import com.goafanti.order.enums.OrderChangeType; import com.goafanti.order.enums.OrderNewState; import com.goafanti.order.enums.OrderType; import com.goafanti.order.service.NewOrderDunService; import com.goafanti.order.service.OrderChangeService; import com.goafanti.order.service.OrderNewService; import com.goafanti.order.service.OrderProjectService; import com.goafanti.organization.bo.OrganizationListOut; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; @Service public class OrderChangeServiceImpl extends BaseMybatisDao implements OrderChangeService { @Autowired private NewOrderChangeMapper newOrderChangeMapper; @Autowired private OrderChangeLogMapper orderChangeLogMapper; @Autowired private TOrderNewMapper tOrderNewMapper; @Autowired private TOrderLogMapper tOrderLogMapper; @Autowired private TOrderTaskMapper tOrderTaskMapper; @Autowired private TOrderInvoiceMapper tOrderInvoiceMapper; @Autowired private OrderRefundInvoiceMapper orderRefundInvoiceMapper; @Autowired private TTaskMemberMapper tTaskMemberMapper; @Autowired private NewOrderRefundMapper newOrderRefundMapper; @Autowired private OrderExamineMapper orderExamineMapper; @Autowired private BusinessProjectMapper businessProjectMapper; @Autowired private NewOrderDunMapper newOrderDunMapper; @Autowired private JDBCIdGenerator idGenerator; @Autowired private AdminMapper adminMapper; @Autowired private OrderNewService orderNewService; @Autowired private NewOrderDunService newOrderDunService; @Autowired private TChangeTaskMapper tChangeTaskMapper; @Autowired private TChangeDunMapper tChangeDunMapper; @Autowired private TOrderBillNewMapper tOrderBillNewMapper; @Autowired private TTaskMidMapper tTaskMidMapper; @Autowired private PushOrderService pushOrderService; @Autowired private TOrderMidMapper tOrderMidMapper; @Autowired private UserMidMapper userMidMapper; @Autowired private DepartmentService departmentService; @Autowired private OrderProjectService orderProjectService; @Autowired private DepartmentMapper departmentMapper; @Override public int addOrderChange(NewOrderChangeBo t,String startRemarks) { TOrderNew ton=new TOrderNew(); ton.setOrderNo(t.getOrderNo()); ton.setDeleteSign(2);//将订单置为锁定 tOrderNewMapper.updateByPrimaryKeySelective(ton); BigDecimal invoiceAmount=tOrderInvoiceMapper.conutAmountByOrderNo(t.getOrderNo()); t.setInvoiceAmount(invoiceAmount);//开票金额 BigDecimal paymentAmount=tOrderBillNewMapper.conutAmountByOrderNo(t.getOrderNo()); t.setPaymentAmount(paymentAmount);//收款金额 //预计成本与预计退款:预计成本=项目价格*数量 预计退款=收款-预计成本 BigDecimal estimateCost=new BigDecimal(tOrderTaskMapper.selectEstimateCost(t.getOrderNo())); t.setEstimateCost(estimateCost); t.setEstimateRefundable(paymentAmount.subtract(estimateCost)); t.setZxsRemarks(startRemarks); newOrderChangeMapper.insertSelective(t); NewOrderChangeBo ncb=newOrderChangeMapper.selectByorderNoAndStatus(t.getOrderNo()); List listDun=newOrderDunMapper.selectListNewOrderDun(t.getOrderNo(),null); List listcd=new ArrayList<>(); if (listDun!=null&&!listDun.isEmpty()) { for (OutNewOrderDunBo d : listDun) { TChangeDun cd=new TChangeDun(); cd.setOrderNo(d.getOrderNo()); cd.setAid(d.getAid()); cd.setAppropriationRatio(d.getAppropriationRatio()); cd.setCid(ncb.getId()); cd.setDid(d.getId()); cd.setTid(d.getTid()); cd.setProjectType(d.getProjectType()); cd.setDunType(d.getDunType()); cd.setMoney(d.getMoney()); cd.setWaitDay(d.getWaitDay()); cd.setStartTime(d.getStartTime()); cd.setEffectiveCount(d.getEffectiveCount()); cd.setCustomizeTime(d.getCustomizeTime()); cd.setCustomizeName(d.getCustomizeName()); listcd.add(cd); } tChangeDunMapper.insertSelectiveList(listcd); } List listck=new ArrayList<>(); List listTask=tOrderTaskMapper.selectOrderTaskAll(t.getOrderNo(),null); if (listTask!=null&&!listTask.isEmpty()) { for (TOrderTaskBo tt : listTask) { TChangeTask ck=new TChangeTask(); ck.setOrderNo(tt.getOrderNo()); ck.setCid(ncb.getId()); ck.setCommodityId(tt.getCommodityId()); ck.setOrderNo(tt.getOrderNo()); ck.setCommodityName(tt.getCommodityName()); ck.setCommodityPrice(tt.getCommodityPrice()); ck.setCommodityQuantity(tt.getCommodityQuantity()); ck.setTaskComment(tt.getTaskComment()); ck.setSplitStatus(tt.getSplitStatus()); ck.setSplitSuper(tt.getSplitSuper()); ck.setReceiverName(tt.getReceiverName()); ck.setMain(tt.getMain()); ck.setTid(tt.getId()); if(tt.getServiceLife()!=null)ck.setServiceLife(tt.getServiceLife()); if(tt.getServiceYear()!=null) ck.setServiceYear(tt.getServiceYear()); if(tt.getYearSum()!=null) ck.setYearSum(tt.getYearSum()); if(tt.getContractTerm()!=null) ck.setContractTerm(tt.getContractTerm()); if(tt.getLastYear()!=null) ck.setLastYear(tt.getLastYear()); if(tt.getLastYearCapital()!=null) ck.setLastYearCapital(tt.getLastYearCapital()); if(tt.getLastYearIncome()!=null) ck.setLastYearIncome(tt.getLastYearIncome()); listck.add(ck); } tChangeTaskMapper.insertSelectiveList(listck); } return 1; } /* * 新增审核流程中的 */ private void pushOrderExamine(String orderNo,Integer type) { orderExamineMapper.deleteByAidAndStatus(orderNo,null,null); List list=tOrderTaskMapper.selectOrderTaskAll(orderNo,null); for (TOrderTaskBo t : list) { addOrderExamineByTask(orderNo, type, t); } } private void addOrderExamineByTask(String orderNo, Integer type, TOrderTaskBo t) { //重报和仅项目变更只需要当事人审核 if (type ==OrderChangeType.CB.getCode()|| type ==OrderChangeType.JXMBG.getCode()){ Integer receiverType=null; if (t.getTaskReceiver()!=null){ //等于咨询师 做咨询新增 if (t.getTaskReceiver().equals(t.getConsultantId())) { receiverType=0; //等于经理做经理新增 }else if (t.getTaskReceiver().equals(t.getManagerId())){ receiverType=1; } } if (receiverType!=null){ OrderExamine o=new OrderExamine(); o.setAid(t.getTaskReceiver()); o.setOrderNo(orderNo); o.setCreateTime(new Date()); o.setType(receiverType);//咨询师 o.setStatus(0);//正常 orderExamineMapper.insertSelective(o); } //项目及金额、退单不退款、退单退款需要当事人和经理审核,其他不需要咨询师审核 }else if (type ==OrderChangeType.XMJJEBG.getCode()|| type ==OrderChangeType.TDBTK.getCode() || type ==OrderChangeType.TDTK.getCode()){ if (t.getConsultantId()!=null) { OrderExamine o=new OrderExamine(); o.setAid(t.getConsultantId()); o.setOrderNo(orderNo); o.setCreateTime(new Date()); o.setType(0);//咨询师 o.setStatus(0);//正常 orderExamineMapper.insertSelective(o); } if (t.getManagerId()!=null) { OrderExamine o=new OrderExamine(); o.setAid(t.getManagerId()); o.setOrderNo(orderNo); o.setCreateTime(new Date()); o.setType(1);//咨询师经理 o.setStatus(0);//正常 orderExamineMapper.insertSelective(o); } } } @Override public List orderChangeDetails(String orderNo) { List list=newOrderChangeMapper.selectByorderNo(orderNo); if (!list.isEmpty()){ for (NewOrderChangeBo c : list) { if (c.getContacts()==null){ TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo); c.setContacts(t.getContacts()); c.setContactMobile(t.getContactMobile()); } } } return list; } @Override public NewOrderChangeBo orderChangeDetailsById(Integer id) { NewOrderChangeBo nb=newOrderChangeMapper.selectById(id); int isExamine=orderExamineMapper.selectByOrderNoAndAid(nb.getOrderNo(),TokenManager.getAdminId()); nb.setIsExamine(isExamine); if(nb.getProcessState()!=null){ nb.setVoucherUrl(pushOrderService.changeProcessStatusConstant(nb.getVoucherUrl(),nb.getOrderNo(),nb.getProcessState(),nb.getStatus())); } return nb; } @Override @Transactional public int pushOrderChangeAudit(String changeId, String remarks, Integer status,Integer processState,Integer rejectState) { NewOrderChangeBo nb=newOrderChangeMapper.selectByChangeId(changeId); String orderNo=nb.getOrderNo(); Department dep = tOrderNewMapper.selectDepByOrderNo(orderNo); if (processState==null||(nb.getProcessState()!=9&&processState !=nb.getProcessState()) ) { throw new BusinessException(new Error( "变更流程与您所操作流程不匹配","变更流程与您所操作流程不匹配")); } if (nb.getStatus()==4) { throw new BusinessException(new Error( "变更流程已通过审核","变更流程已通过审核")); } Date date =new Date(); //2通过 3驳回 if (status==2) { //变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送 6退单不退款 7仅变更合同 if(nb.getType() !=null){ if(nb.getType()==OrderChangeType.JBGGT.getCode()){ //仅合同图片修改:营销-营销总经理 if(nb.getProcessState()==OrderChangeProcess.YXGLY.getCode()){ completeChange(remarks, nb); return 1; } } else { /* 赠送:营销-经理-总经理审核-财务(已收款情况)-总裁(副总裁) 重报:营销-经理-总经理审核-技术员-财务-财务总监-总裁(副总裁) 仅项目:营销-经理-总经理审核-技术员-技术总监-财务-财务总监-总裁(副总裁) 项目&金额:营销-经理-总经理审核-技术员-技术经理-技术总监-财务-财务总监-总裁(副总裁) 退单退款:营销-经理-总经理审核-技术员-技术经理-技术总监-财务-财务总监-总裁(副总裁)-董事长(副总裁大于2K,需董事长审核)-财务退票 退单不退款:营销-经理-总经理审核-技术员-技术经理-技术总监-财务-财务总监-总裁(副总裁)-财务退票 仅金额:营销-经理-总经理审核-技术总监-财务-财务总监-总裁(副总裁) 框架协议审核流程: 营销员发起-营销经理审核-营销管理员审核-财务审核 */ if (nb.getProcessState()==OrderChangeProcess.YXJL.getCode()){ nb.setProcessState(OrderChangeProcess.YXGLY.getCode()); }else if (nb.getProcessState()==OrderChangeProcess.YXGLY.getCode()){ if (nb.getType()==OrderChangeType.CB.getCode()|| nb.getType()==OrderChangeType.JXMBG.getCode()|| nb.getType()==OrderChangeType.XMJJEBG.getCode()|| nb.getType()==OrderChangeType.TDTK.getCode()|| nb.getType()==OrderChangeType.TDBTK.getCode()){ pushZXS(nb, date,1); }else if (nb.getType()==OrderChangeType.JJEBG.getCode()){ nb.setProcessState(OrderChangeProcess.JSZJ.getCode()); }else if (nb.getType()==OrderChangeType.ZS.getCode()||nb.getType()==OrderChangeType.KJXY.getCode()){ nb.setProcessState(OrderChangeProcess.CWZY.getCode()); } }else if (nb.getProcessState()==OrderChangeProcess.JSY.getCode()){ orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),0); pushZXS(nb,date,0); //咨询师审核,将自己审核的全部标记已审核 }else if (nb.getProcessState()==OrderChangeProcess.JSJL.getCode()){ //咨询师经理审核,将自己审核的全部标记已审核 orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),1); pushZXSJL(nb,date,0); }else if (nb.getProcessState()==OrderChangeProcess.JSZJ.getCode()){ nb.setProcessState(OrderChangeProcess.CWZY.getCode()); }else if (nb.getProcessState()==OrderChangeProcess.CWZY.getCode()){ if (nb.getType()==OrderChangeType.ZS.getCode()){ boolean flag=pushApproval(nb, dep,remarks); if (flag) return 1; }else if (nb.getType()==OrderChangeType.KJXY.getCode()){ completeChange(remarks, nb); return 1; }else { nb.setProcessState(OrderChangeProcess.CWZJ.getCode()); } }else if (nb.getProcessState()==OrderChangeProcess.CWZJ.getCode()){ boolean flag=pushApproval(nb, dep,remarks); if (flag){ return 1; } }else if(nb.getProcessState()==OrderChangeProcess.TPSH.getCode()) { if (nb.getType()==OrderChangeType.TDTK.getCode()||nb.getType()==OrderChangeType.TDBTK.getCode()) { nb.setStatus(2); }else { completeChange(remarks, nb); return 1; } }else if (nb.getProcessState()==OrderChangeProcess.FZC.getCode()){ if (nb.getType()==OrderChangeType.TDTK.getCode()) { if (nb.getChangeAmount().compareTo(new BigDecimal("0.2")) < 0) { //小于则总裁通过,大于则董事长 nb.setStatus(2); }else { nb.setProcessState(OrderChangeProcess.DSZ.getCode()); } }else if (nb.getType()==OrderChangeType.TDBTK.getCode()){ nb.setStatus(2); }else { completeChange(remarks, nb); return 1; } }else if (nb.getProcessState()==OrderChangeProcess.DSZ.getCode()){ if (nb.getType()==OrderChangeType.TDTK.getCode()||nb.getType()==OrderChangeType.TDBTK.getCode()) { nb.setStatus(2); }else { completeChange(remarks, nb); return 1; } } } } if(nb.getStatus()==3) { nb.setStatus(1);//如果驳回数据则改为正常数据 } //通过订单取消记录的驳回位置 if (processState==nb.getBackStatus()) { nb.setBackStatus(0); } }else { nb.setProcessState(rejectState); nb.setStatus(3);//订单变更设置为驳回 //驳回订单记录驳回位置 if (processState>nb.getBackStatus()) { nb.setBackStatus(processState); } //驳回重置审核人 if (rejectState<=3) { orderExamineMapper.updateByOrderNo(orderNo,1,null); }else if (rejectState==4){ orderExamineMapper.updateByOrderNo(orderNo,1,1); } if (rejectState==3) { orderExamineMapper.updateByOrderNoAndAid(nb.getOrderNo(),TokenManager.getAdminId(),0); int wsh=orderExamineMapper.checkCountStatus(nb.getOrderNo(),0,0); if (wsh==0){ pushZXSJL( nb,date,1); } }else if(rejectState==4){ pushZXSJL(nb,date,1); } } addOrderChangeLog(remarks, status, orderNo, nb.getId()); sendNotice(status,nb); pushOrderCangeProcess(nb); newOrderChangeMapper.updateByPrimaryKeySelective(nb); return 1; } private void completeChange(String remarks, NewOrderChangeBo nb ) { nb.setStatus(4); addOrderChangeLog(remarks, 2, nb.getOrderNo(), nb.getId()); pushCompleteOrderChange(nb); } private boolean pushApproval(NewOrderChangeBo nb, Department dep,String remarks) { TOrderNew tOrderNew = tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo()); Date date = new Date(); date.setTime(date.getTime()+500); if (tOrderNew.getSalesmanId().equals(AFTConstants.CAOJIN_AID)) { nb.setProcessState(OrderChangeProcess.DSZ.getCode()); }else { if (dep.getApproval()==1){ nb.setProcessState(OrderChangeProcess.TPSH.getCode()); }else { addOrderChangeLog("公司/部门管理审核人员未设置,系统自动通过", 2, nb.getOrderNo(), nb.getId(),date,AFTConstants.SUPERADMIN_ID); if (nb.getType()==OrderChangeType.TDTK.getCode()||nb.getType()==OrderChangeType.TDBTK.getCode()){ nb.setProcessState(OrderChangeProcess.TPSH.getCode()); nb.setStatus(2); }else { completeChange(remarks,nb); return true; } } } return false; } /** * * @param nb * @param date * @param type 0正常审核 1跨流程需要通知 */ @Override public void pushZXS(NewOrderChangeBo nb, Date date,Integer type) { int zxs=orderExamineMapper.checkCountStatus(nb.getOrderNo(),0,0); if (zxs>0){ nb.setProcessState(OrderChangeProcess.JSY.getCode()); }else { if(type==1){ date.setTime(date.getTime()+100); addOrderChangeLog("无咨询师自动通过", 2, nb.getOrderNo(), nb.getId(), date); } pushZXSJL(nb,date,1); } } /** * 咨询师经理,跳过就返回x=1,在后续添加日志放到先审核,后添加日志 * @param nb * @param type 0正常审核 1跨流程需要通知 * @return */ @Override public void pushZXSJL(NewOrderChangeBo nb,Date date,Integer type) { int zxsjl=orderExamineMapper.checkCountStatus(nb.getOrderNo(),1,0); if (nb.getType()==OrderChangeType.XMJJEBG.getCode()|| nb.getType()==OrderChangeType.TDTK.getCode()|| nb.getType()==OrderChangeType.TDBTK.getCode()|| nb.getType()==OrderChangeType.CB.getCode()|| nb.getType()==OrderChangeType.JXMBG.getCode()){ if (zxsjl>0){ nb.setProcessState(OrderChangeProcess.JSJL.getCode()); }else { if (type==1){ date.setTime(date.getTime()+100); addOrderChangeLog("无咨询师经理自动通过", 2, nb.getOrderNo(), nb.getId(),date); } //重报 没有技术员跳入财务 if (nb.getType()==OrderChangeType.CB.getCode()){ nb.setProcessState(OrderChangeProcess.CWZY.getCode()); //项目变更没有跳入技术总监 }else{ nb.setProcessState(OrderChangeProcess.JSZJ.getCode()); } } } } private void addOrderChangeLog(String remarks, Integer status, String orderNo, Integer id) { addOrderChangeLog(remarks,status,orderNo,id,null,null); } private void addOrderChangeLog(String remarks, Integer status, String orderNo, Integer id,Date date) { addOrderChangeLog(remarks,status,orderNo,id,date,null); } private void addOrderChangeLog(String remarks, Integer status, String orderNo, Integer id,Date date,String aid) { if (date ==null)date=new Date(); if (aid ==null)aid=TokenManager.getAdminId(); OrderChangeLog ocl = new OrderChangeLog(); ocl.setAuditor(aid); ocl.setOrderNo(orderNo); ocl.setRemarks(remarks); ocl.setChangeId(id); ocl.setStatus(status); ocl.setCreateTime(date); orderChangeLogMapper.insertSelective(ocl); } private void sendNotice(Integer status,NewOrderChangeBo nb) { //0发起2通过 3驳回 Integer type=0; if(status==0)type=NoticeStatus.ORDER_CHANGE_START.getCode(); if(status==2)type=NoticeStatus.ORDER_CHANGE_YES.getCode(); if(status==3)type=NoticeStatus.ORDER_CHANGE_NO.getCode(); //获取发起人与发起人部门 AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId()); //获取客户信息 TOrderNewBo o=tOrderNewMapper.getSaleIdByOno(nb.getOrderNo()); //获取接收者 //流程状态 0=营销员,1=营销经理,2=营销管理员,3=技术员,4=技术经理,5=技术总监,6=财务专员,7=财务总监,8=总裁,9=董事长 List alist = new ArrayList<>(); //获取部门负责财务人员 switch (nb.getProcessState()) { case 0: alist.add(o.getSalesmanId()); break; case 1: Admin saleaman = adminMapper.selectByPrimaryKey(o.getSalesmanId()); alist.add(saleaman.getManagerId()); break; case 2: alist.addAll(adminMapper.listNameByDepAndName(o.getOrderDep(), AFTConstants.SALESMAN_ADMIN)); break; case 3: alist.addAll(addOrderExamine(o.getOrderNo(),0)); break; case 4: alist.addAll(addOrderExamine(o.getOrderNo(),1)); break; case 5: for (Admin admin : adminMapper.getAdminRoleTypeList(AFTConstants.TECH_ADMIN)) { alist.add(admin.getId()); } break; case 6: alist.add(o.getFinanceId()); break; case 7: for (Admin admin : adminMapper.getAdminRoleTypeList(AFTConstants.FINANCE_ADMIN)) { alist.add(admin.getId()); } break; case 8: if(nb.getStatus()==2) { alist.add(o.getFinanceId()); }else { alist.add(o.getApprovalAid()); } break; case 9: if(nb.getStatus()==2) { alist.add(o.getFinanceId()); }else { for (Admin admin : adminMapper.selectAdminByRoleType(AFTConstants.APPROVAL_DECISION)) { alist.add(admin.getId()); } } break; case 10: if(nb.getStatus()==2) { alist.add(o.getFinanceId()); }else { for (Admin admin : adminMapper.selectAdminByRoleType(AFTConstants.VICE_CED)) { alist.add(admin.getId()); } } break; } //发送站内信息与邮件 pushGeneralSendNoticeAndEmail(alist, type, o, TokenManager.getAdminId(),0); } public void pushGeneralSendNoticeAndEmail(List alist, Integer type,TOrderNewBo o,String adminId,Integer approval){ orderNewService.pushGeneralSendNoticeAndEmail(alist, type,o, adminId,approval); } /** * * @param orderNo 订单编号 * @param i 0咨询师 1咨询师经理 * @return */ private List addOrderExamine(String orderNo, Integer i) { List list=new ArrayList<>(); List orderExamineBos = orderExamineMapper.selectByOrderNo(orderNo, i); for (OrderExamineBo bo : orderExamineBos) { if (bo.getStatus()==0){ list.add(bo.getAid()); } } return list; } /** * 变更完成复制出原订单镜像 */ private void changeAdopt(NewOrderChangeBo nb) { TOrderNew t1=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo()); List td2=newOrderDunMapper.selectListNewOrderDun(nb.getOrderNo(), null); List tt1=tOrderTaskMapper.selectOrderTaskAll(nb.getOrderNo(),null); List tl1=tOrderLogMapper.selectOrderByNo(nb.getOrderNo()); String newOrderNo=idGenerator.generateId().toString(); t1.setOrderNo(newOrderNo); nb.setUsedOrder(newOrderNo); t1.setDeleteSign(1);//将原订单作废,只能查看 tOrderNewMapper.insertSelective(t1); Map map=new HashMap<>(); for (TOrderTaskBo tOrderTaskBo : tt1) { //处理父子项目关系 将员父项目存储 int x=tOrderTaskBo.getId(); tOrderTaskBo.setId(null); tOrderTaskBo.setOrderNo(newOrderNo); if(tOrderTaskBo.getSplitStatus()==2) { tOrderTaskBo.setSplitSuper(map.get(tOrderTaskBo.getSplitSuper())); } tOrderTaskBo.setProcessStatus(3); tOrderTaskMapper.insertSelective(tOrderTaskBo); TTaskMember tTaskMember = tTaskMemberMapper.selectByTid(x); if (tTaskMember!=null){ tTaskMember.setId(null); tTaskMember.setTid(tOrderTaskBo.getId()); tTaskMemberMapper.insertSelective(tTaskMember); } int y=tOrderTaskBo.getId(); TTaskMid dtails = tTaskMidMapper.getDtails(tOrderTaskBo.getId()); TTaskMid tTaskMid = new TTaskMid(y, new BigDecimal(0)); tTaskMid.setDispatchProvince(dtails.getDispatchProvince()); tTaskMid.setDutyDep(dtails.getDutyDep()); tTaskMidMapper.insertSelective(tTaskMid); if(tOrderTaskBo.getSplitStatus()==1) { map.put(x, y); } } if (!td2.isEmpty()) { List newtd2=new ArrayList<>(); for (OutNewOrderDunBo outNewOrderDunBo : td2) { outNewOrderDunBo.setId(null); outNewOrderDunBo.setOrderNo(newOrderNo); newtd2.add(outNewOrderDunBo); } newOrderDunMapper.insertBatch(newtd2); } if (!tl1.isEmpty()) { List newtl1=new ArrayList<>(); for (TOrderLogBo tOrderLogBo : tl1) { tOrderLogBo.setId(null); tOrderLogBo.setOrderNo(newOrderNo); newtl1.add(tOrderLogBo); } tOrderLogMapper.insertBatch(newtl1); } nb.setStatus(4); //将订单恢复正常 TOrderNew orderNew =new TOrderNew(); orderNew.setOrderNo(nb.getOrderNo()); orderNew.setDeleteSign(0); orderNew.setPrimaryOrder(newOrderNo); int i =tOrderMidMapper.judgeProjectType(nb.getOrderNo()); if (i>0){ TOrderMid tm=new TOrderMid(); tm.setOrderNo(nb.getOrderNo()); tm.setProjectType(1); tOrderMidMapper.updateByOrderNo(tm); } tOrderNewMapper.updateByPrimaryKeySelective(orderNew); } @Override public boolean checkOderNo(String orderNo) { int i=newOrderChangeMapper.checkOderNo(orderNo); if (i>0) { return true; } return false; } @Override public List selectOrderChangeLogList(String changeId) { return orderChangeLogMapper.selectOrderChangeLogList(changeId); } @SuppressWarnings("unchecked") @Override public Pagination selectOrderChangeList(String userName,Integer processState,Integer timeType,String startTime,String endTime, String deps,String salesmanName,Integer complete,String orderNo, String contractNo,Integer type,Integer pageSize, Integer pageNo) { Map parameter=new HashMap(); if(pageSize==null||pageSize<0)pageSize=10; if(pageNo==null||pageNo<0)pageNo=1; parameter.put("processState", processState==null?0:processState); parameter.put("complete", complete==null?0:complete); if (StringUtils.isNotBlank(userName)) parameter.put("userName", userName); if (StringUtils.isNotBlank(orderNo)) parameter.put("orderNo", orderNo); if (StringUtils.isNotBlank(contractNo)) parameter.put("contractNo", contractNo); if (null!=type) parameter.put("type", type); if (null!=timeType) parameter.put("timeType", timeType); if (StringUtils.isNotBlank(startTime)) parameter.put("startTime", startTime); if (StringUtils.isNotBlank(endTime)) parameter.put("endTime", endTime+" 23:59:59"); if (processState==2){ List myDep; if (deps!=null) { myDep=departmentService.selectSubDeps(deps); if (myDep.isEmpty()){ return new Pagination(1,10,0); } }else { myDep=departmentService.selectMyDeps(); } parameter.put("deps",myDep); }else { if (deps!=null) { parameter.put("deps",departmentService.parseArray(deps)); } } if (StringUtils.isNotBlank(salesmanName)) parameter.put("salesmanName", salesmanName); //财务专员有财务经理查看财务专员的权限 if(processState==OrderChangeProcess.CWZY.getCode()&&TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) { parameter.put("aids", adminMapper.selectBySuperId(TokenManager.getAdminId())); }else { parameter.put("aid", TokenManager.getAdminId()); } Pagination data = (Pagination)findPage("selectOrderChangeList", "selectOrderChangeCount", parameter, pageNo, pageSize); return data; } @Override public int updateOrderChange(NewOrderChangeBo t,Integer changeType,String startRemarks) { NewOrderChange noc=new NewOrderChange(); t.setProcessState(1); noc.setOrderNo(t.getOrderNo()); noc.setId(t.getId()); if (changeType==0) { // chekeChangeTaskNumber(noc); noc.setRemarks(t.getRemarks()); if(t.getContractPictureUrl()!=null)noc.setContractPictureUrl(t.getContractPictureUrl()); noc.setType(t.getType()); noc.setVoucherUrl(t.getVoucherUrl()); noc.setTotalAmount(t.getTotalAmount()); noc.setSettlementAmount(t.getSettlementAmount()); noc.setChangeAmount(t.getChangeAmount()); noc.setApplicant(t.getApplicant()); noc.setStatus(1);//订单置为正常 noc.setDepName(t.getDepName()); noc.setContacts(t.getContacts()); noc.setContactMobile(t.getContactMobile()); noc.setManagerContacts(t.getManagerContacts()); noc.setManagerContactMobile(t.getManagerContactMobile()); Date date =new Date(); addOrderChangeLog(startRemarks==null?"":startRemarks, 0, t.getOrderNo(), noc.getId(),date); if(t.getType()!=0)chekeAmout(t); TOrderNew ton=new TOrderNew(); ton.setOrderNo(noc.getOrderNo()); ton.setDeleteSign(2); if(t.getType()==OrderChangeType.KJXY.getCode()){ ton.setTotalAmount(t.getTotalAmount()); } tOrderNewMapper.updateByPrimaryKeySelective(ton); TOrderNewBo tOrderNew = tOrderNewMapper.getSaleIdByOno(t.getOrderNo()); if (t.getType()!=OrderChangeType.JBGGT.getCode()){ //不是仅合同变更就看营销经理是否存在 if (tOrderNew.getManagerName()!=null){ noc.setProcessState(OrderChangeProcess.YXJL.getCode()); }else { //增加营销经理的日志 date.setTime(date.getTime()+500); addOrderChangeLog("未设置营销经理自动通过", 2, t.getOrderNo(), noc.getId(),date); //营销经理不存在判定营销管理员 List admins = adminMapper.listAdminBydepIdAndRoleType(tOrderNew.getOrderDep(), AFTConstants.SALESMAN_ADMIN); boolean flag=false; for (Admin admin : admins) { if (tOrderNew.getSalesmanId().equals(admin.getId())){ flag=true; } } //如果自己是审核人员则跳过 if (flag){ date.setTime(date.getTime()+500); addOrderChangeLog("审核人重复自动通过", 2, t.getOrderNo(), noc.getId(),date); noc.setProcessState(OrderChangeProcess.JSY.getCode()); if (t.getType()==OrderChangeType.CB.getCode()|| t.getType()==OrderChangeType.JXMBG.getCode()|| t.getType()==OrderChangeType.XMJJEBG.getCode()|| t.getType()==OrderChangeType.TDTK.getCode()|| t.getType()==OrderChangeType.TDBTK.getCode()){ //将所有审核重置 orderExamineMapper.updateByOrderNo(t.getOrderNo(),null,null); pushZXS(t,date,1); }else if(t.getType()==OrderChangeType.ZS.getCode()||t.getType()==OrderChangeType.KJXY.getCode()){ noc.setProcessState(OrderChangeProcess.CWZY.getCode()); }else if(t.getType()==OrderChangeType.JJEBG.getCode()){ noc.setProcessState(OrderChangeProcess.JSZJ.getCode()); } }else { //不跳过就设置流程未营销管理员 noc.setProcessState(OrderChangeProcess.YXGLY.getCode()); } } }else { noc.setProcessState(OrderChangeProcess.YXGLY.getCode()); t.setProcessState(OrderChangeProcess.YXGLY.getCode()); } sendNotice(0, t); pushOrderCangeProcess(noc); //框架协议不需要设置咨询师审核角色 if (t.getType()!=OrderChangeType.KJXY.getCode()){ pushOrderExamine(noc.getOrderNo(),noc.getType()); } }else if (changeType==2) { noc.setCwCost(t.getCwCost()); noc.setCwIndirectCost(t.getCwIndirectCost()); noc.setRefundableAmount(t.getRefundableAmount()); } if(changeType!=1)newOrderChangeMapper.updateByPrimaryKeySelective(noc); return 1; } @Override public void pushOrderCangeProcess(NewOrderChange noc) { if (noc.getProcessState()== OrderChangeProcess.YXY.getCode()){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); noc.setExamineName(ton.getSalesmanName()); }else if (noc.getProcessState()== OrderChangeProcess.YXJL.getCode()){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); Admin saleman = adminMapper.selectByPrimaryKey(ton.getSalesmanId()); Admin manager = adminMapper.selectByPrimaryKey(saleman.getManagerId()); noc.setExamineName(manager.getName()); }else if (noc.getProcessState()== OrderChangeProcess.YXGLY.getCode()){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); StringBuffer str=new StringBuffer(); List admins = adminMapper.listAdminBydepIdAndRoleType(ton.getOrderDep(),AFTConstants.SALESMAN_ADMIN); if (admins.isEmpty()){ OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep()); admins = adminMapper.listAdminBydepIdAndRoleType(dep.getSuperId(),AFTConstants.SALESMAN_ADMIN); } for (Admin admin : admins) { if (!str.toString().contains(admin.getName()))str.append(admin.getName()).append(","); } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.JSY.getCode()){ List os = orderExamineMapper.selectByOrderNo(noc.getOrderNo(), 0); StringBuffer str=new StringBuffer(); for (OrderExamineBo o : os) { if (o.getStatus()==0){ if (!str.toString().contains(o.getName()))str.append(o.getName()).append(","); } } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.JSJL.getCode()){ List os = orderExamineMapper.selectByOrderNo(noc.getOrderNo(), 1); StringBuffer str=new StringBuffer(); for (OrderExamineBo o : os) { if (o.getStatus()==0){ if (!str.toString().contains(o.getName()))str.append(o.getName()).append(","); } } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.JSZJ.getCode()){ StringBuffer str=new StringBuffer(); List admins = adminMapper.getAdminRoleTypeList(AFTConstants.TECH_ADMIN); for (Admin a : admins) { str=str.append(a.getName()).append(","); } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.CWZY.getCode()){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep()); noc.setExamineName(dep.getFinanceName()); }else if (noc.getProcessState()== OrderChangeProcess.CWZJ.getCode()){ StringBuffer str=new StringBuffer(); List admins = adminMapper.getAdminRoleTypeList(AFTConstants.FINANCE_ADMIN); for (Admin a : admins) { str=str.append(a.getName()).append(","); } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.TPSH.getCode() ||noc.getProcessState()== OrderChangeProcess.DSZ.getCode() ||noc.getProcessState()== OrderChangeProcess.FZC.getCode()){ if(noc.getStatus()==1){ StringBuffer str=new StringBuffer(); if (noc.getProcessState()== OrderChangeProcess.TPSH.getCode()){ Department department = tOrderNewMapper.selectDepByOrderNo(noc.getOrderNo()); Admin a = adminMapper.selectByPrimaryKey(department.getApprovalAid()); str=str.append(a.getName()).append(","); }else if(noc.getProcessState()== OrderChangeProcess.DSZ.getCode()){ List admins = adminMapper.getAdminRoleTypeList(AFTConstants.APPROVAL_DECISION); for (Admin a : admins) { str=str.append(a.getName()).append(","); } } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); } else if(noc.getStatus()==2){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep()); noc.setExamineName(dep.getFinanceName()); }else { noc.setExamineName(""); } } } private void chekeAmout(NewOrderChangeBo t) { BigDecimal amout=t.getTotalAmount(); List list = selectChangeTask(t.getId()); BigDecimal count=new BigDecimal(0); for (TChangeTaskOut tt : list) { if(tt.getType()!=3)count=count.add(tt.getCommodityPrice()); } if (amout.compareTo(count)!=0) { throw new BusinessException("项目金额总和不等于合同总金额。"); } List list2 = selectChangeDun(t.getId()); count=new BigDecimal(0); for (TChangeDunOut td : list2) { if(td.getMoney()==null)td.setMoney(new BigDecimal(0)); if(td.getType()!=3)count=count.add(td.getMoney()); } if (amout.compareTo(count)!=0) { throw new BusinessException("收款节点金额总和不等于合同总金额。"); } } @Override public int addOrderRefundInvoice(OrderRefundInvoice o) { o.setCreateTime(new Date()); newOrderChangeMapper.addRefundInvoice(o.getOrderNo(),o.getAmount()); return orderRefundInvoiceMapper.insertSelective(o); } @Override public int deleteOrderRefundInvoice(Integer id) { OrderRefundInvoice or=orderRefundInvoiceMapper.selectByPrimaryKey(id); newOrderChangeMapper.subtractRefundInvoice(or.getOrderNo(),or.getAmount()); return orderRefundInvoiceMapper.deleteByPrimaryKey(id); } @Override public List listOrderRefundInvoice(String orderNo) { return orderRefundInvoiceMapper.selectByorderNo(orderNo); } @Override @Transactional public int pushCompleteOrderChange(NewOrderChangeBo nb) { //变更完成 changeAdopt(nb); pushChange(nb); newOrderChangeMapper.updateByPrimaryKeySelective(nb); TOrderNewBo order=tOrderNewMapper.getSaleIdByOno(nb.getOrderNo()); List alist = getAllAid(nb.getId()); Date date=new Date(); date.setTime(date.getTime()+500); addOrderChangeLog("变更完成。", 4, nb.getOrderNo(), nb.getId(),date); pushGeneralSendNoticeAndEmail(alist,NoticeStatus.ORDER_CHANGE_END.getCode(), order, TokenManager.getAdminId(),0); return 1; } /** * 获取除当前审核者所有审核者 * @param id * @return */ private List getAllAid(Integer id) { List alist = new ArrayList<>(); Listnewl=new ArrayList<>(); List list=orderChangeLogMapper.selectOrderChangeLogList(id.toString()); for (OrderChangeLogBo log : list) { if (!TokenManager.getAdminId().equals(log.getAuditor())){ if (!newl.contains(log.getAuditor())){ newl.add(log.getAuditor()); } } } alist.addAll(newl); return alist; } @Override public int pushCompleteRefund(NewOrderChangeBo nb) { NewOrderChangeBo nob=newOrderChangeMapper.selectById(nb.getId()); TOrderNewBo o=tOrderNewMapper.getSaleIdByOno(nob.getOrderNo()); List alist = new ArrayList<>(); alist.add(o.getSalesmanId()); nb.setOrderNo(nob.getOrderNo()); nb.setExamineName(""); nb.setType(nob.getType()); newOrderChangeMapper.updateByPrimaryKeySelective(nb); addOrderChangeLog("变更财务退票。", 2, nob.getOrderNo(), nb.getId()); pushGeneralSendNoticeAndEmail(alist,NoticeStatus.ORDER_CHANGE_YES.getCode(), o, TokenManager.getAdminId(),0); nb.setStatus(4); pushCompleteOrderChange(nb); return 1; } @Override public boolean checkChangeId(Integer id) { NewOrderChangeBo nob=newOrderChangeMapper.selectById(id); if (nob.getStatus()==4){ return true; } return false; } /** * 修改订单数据 * @param nb */ private TOrderNew pushChange(NewOrderChangeBo nb) { TOrderNew o=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo()); NewOrderChangeBo nob=newOrderChangeMapper.selectById(nb.getId()); // 变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送 if(nob.getType()==OrderChangeType.TDTK.getCode()) { o.setTotalAmount(nob.getTotalAmount()); if (nob.getFirstAmount()!=null)o.setFirstAmount(nob.getFirstAmount()); }else if (nob.getType()==OrderChangeType.XMJJEBG.getCode()) { o.setTotalAmount(nob.getTotalAmount()); if (nob.getFirstAmount()!=null)o.setFirstAmount(nob.getFirstAmount()); }else if (nob.getType()==OrderChangeType.JJEBG.getCode()) { o.setTotalAmount(nob.getTotalAmount()); if (nob.getFirstAmount()!=null)o.setFirstAmount(nob.getFirstAmount()); }else if (nob.getType()==OrderChangeType.CB.getCode()){ o.setTotalAmount(nob.getTotalAmount()); if (nob.getFirstAmount()!=null)o.setFirstAmount(nob.getFirstAmount()); } //处理变更项目与催款新增在订单中 pushTaskAndDun(nob.getId(),o); o.setProcessStatus(orderProjectService.getOrderProcessStatus(nb.getOrderNo())); o.setDeleteSign(0); //处理客户中间表退单标识 //处理客户已派项目 UserMid um=new UserMid(); String taskNames=userMidMapper.getUserTaskNames(o.getBuyerId()); um.setUid(o.getBuyerId()); um.setTaskNames(taskNames); if (nb.getType()==0)um.setChargeback(1); userMidMapper.updateByUid(um); //如果合同不是空,则修改合同 if (nob.getContractPictureUrl()!=null)o.setContractPictureUrl(nob.getContractPictureUrl()); //清算状态 0-首付待付请,1-尾款待付清,2-已付请,3-部分退款,4-全部退款 o.setLiquidationStatus(OrderUtils.getLiquidationStatus(o)); tOrderNewMapper.updateByPrimaryKeySelective(o); orderProjectService.updateMidServiceProject(o.getOrderNo()); return o; } private void pushTaskAndDun(Integer id,TOrderNew o) { pushChangeAddOrderTask(id); //处理主项目显示派单年份 List listcd=tChangeDunMapper.selectByCid(id); for (TChangeDunOut cd : listcd) { NewOrderDun nd=new NewOrderDun(); if (cd.getType()==1) { nd.setOrderNo(cd.getOrderNo()); nd.setAid(cd.getAid()); nd.setAppropriationRatio(cd.getAppropriationRatio()); nd.setTid(cd.getTid()); nd.setProjectType(cd.getProjectType()); nd.setDunType(cd.getDunType()); nd.setMoney(cd.getMoney()); nd.setWaitDay(cd.getWaitDay()); nd.setStartTime(cd.getStartTime()); nd.setEffectiveCount(cd.getEffectiveCount()); nd.setCustomizeTime(cd.getCustomizeTime()); nd.setCustomizeName(cd.getCustomizeName()); if (cd.getDunType()==1) { nd.setStatus(1); nd.setStartTime(new Date()); } newOrderDunMapper.insertSelective(nd); }else if (cd.getType()==2) { nd.setId(cd.getDid()); nd.setMoney(cd.getMoney()); newOrderDunMapper.updateByPrimaryKeySelective(nd); }else if(cd.getType()==3) { newOrderDunMapper.deleteByPrimaryKey(cd.getDid()); } } orderNewService.pushOrderMidDun(o); } /** * 通过变更id来处理变更,先将父级新增、再新增子集。为了获取到订单项目的父子级关系 * @param id */ private void pushChangeAddOrderTask(Integer id) { List listct=tChangeTaskMapper.selectByCid(id,3); HashMap map=changeAddOrderTask(listct,null); List listct2=tChangeTaskMapper.selectByCid(id,2); changeAddOrderTask(listct2,map); } /** * * @param listct 变更数据 * @param input 新增数据Id */ private HashMap changeAddOrderTask(List listct, HashMap input) { HashMap map = new HashMap<>(); for (TChangeTaskOut cd : listct) { TOrderTask ot=new TOrderTask(); if (cd.getType()==1) { ot.setOrderNo(cd.getOrderNo()); ot.setCommodityId(cd.getCommodityId()); ot.setCommodityName(cd.getCommodityName()); ot.setCommodityPrice(cd.getCommodityPrice()); ot.setCommodityQuantity(cd.getCommodityQuantity()); ot.setTaskComment(cd.getTaskComment()); ot.setMain(cd.getMain()); ot.setTaskStatus(0); ot.setSplitStatus(cd.getSplitStatus()); if (cd.getSplitStatus()==2){ Integer tid; //如果原本有上级直接使用 if (cd.getSplitSuper()!=null){ ot.setSplitSuper(cd.getSplitSuper()); }else { //如果没有,原本项目,这用获取新增的项目 if (cd.getTid()!=null){ tid=cd.getTid(); }else{ tid=input.get(cd.getChangeSplitSuper()); } if (tid==null)tid=tChangeTaskMapper.selectByPrimaryKey(cd.getChangeSplitSuper()).getTid(); ot.setSplitSuper(tid); } ot.setSplitId(pushSplitId(ot.getSplitSuper())); ot.setCommodityPrice(new BigDecimal(0)); } if (cd.getDeclarationBatch()!=null)ot.setDeclarationBatch(cd.getDeclarationBatch()); if (cd.getPatentType()!=null)ot.setPatentType(cd.getPatentType()); tOrderTaskMapper.insertSelective(ot); InputAddTask inMid=new InputAddTask(); inMid.setId(ot.getId()); inMid.setCommodityId(ot.getCommodityId()); inMid.setOrderNo(ot.getOrderNo()); inMid.setChange(1); inMid.setLastYear(cd.getLastYear()); inMid.setLastYearCapital(cd.getLastYearCapital()); inMid.setLastYearIncome(cd.getLastYearIncome()); orderNewService.addTaskMid(inMid); if (cd.getSplitStatus()==1){ map.put(cd.getId(),ot.getId()); } orderNewService.addTTaskMember(ot.getId(),cd.getServiceLife(),cd.getServiceYear(),cd.getYearSum(),cd.getContractTerm()); cd.setTid(ot.getId()); tChangeTaskMapper.updateByPrimaryKeySelective(cd); tChangeDunMapper.updateByCTid(cd.getId(), ot.getId()); }else if (cd.getType()==2) { ot.setId(cd.getTid()); ot.setCommodityPrice(cd.getCommodityPrice()); ot.setCommodityQuantity(cd.getCommodityQuantity()); ot.setSplitStatus(cd.getSplitStatus()); if (ot.getSplitSuper()!=null)ot.setSplitId(pushSplitId(ot.getSplitSuper())); if (cd.getDeclarationBatch()!=null)ot.setDeclarationBatch(cd.getDeclarationBatch()); if (cd.getPatentType()!=null)ot.setPatentType(cd.getPatentType()); tOrderTaskMapper.updateByPrimaryKeySelective(ot); if (cd.getServiceLife()!=null){ updateTaskMember(ot.getId(),cd.getServiceLife(),cd.getServiceYear(),cd.getYearSum(),cd.getContractTerm()); } if (cd.getLastYear()!=null){ updateTaskMid(ot.getId(),cd.getLastYear(),cd.getLastYearCapital(),cd.getLastYearIncome()); } }else if(cd.getType()==3) { tOrderTaskMapper.deleteByPrimaryKey(cd.getTid()); } } return map; } private Integer pushSplitId(Integer splitSuper) { //计算出拆分编号 Integer i = tOrderTaskMapper.getSplitCount(splitSuper); i++; return i; } private void updateTaskMid(Integer id, String lastYear, BigDecimal lastYearCapital, BigDecimal lastYearIncome) { TTaskMid tTaskMid = new TTaskMid(); tTaskMid.setTid(id); tTaskMid.setLastYear(lastYear); tTaskMid.setLastYearCapital(lastYearCapital); tTaskMid.setLastYearIncome(lastYearIncome); tTaskMidMapper.updateByTid(tTaskMid); } private void updateTaskMember(Integer id, String serviceLife, String serviceYear, Integer yearSum,String contractTerm) { TTaskMember ttm=new TTaskMember(); ttm.setTid(id); ttm.setServiceLife(serviceLife); ttm.setServiceYear(serviceYear); ttm.setYearSum(yearSum); ttm.setContractTerm(contractTerm); tTaskMemberMapper.updateByTid(ttm); } @Override public Map listOrderInvoiceAndBill(String orderNo) { Map map=new HashMap<>(); Listlist=tOrderBillNewMapper.selectByOrderNo(orderNo); Listlist2=tOrderInvoiceMapper.selectByOrderNo(orderNo); map.put("bill", list); map.put("invoice", list2); return map; } @SuppressWarnings("unchecked") @Override public void exportMyChange(HttpServletResponse response, String userName, Integer processState, Integer timeType, String startTime, String endTime, String deps, String salesmanName, Integer complete,String orderNo, String contractNo, Integer type,Integer pageSize,Integer pageNo) throws IOException { OutputStream out = response.getOutputStream(); Listlist=(List) selectOrderChangeList( userName, processState, timeType, startTime, endTime, deps, salesmanName, complete, orderNo, contractNo, type, pageSize, pageNo).getList(); try { //设计表头 String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间","订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"} String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间","订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"}; String fileName ="开票变更记录表" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls"; //type 0 变更 XSSFWorkbook wb =ExportExcelUtil.exportTemplateInfoS(comment,"开票变更记录"); //根据列表编写文档 XSSFSheet sheet =wb.getSheetAt(0); for (NewOderCahngeListBo ob : (List)list) { //新增一行 XSSFRow r = sheet.createRow(sheet.getLastRowNum()+1); for (int i = 0; i < comment.length; i++) { //当前列的只 String o = ""; switch (comment[i]) { // String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间", // "订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"}; case "合同编号": o = ob.getContractNo(); break; case "订单编号": o = ob.getOrderNo().toString(); break; case "客户名称": o = ob.getNickname(); break; case "订单部门": o = ob.getDepName(); break; case "订单类型": o = OrderType.getValueByCode(ob.getOrderType()); break; case "下单时间": o = ob.getEstablishTimes(); break; case "订单状态": o = OrderNewState.getValueByCode(ob.getOrderStatus()); break; case "合同额(万元)": o = ob.getTotalAmount().toString(); break; case "已付额(万元)": o = ob.getSettlementAmount().toString(); break; case "欠款(万元)": o = ob.getArrears().toString(); break; case "订单负责人": o = ob.getSalesmanName(); break; case "变更类型": o = OrderChangeType.getValueByCode(ob.getType()); break; case "变更审核状态": o = getProcessState(ob.getProcessState(),ob.getStatus()); break; case "变更提交时间": o = ob.getCreateTimes(); break; default: o = ""; break; } XSSFCell c = r.createCell(i); c.setCellValue(o); } } //返回名称及参数 response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1")); response.setContentType("application/octet-stream;charset=utf-8"); // 返回数据流 wb.write(out); out.flush(); out.close(); } catch (Exception e) { throw new BusinessException(new Error("表格生成错误。")); }finally { out.flush(); out.close(); } } public static String getProcessState(Integer processState,Integer status) { String str=""; if (processState == 0) { str = "营销员"; } else if (processState == 1) { str = "营销管理员"; } else if (processState == 2) { str = "咨询师"; } else if (processState == 3) { str = "咨询师经理"; } else if (processState == 4) { str = "咨询师总监"; } else if (processState == 5) { str = "财务专员"; } else if (processState == 6) { str = "财务总监"; } else if (processState == 7) { str = "总裁"; } else if (processState == 8) { str = "董事长"; } String num = ""; if (status == 0) { num = "发起"; } else if (status == 1) { num = "审核中"; } else if (status == 2) { num = "通过"; } else if (status == 3) { num = "驳回"; return num + "到" + str; } else if (status == 4) { num = "完成"; } if (processState == 7 && status == 2) { return "订单变更退票中"; } else if (processState == 8 && status == 2) { return "订单变更退票中"; } else if (processState >= 7 && status == 4) { return "订单变更已完成"; } else { return str + num; } } @Override public Object addChangeTask(TChangeTask t) { t.setType(1); tChangeTaskMapper.insertSelective(t); return t; } @Override public int addChangeDun(TChangeDun d) { d.setAid(TokenManager.getAdminId()); d.setType(1); if(d.getCustomizeTimes()!=null)d.setCustomizeTime(DateUtils.StringToDate(d.getCustomizeTimes(), AFTConstants.YYYYMMDD)); return tChangeDunMapper.insertSelective(d); } @Override public int deleteChangeTask(Integer id) { return tChangeTaskMapper.deleteByPrimaryKey(id); } @Override public int deleteChangeDun(Integer id) { return tChangeDunMapper.deleteByPrimaryKey(id); } @Override public List selectChangeTask(Integer cid) { List list=tChangeTaskMapper.selectByCid(cid,3);//3设置不等于2 for (TChangeTaskOut tChangeTaskOut : list) { if(tChangeTaskOut.getSplitStatus()==1){ //变更会员子项目有2中,一种是复制过来的,根据上级项目编号关联,还一种是新增的根据变更项目编号关联 TChangeTask input= new TChangeTask(); input.setCid(cid); input.setSplitSuper(tChangeTaskOut.getTid()); input.setChangeSplitSuper(tChangeTaskOut.getId()); tChangeTaskOut.setList(getChangeSonTasks(input)); } } return list; } @Override public List selectChangeDun(Integer cid) { return tChangeDunMapper.selectByCid(cid); } @Override public int updateChangeTask(InputTChangeTask t) { //有tid是订单复制项目 if(t.getTid()!=null) { //type 0正常 1新增 2修改 3删除 TChangeTask tt=tChangeTaskMapper.selectByPrimaryKey(t.getId()); BusinessProject bp = businessProjectMapper.selectByPrimaryKey(tt.getCommodityId()); Integer member=null; if (t.getType()==3) { //删除首先将项目删除,然后将所属催款做删除 if (bp.getType()==7)member=1; tChangeTaskMapper.updateByTid(t.getTid(),null,tt.getCid(),3,member); if (tt.getSplitStatus()==0) { tChangeDunMapper.updateByTid(tt.getTid(),tt.getCid(),3); }else if (tt.getSplitStatus()==1) { t.setServiceYear(""); //删除父类下所有的子类 if (tt.getType()==1){ tChangeTaskMapper.deleteByChangeSplitSuper(tt.getTid()); }else { tChangeTaskMapper.updateByTid(null,tt.getTid(),tt.getCid(),3,member); tChangeDunMapper.updateByTid(tt.getTid(),tt.getCid(),3); } }else if(tt.getSplitStatus()==2) { List list=tChangeTaskMapper.selectBySuper(tt.getSplitSuper(),null,tt.getCid()); boolean flag=true; for (TChangeTask tc : list) { if (tc.getType()!=3) { flag=false; break; } } if (flag) { //如果所有子类删除判断删除父类 tChangeTaskMapper.updateByTid(tt.getSplitSuper(),null,tt.getCid(),3,member); tChangeDunMapper.updateByTid(tt.getSplitSuper(),tt.getCid(),3); } } }else if(t.getType()==2){ tChangeTaskMapper.updateByTid(t.getTid(),null,tt.getCid(),2,member); if (tt.getSplitStatus()==1) { if (t.getServiceLife()!=null||t.getServiceYear()!=null||t.getYearSum()!=null||t.getContractTerm()!=null){ tChangeTaskMapper.updateMemberByTid(tt.getTid(),t.getCid(),null,t.getServiceLife(),t.getServiceYear(),t.getYearSum(),t.getContractTerm()); } updateChangeType(tt); }else if(tt.getSplitStatus()==2) { tChangeTaskMapper.updateByTid(tt.getSplitSuper(),null,tt.getCid(),2,member); } } //如果没有tid是新增项目则直接删除 }else { if (t.getType()==3) { tChangeTaskMapper.deleteByPrimaryKey(t.getId()); tChangeTaskMapper.deleteByChangeSplitSuper(t.getId()); tChangeDunMapper.deleteByCtid(t.getId()); } } return tChangeTaskMapper.updateByPrimaryKeySelective(t); } private void updateChangeType(TChangeTask t) { List changeSonTasks = getChangeSonTasks(t); List list=new ArrayList<>(); for (TChangeTask changeSonTask : changeSonTasks) { if (changeSonTask.getType()==0||changeSonTask.getType()==2){ list.add(changeSonTask.getId()); } } if(!list.isEmpty())tChangeTaskMapper.updateTypeBatch(2,list); } @Override public int updateChangeDun(TChangeDun t) { if(t.getCustomizeTimes()!=null)t.setCustomizeTime(DateUtils.StringToDate(t.getCustomizeTimes(), AFTConstants.YYYYMMDD)); if (t.getType()==1||t.getType()==2) { return tChangeDunMapper.updateByPrimaryKeySelective(t); }else if(t.getType()==3){ if (t.getDid()!=null) { return tChangeDunMapper.updateByPrimaryKeySelective(t); }else { return tChangeDunMapper.deleteByPrimaryKey(t.getId()); } }else { return 0; } } @Override public List orderChangeUsed(String orderNo) { List list=tOrderNewMapper.selectUsedOrderByOrder(orderNo); for (TOrderNewBo t : list) { t.setDunList(newOrderDunService.selectListNewOrderDun(orderNo)); t.setTaskList(orderNewService.selectOrderTask(orderNo,0)); } return list; } @Override public List> getOrderChange(String orderNo) { List> list=new ArrayList<>(); list =newOrderChangeMapper.getOrderChange(orderNo); return list; } @Override public int addOrderRefund(InputNewOrderRefund or) { or.setRefundTime(DateUtils.StringToDate(or.getRefundDate(), AFTConstants.YYYYMMDD)); return newOrderRefundMapper.insertSelective(or); } @Override public int deleteRefund(Integer id) { return newOrderRefundMapper.deleteByPrimaryKey(id); } @Override public List listRefund(Integer id) { return newOrderRefundMapper.listRefund(id); } @Override public int pushRefund(Integer id,String refundUrl) { NewOrderChange noc=newOrderChangeMapper.selectByPrimaryKey(id); if (noc.getRefundStatus()!=1) { List list=listRefund(id); BigDecimal bd=new BigDecimal(0); TOrderNew order=tOrderNewMapper.selectByPrimaryKey(noc.getOrderNo()); for (OutNewOrderRefund o : list) { TOrderBillNew tbn =new TOrderBillNew(); tbn.setOrderNo(o.getOrderNo()); tbn.setTransactionAmount(o.getRefundAmount().negate());// 取负数 tbn.setBillNo(UUID.randomUUID().toString().replaceAll("-", "")); tbn.setCreater(TokenManager.getAdminId()); tbn.setPayeeId(order.getBuyerId()); tbn.setPayerId("0"); tbn.setRemarks(o.getRemarks()); tbn.setTransactionSubject(2); tbn.setTransactionChannel(2); tbn.setConfirmSign(1); tbn.setRefundTime(o.getRefundTime()); bd=bd.add(o.getRefundAmount()); tOrderBillNewMapper.insertSelective(tbn); } TOrderNew o=new TOrderNew(); o.setOrderNo(noc.getOrderNo()); o.setRefundAmount(bd); tOrderNewMapper.updaterefund(o); NewOrderChange n=new NewOrderChange(); n.setId(id); n.setRefundStatus(1); n.setRefundUrl(refundUrl); newOrderChangeMapper.updateByPrimaryKeySelective(n); } return 1; } @Override public boolean checkrefund(InputNewOrderRefund or) { if (or.getOrderNo()!=null) { TOrderNew o=tOrderNewMapper.selectByPrimaryKey(or.getOrderNo()); BigDecimal refund=new BigDecimal(0); List list=listRefund(or.getCid()); refund=refund.add(or.getRefundAmount()); for (OutNewOrderRefund oor : list) { refund=refund.add(oor.getRefundAmount()); } if (o.getSettlementAmount().compareTo(refund)!=-1) { return false; }else { return true; } } return true; } @Override public int updateCancelOrderChange(NewOrderChangeBo nb) { NewOrderChange noc=new NewOrderChange(); noc.setId(nb.getId()); noc.setStatus(5); newOrderChangeMapper.updateByPrimaryKeySelective(noc); TOrderNew t=new TOrderNew(); t.setOrderNo(nb.getOrderNo()); t.setDeleteSign(0); addOrderChangeLog("变更撤销成功", 5, nb.getOrderNo(), nb.getId()); tOrderNewMapper.updateByPrimaryKeySelective(t); return 1; } @Override public Object addMemberSonProject(Integer id, String serviceYear, String taskComment) { //先修改父项目 TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id); Integer tid=tChangeTask.getTid(); tChangeTask.setSplitStatus(1); if (tChangeTask.getType()!=1)tChangeTask.setType(2); tChangeTaskMapper.updateByPrimaryKey(tChangeTask); //在判断是否有删除的年份没有就新增 tChangeTask.setId(null); tChangeTask.setTid(null); tChangeTask.setSplitStatus(2); if(tid!=null){ tChangeTask.setSplitSuper(tid); }else { tChangeTask.setChangeSplitSuper(id); } tChangeTask.setType(1); tChangeTask.setCommodityQuantity(1); tChangeTask.setCommodityPrice(new BigDecimal(0)); tChangeTask.setTaskComment(taskComment); tChangeTask.setServiceYear(serviceYear); tChangeTaskMapper.insertSelective(tChangeTask); //根据上级id修改上级 updateSuperServiceYear(tChangeTask); return tChangeTask; } public void updateSuperServiceYear(TChangeTask tChangeTask) { if(tChangeTask.getSplitSuper()!=null){ tChangeTaskMapper.updateSuperServiceYear(tChangeTask); }else { tChangeTaskMapper.updateChangeSuperServiceYear(tChangeTask); } } @Override public int deleteMemberSonProject(Integer id) { TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id); if (tChangeTask.getType()==1){ tChangeTaskMapper.deleteByPrimaryKey(id); }else { TChangeTask newtChangeTask = new TChangeTask(); newtChangeTask.setId(id); newtChangeTask.setType(3); tChangeTaskMapper.updateByPrimaryKeySelective(newtChangeTask); } List tChangeTasks = getChangeSonTasks(tChangeTask); //如果没有子项目则修改上级 if (tChangeTasks == null || tChangeTasks.isEmpty()) { TChangeTask changeTask = new TChangeTask(); changeTask.setId(tChangeTask.getSplitSuper()); changeTask.setSplitStatus(0); tChangeTaskMapper.updateByPrimaryKeySelective(changeTask); } updateSuperServiceYear(tChangeTask); return 1; } @Override public Object updateMemberSonProject(Integer id,String taskComment) { TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id); tChangeTask.setType(2); tChangeTask.setTaskComment(taskComment); tChangeTaskMapper.updateByPrimaryKeySelective(tChangeTask); updateSuperServiceYear(tChangeTask); return tChangeTask; } /** * 如果是有splitSuper 是父有项目的tid,变更父项目有订单项目,则需要看订单项目变更后的子集,反正则不需要 * changeSplitSuper 是当前变更项目的子集 * @param tChangeTask * @return */ private List getChangeSonTasks(TChangeTask tChangeTask) { List tChangeTasks = new ArrayList<>(); if (tChangeTask.getSplitSuper()!=null)tChangeTasks.addAll(tChangeTaskMapper.selectBySuper(tChangeTask.getSplitSuper(),null, tChangeTask.getCid())); tChangeTasks.addAll(tChangeTaskMapper.selectBySuper(null, tChangeTask.getChangeSplitSuper(), tChangeTask.getCid())); return tChangeTasks; } @Override public Object gerProcessName(Integer id) { NewOrderChange newOrderChange=newOrderChangeMapper.selectByPrimaryKey(id); OutProcessName processName = newOrderChangeMapper.getProcessName(id, newOrderChange.getOrderNo()); if (processName.getSalesmanId().equals(AFTConstants.CAOJIN_AID)){ processName.setSpecial(1); }else { if (processName.getApprovalStatus()==0){ processName.setApprovalName("未设置特批审核人员"); } } return processName; } @Override public boolean checkTaskMain(TChangeTask t) { int i=0; if (t.getMain()==1){ if (t.getId()!=null) { TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(t.getId()); t.setCid(tChangeTask.getCid()); } List l = tChangeTaskMapper.selectByCid(t.getCid(), null); for (TChangeTaskOut task : l) { if (task.getId().equals(t.getId())){ task.setMain(1); } if (task.getMain()==1){ i++; } } if (i>1){ return true; } } return false; } @Override public void pushChangeProcess(String taskReceiverId, Integer type) { List list = newOrderChangeMapper.selectProcess(type, taskReceiverId); if(!list.isEmpty()){ Date date =new Date(); for (Integer i : list) { NewOrderChangeBo changeBo = orderChangeDetailsById(i); if (type==3)pushZXS(changeBo,date,1); if (type==4)pushZXSJL(changeBo,date,1); newOrderChangeMapper.updateByPrimaryKeySelective(changeBo); } } } }