package com.goafanti.order.service.impl; import java.math.BigDecimal; import java.text.ParseException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.goafanti.common.bo.Error; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.dao.NewOrderChangeMapper; import com.goafanti.common.dao.OrderChangeLogMapper; import com.goafanti.common.dao.TOrderDunMapper; import com.goafanti.common.dao.TOrderNewMapper; import com.goafanti.common.dao.TOrderTaskMapper; import com.goafanti.common.error.BusinessException; import com.goafanti.common.model.OrderChangeLog; import com.goafanti.common.model.TOrderDun; import com.goafanti.common.model.TOrderNew; import com.goafanti.common.model.NewOrderChange; import com.goafanti.common.utils.DateUtils; 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.NewOrderChangeBo; import com.goafanti.order.bo.OrderChangeLogBo; import com.goafanti.order.bo.TOrderTaskBo; import com.goafanti.order.service.OrderChangeService; import com.goafanti.order.service.OrderService; @Service public class OrderChangeServiceImpl extends BaseMybatisDao implements OrderChangeService { @Autowired private NewOrderChangeMapper newOrderChangeMapper; @Autowired private OrderChangeLogMapper orderChangeLogMapper; @Autowired private TOrderNewMapper tOrderNewMapper; @Autowired private TOrderDunMapper tOrderDunMapper; @Autowired private TOrderTaskMapper tOrderTaskMapper; @Autowired private OrderService orderService; @Autowired private JDBCIdGenerator idGenerator; @Override public int addOrderChange(NewOrderChangeBo t) { TOrderNew ton=new TOrderNew(); ton.setOrderNo(t.getOrderNo()); ton.setDeleteSign(2);//将订单置为锁定 t.setProcessState(1);//设置营销管理员来审核 tOrderNewMapper.updateByPrimaryKeySelective(ton); newOrderChangeMapper.insertSelective(t); NewOrderChangeBo ncb=newOrderChangeMapper.selectByorderNo(t.getOrderNo()); OrderChangeLog ocl=new OrderChangeLog(); ocl.setAuditor(TokenManager.getAdminId()); ocl.setOrderNo(t.getOrderNo()); ocl.setRemarks("发起了订单变更"); ocl.setChangeId(ncb.getId()); ocl.setStatus(0); orderChangeLogMapper.insertSelective(ocl); return 1; } @Override public NewOrderChangeBo orderChangeDetails(String orderNo) { NewOrderChangeBo nb=newOrderChangeMapper.selectByorderNo(orderNo); return nb; } @Override public int pushOrderChangeAudit(String orderNo, String remarks, Integer status,Integer processState) { NewOrderChangeBo nb=newOrderChangeMapper.selectByorderNo(orderNo); if (processState==null||(nb.getProcessState()!=9&&processState !=nb.getProcessState()) ) { throw new BusinessException(new Error( "变更流程与您所操作流程不匹配","变更流程与您所操作流程不匹配")); } if (nb.getStatus()==4) { throw new BusinessException(new Error( "变更流程已通过审核","变更流程已通过审核")); } //2通过 3驳回 if (status==2) { //变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送 if(nb.getType()==0){ if (nb.getChangeAmount().compareTo(new BigDecimal("0.2"))<0) {//小于则总裁通过,大于则董事长 if(nb.getProcessState()==7) {//项目变更通过 changgeAdopt(nb);}else {nb.setProcessState(nb.getProcessState()+1);} }else { if(nb.getProcessState()==8) {//项目变更通过 changgeAdopt(nb);}else {nb.setProcessState(nb.getProcessState()+1);} } }else { if(nb.getProcessState()==9) {changgeAdopt(nb);}//项目变更通过 //流程状态 0营销员 1营销管理员 2技术员 3技术经理 4技术总监 5财务专员(退单) 6财务总监 7总裁 8董事长 9 财务专员(非退单) if (nb.getProcessState()==1) nb.setProcessState(7); else if (nb.getProcessState()==7)nb.setProcessState(9); } }else { nb.setProcessState(0); } OrderChangeLog ocl=new OrderChangeLog(); ocl.setAuditor(TokenManager.getAdminId()); ocl.setOrderNo(orderNo); ocl.setRemarks(remarks); ocl.setChangeId(nb.getId()); ocl.setStatus(status); orderChangeLogMapper.insertSelective(ocl); newOrderChangeMapper.updateByPrimaryKeySelective(nb); return 1; } private void changgeAdopt(NewOrderChangeBo nb) { TOrderNew t1=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo()); List td1=tOrderDunMapper.selectByOrderNo(nb.getOrderNo()); List tt1=tOrderTaskMapper.selectOrderTask(nb.getOrderNo()); String newOrderNo=idGenerator.generateId().toString(); t1.setOrderNo(newOrderNo); tOrderNewMapper.insertSelective(t1); for (TOrderTaskBo tOrderTaskBo : tt1) { tOrderTaskBo.setId(null); tOrderTaskBo.setOrderNo(newOrderNo); tOrderTaskMapper.insertSelective(tOrderTaskBo); } for (TOrderDun tOrderDun : td1) { tOrderDun.setId(UUID.randomUUID().toString()); tOrderDun.setOrderNo(newOrderNo); tOrderDunMapper.insertSelective(tOrderDun); } nb.setStatus(4); //将订单恢复正常 TOrderNew orderNew =new TOrderNew(); TOrderNew additionalOrder =new TOrderNew(); String additionalOrderNo; orderNew.setOrderNo(nb.getOrderNo()); orderNew.setDeleteSign(4);//设置为变更中 orderNew.setPrimaryOrder(newOrderNo); if (nb.getType()==4||nb.getType()==5) {//重报或者附加 additionalOrderNo=idGenerator.generateId().toString(); orderNew.setAdditionalOrder(additionalOrderNo); additionalOrder.setOrderNo(additionalOrderNo); additionalOrder.setOrderType(t1.getOrderType()); additionalOrder.setBuyerId(t1.getBuyerId()); tOrderNewMapper.insertSelective(additionalOrder); } 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 depId,String salesmanName,Integer complete,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 (null!=processState) parameter.put("processState", processState); 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 (StringUtils.isNotBlank(depId)) parameter.put("depId", depId); if (StringUtils.isNotBlank(salesmanName)) parameter.put("salesmanName", salesmanName); parameter.put("aid", TokenManager.getAdminId()); parameter.put("deps", orderService.selectMyDeps()); Pagination data = (Pagination)findPage("selectOrderChangeList", "selectOrderChangeCount", parameter, pageNo, pageSize); return data; } @Override public int updateOrderChange(NewOrderChangeBo t,Integer changeType) { NewOrderChange noc=new NewOrderChange(); noc.setId(t.getId()); if (changeType==0) { noc.setRemarks(t.getRemarks()); 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.setDepName(t.getDepName()); }else if(changeType==1) { noc.setProjectState(t.getProjectState()); noc.setZxsCost(t.getZxsCost()); noc.setZxsRemarks(t.getZxsRemarks()); }else if (changeType==2) { try { noc.setPaymentTime(DateUtils.StringToDate(t.getPaymentTimes(), AFTConstants.YYYYMMDD)); noc.setInvoiceTime(DateUtils.StringToDate(t.getInvoiceTimes(), AFTConstants.YYYYMMDD)); } catch (ParseException e) { e.printStackTrace(); } noc.setPaymentAmount(t.getPaymentAmount()); noc.setInvoiceAmount(t.getInvoiceAmount()); noc.setInvoiceType(t.getInvoiceType()); noc.setCwCost(t.getCwCost()); noc.setRefundableAmount(t.getRefundableAmount()); noc.setCwRemarks(t.getCwRemarks()); } return newOrderChangeMapper.updateByPrimaryKeySelective(noc); } }