OrderChangeServiceImpl.java 63 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716
  1. package com.goafanti.order.service.impl;
  2. import com.goafanti.admin.bo.AdminListBo;
  3. import com.goafanti.admin.service.DepartmentService;
  4. import com.goafanti.common.bo.Error;
  5. import com.goafanti.common.bo.OrderExamineBo;
  6. import com.goafanti.common.constant.AFTConstants;
  7. import com.goafanti.common.dao.*;
  8. import com.goafanti.common.enums.NoticeStatus;
  9. import com.goafanti.common.error.BusinessException;
  10. import com.goafanti.common.model.*;
  11. import com.goafanti.common.utils.DateUtils;
  12. import com.goafanti.common.utils.ExportExcelUtil;
  13. import com.goafanti.common.utils.OrderUtils;
  14. import com.goafanti.common.utils.StringUtils;
  15. import com.goafanti.core.mybatis.BaseMybatisDao;
  16. import com.goafanti.core.mybatis.JDBCIdGenerator;
  17. import com.goafanti.core.mybatis.page.Pagination;
  18. import com.goafanti.core.shiro.token.TokenManager;
  19. import com.goafanti.order.bo.*;
  20. import com.goafanti.order.enums.OrderChangeProcess;
  21. import com.goafanti.order.enums.OrderChangeType;
  22. import com.goafanti.order.enums.OrderNewState;
  23. import com.goafanti.order.enums.OrderType;
  24. import com.goafanti.order.service.NewOrderDunService;
  25. import com.goafanti.order.service.OrderChangeService;
  26. import com.goafanti.order.service.OrderNewService;
  27. import com.goafanti.order.service.OrderProjectService;
  28. import com.goafanti.organization.bo.OrganizationListOut;
  29. import org.apache.poi.xssf.usermodel.XSSFCell;
  30. import org.apache.poi.xssf.usermodel.XSSFRow;
  31. import org.apache.poi.xssf.usermodel.XSSFSheet;
  32. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.stereotype.Service;
  35. import org.springframework.transaction.annotation.Transactional;
  36. import javax.servlet.http.HttpServletResponse;
  37. import java.io.IOException;
  38. import java.io.OutputStream;
  39. import java.math.BigDecimal;
  40. import java.text.SimpleDateFormat;
  41. import java.util.*;
  42. @Service
  43. public class OrderChangeServiceImpl extends BaseMybatisDao<NewOrderChangeMapper> implements OrderChangeService {
  44. @Autowired
  45. private NewOrderChangeMapper newOrderChangeMapper;
  46. @Autowired
  47. private OrderChangeLogMapper orderChangeLogMapper;
  48. @Autowired
  49. private TOrderNewMapper tOrderNewMapper;
  50. @Autowired
  51. private TOrderLogMapper tOrderLogMapper;
  52. @Autowired
  53. private TOrderTaskMapper tOrderTaskMapper;
  54. @Autowired
  55. private TOrderInvoiceMapper tOrderInvoiceMapper;
  56. @Autowired
  57. private OrderRefundInvoiceMapper orderRefundInvoiceMapper;
  58. @Autowired
  59. private TTaskMemberMapper tTaskMemberMapper;
  60. @Autowired
  61. private NewOrderRefundMapper newOrderRefundMapper;
  62. @Autowired
  63. private OrderExamineMapper orderExamineMapper;
  64. @Autowired
  65. private BusinessProjectMapper businessProjectMapper;
  66. @Autowired
  67. private NewOrderDunMapper newOrderDunMapper;
  68. @Autowired
  69. private JDBCIdGenerator idGenerator;
  70. @Autowired
  71. private AdminMapper adminMapper;
  72. @Autowired
  73. private OrderNewService orderNewService;
  74. @Autowired
  75. private NewOrderDunService newOrderDunService;
  76. @Autowired
  77. private TChangeTaskMapper tChangeTaskMapper;
  78. @Autowired
  79. private TChangeDunMapper tChangeDunMapper;
  80. @Autowired
  81. private TOrderBillNewMapper tOrderBillNewMapper;
  82. @Autowired
  83. private TTaskMidMapper tTaskMidMapper;
  84. @Autowired
  85. private PushOrderService pushOrderService;
  86. @Autowired
  87. private TOrderMidMapper tOrderMidMapper;
  88. @Autowired
  89. private UserMidMapper userMidMapper;
  90. @Autowired
  91. private DepartmentService departmentService;
  92. @Autowired
  93. private OrderProjectService orderProjectService;
  94. @Autowired
  95. private DepartmentMapper departmentMapper;
  96. @Override
  97. public int addOrderChange(NewOrderChangeBo t,String startRemarks) {
  98. TOrderNew ton=new TOrderNew();
  99. ton.setOrderNo(t.getOrderNo());
  100. ton.setDeleteSign(2);//将订单置为锁定
  101. tOrderNewMapper.updateByPrimaryKeySelective(ton);
  102. BigDecimal invoiceAmount=tOrderInvoiceMapper.conutAmountByOrderNo(t.getOrderNo());
  103. t.setInvoiceAmount(invoiceAmount);//开票金额
  104. BigDecimal paymentAmount=tOrderBillNewMapper.conutAmountByOrderNo(t.getOrderNo());
  105. t.setPaymentAmount(paymentAmount);//收款金额
  106. //预计成本与预计退款:预计成本=项目价格*数量 预计退款=收款-预计成本
  107. BigDecimal estimateCost=new BigDecimal(tOrderTaskMapper.selectEstimateCost(t.getOrderNo()));
  108. t.setEstimateCost(estimateCost);
  109. t.setEstimateRefundable(paymentAmount.subtract(estimateCost));
  110. t.setZxsRemarks(startRemarks);
  111. newOrderChangeMapper.insertSelective(t);
  112. NewOrderChangeBo ncb=newOrderChangeMapper.selectByorderNoAndStatus(t.getOrderNo());
  113. List<OutNewOrderDunBo> listDun=newOrderDunMapper.selectListNewOrderDun(t.getOrderNo(),null);
  114. List<TChangeDun> listcd=new ArrayList<>();
  115. if (listDun!=null&&!listDun.isEmpty()) {
  116. for (OutNewOrderDunBo d : listDun) {
  117. TChangeDun cd=new TChangeDun();
  118. cd.setOrderNo(d.getOrderNo());
  119. cd.setAid(d.getAid());
  120. cd.setAppropriationRatio(d.getAppropriationRatio());
  121. cd.setCid(ncb.getId());
  122. cd.setDid(d.getId());
  123. cd.setTid(d.getTid());
  124. cd.setProjectType(d.getProjectType());
  125. cd.setDunType(d.getDunType());
  126. cd.setMoney(d.getMoney());
  127. cd.setWaitDay(d.getWaitDay());
  128. cd.setStartTime(d.getStartTime());
  129. cd.setEffectiveCount(d.getEffectiveCount());
  130. cd.setCustomizeTime(d.getCustomizeTime());
  131. cd.setCustomizeName(d.getCustomizeName());
  132. listcd.add(cd);
  133. }
  134. tChangeDunMapper.insertSelectiveList(listcd);
  135. }
  136. List<TChangeTask> listck=new ArrayList<>();
  137. List<TOrderTaskBo> listTask=tOrderTaskMapper.selectOrderTaskAll(t.getOrderNo(),null);
  138. if (listTask!=null&&!listTask.isEmpty()) {
  139. for (TOrderTaskBo tt : listTask) {
  140. TChangeTask ck=new TChangeTask();
  141. ck.setOrderNo(tt.getOrderNo());
  142. ck.setCid(ncb.getId());
  143. ck.setCommodityId(tt.getCommodityId());
  144. ck.setOrderNo(tt.getOrderNo());
  145. ck.setCommodityName(tt.getCommodityName());
  146. ck.setCommodityPrice(tt.getCommodityPrice());
  147. ck.setCommodityQuantity(tt.getCommodityQuantity());
  148. ck.setTaskComment(tt.getTaskComment());
  149. ck.setSplitStatus(tt.getSplitStatus());
  150. ck.setSplitSuper(tt.getSplitSuper());
  151. ck.setReceiverName(tt.getReceiverName());
  152. ck.setMain(tt.getMain());
  153. ck.setTid(tt.getId());
  154. if(tt.getServiceLife()!=null)ck.setServiceLife(tt.getServiceLife());
  155. if(tt.getServiceYear()!=null) ck.setServiceYear(tt.getServiceYear());
  156. if(tt.getYearSum()!=null) ck.setYearSum(tt.getYearSum());
  157. if(tt.getContractTerm()!=null) ck.setContractTerm(tt.getContractTerm());
  158. if(tt.getLastYear()!=null) ck.setLastYear(tt.getLastYear());
  159. if(tt.getLastYearCapital()!=null) ck.setLastYearCapital(tt.getLastYearCapital());
  160. if(tt.getLastYearIncome()!=null) ck.setLastYearIncome(tt.getLastYearIncome());
  161. listck.add(ck);
  162. }
  163. tChangeTaskMapper.insertSelectiveList(listck);
  164. }
  165. return 1;
  166. }
  167. /*
  168. * 新增审核流程中的
  169. */
  170. private void pushOrderExamine(String orderNo,Integer type) {
  171. orderExamineMapper.deleteByAidAndStatus(orderNo,null,null);
  172. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTaskAll(orderNo,null);
  173. for (TOrderTaskBo t : list) {
  174. addOrderExamineByTask(orderNo, type, t);
  175. }
  176. }
  177. private void addOrderExamineByTask(String orderNo, Integer type, TOrderTaskBo t) {
  178. //重报和仅项目变更只需要当事人审核
  179. if (type ==OrderChangeType.CB.getCode()|| type ==OrderChangeType.JXMBG.getCode()){
  180. Integer receiverType=null;
  181. if (t.getTaskReceiver()!=null){
  182. //等于咨询师 做咨询新增
  183. if (t.getTaskReceiver().equals(t.getConsultantId())) {
  184. receiverType=0;
  185. //等于经理做经理新增
  186. }else if (t.getTaskReceiver().equals(t.getManagerId())){
  187. receiverType=1;
  188. }
  189. }
  190. if (receiverType!=null){
  191. OrderExamine o=new OrderExamine();
  192. o.setAid(t.getTaskReceiver());
  193. o.setOrderNo(orderNo);
  194. o.setCreateTime(new Date());
  195. o.setType(receiverType);//咨询师
  196. o.setStatus(0);//正常
  197. orderExamineMapper.insertSelective(o);
  198. }
  199. //项目及金额、退单不退款、退单退款需要当事人和经理审核,其他不需要咨询师审核
  200. }else if (type ==OrderChangeType.XMJJEBG.getCode()|| type ==OrderChangeType.TDBTK.getCode() ||
  201. type ==OrderChangeType.TDTK.getCode()){
  202. if (t.getConsultantId()!=null) {
  203. OrderExamine o=new OrderExamine();
  204. o.setAid(t.getConsultantId());
  205. o.setOrderNo(orderNo);
  206. o.setCreateTime(new Date());
  207. o.setType(0);//咨询师
  208. o.setStatus(0);//正常
  209. orderExamineMapper.insertSelective(o);
  210. }
  211. if (t.getManagerId()!=null) {
  212. OrderExamine o=new OrderExamine();
  213. o.setAid(t.getManagerId());
  214. o.setOrderNo(orderNo);
  215. o.setCreateTime(new Date());
  216. o.setType(1);//咨询师经理
  217. o.setStatus(0);//正常
  218. orderExamineMapper.insertSelective(o);
  219. }
  220. }
  221. }
  222. @Override
  223. public List<NewOrderChangeBo> orderChangeDetails(String orderNo) {
  224. List<NewOrderChangeBo> list=newOrderChangeMapper.selectByorderNo(orderNo);
  225. if (!list.isEmpty()){
  226. for (NewOrderChangeBo c : list) {
  227. if (c.getContacts()==null){
  228. TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo);
  229. c.setContacts(t.getContacts());
  230. c.setContactMobile(t.getContactMobile());
  231. }
  232. }
  233. }
  234. return list;
  235. }
  236. @Override
  237. public NewOrderChangeBo orderChangeDetailsById(Integer id) {
  238. NewOrderChangeBo nb=newOrderChangeMapper.selectById(id);
  239. int isExamine=orderExamineMapper.selectByOrderNoAndAid(nb.getOrderNo(),TokenManager.getAdminId());
  240. nb.setIsExamine(isExamine);
  241. if(nb.getProcessState()!=null){
  242. nb.setVoucherUrl(pushOrderService.changeProcessStatusConstant(nb.getVoucherUrl(),nb.getOrderNo(),nb.getProcessState(),nb.getStatus()));
  243. }
  244. return nb;
  245. }
  246. @Override
  247. @Transactional
  248. public int pushOrderChangeAudit(String changeId, String remarks, Integer status,Integer processState,Integer rejectState) {
  249. NewOrderChangeBo nb=newOrderChangeMapper.selectByChangeId(changeId);
  250. String orderNo=nb.getOrderNo();
  251. Department dep = tOrderNewMapper.selectDepByOrderNo(orderNo);
  252. if (processState==null||(nb.getProcessState()!=9&&processState !=nb.getProcessState()) ) {
  253. throw new BusinessException(new Error( "变更流程与您所操作流程不匹配","变更流程与您所操作流程不匹配"));
  254. }
  255. if (nb.getStatus()==4) {
  256. throw new BusinessException(new Error( "变更流程已通过审核","变更流程已通过审核"));
  257. }
  258. Date date =new Date();
  259. //2通过 3驳回
  260. if (status==2) {
  261. //变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送 6退单不退款 7仅变更合同
  262. if(nb.getType() !=null){
  263. if(nb.getType()==OrderChangeType.JBGGT.getCode()){
  264. //仅合同图片修改:营销-营销总经理
  265. if(nb.getProcessState()==OrderChangeProcess.YXGLY.getCode()){
  266. completeChange(remarks, nb);
  267. return 1;
  268. }
  269. } else {
  270. /* 赠送:营销-经理-总经理审核-财务(已收款情况)-总裁(副总裁)
  271. 重报:营销-经理-总经理审核-技术员-财务-财务总监-总裁(副总裁)
  272. 仅项目:营销-经理-总经理审核-技术员-技术总监-财务-财务总监-总裁(副总裁)
  273. 项目&金额:营销-经理-总经理审核-技术员-技术经理-技术总监-财务-财务总监-总裁(副总裁)
  274. 退单退款:营销-经理-总经理审核-技术员-技术经理-技术总监-财务-财务总监-总裁(副总裁)-董事长(副总裁大于2K,需董事长审核)-财务退票
  275. 退单不退款:营销-经理-总经理审核-技术员-技术经理-技术总监-财务-财务总监-总裁(副总裁)-财务退票
  276. 仅金额:营销-经理-总经理审核-技术总监-财务-财务总监-总裁(副总裁)
  277. 框架协议审核流程: 营销员发起-营销经理审核-营销管理员审核-财务审核 */
  278. if (nb.getProcessState()==OrderChangeProcess.YXJL.getCode()){
  279. nb.setProcessState(OrderChangeProcess.YXGLY.getCode());
  280. }else if (nb.getProcessState()==OrderChangeProcess.YXGLY.getCode()){
  281. if (nb.getType()==OrderChangeType.CB.getCode()||
  282. nb.getType()==OrderChangeType.JXMBG.getCode()||
  283. nb.getType()==OrderChangeType.XMJJEBG.getCode()||
  284. nb.getType()==OrderChangeType.TDTK.getCode()||
  285. nb.getType()==OrderChangeType.TDBTK.getCode()){
  286. pushZXS(nb, date,1);
  287. }else if (nb.getType()==OrderChangeType.JJEBG.getCode()){
  288. nb.setProcessState(OrderChangeProcess.JSZJ.getCode());
  289. }else if (nb.getType()==OrderChangeType.ZS.getCode()||nb.getType()==OrderChangeType.KJXY.getCode()){
  290. nb.setProcessState(OrderChangeProcess.CWZY.getCode());
  291. }
  292. }else if (nb.getProcessState()==OrderChangeProcess.JSY.getCode()){
  293. orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),0);
  294. pushZXS(nb,date,0);
  295. //咨询师审核,将自己审核的全部标记已审核
  296. }else if (nb.getProcessState()==OrderChangeProcess.JSJL.getCode()){
  297. //咨询师经理审核,将自己审核的全部标记已审核
  298. orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),1);
  299. pushZXSJL(nb,date,0);
  300. }else if (nb.getProcessState()==OrderChangeProcess.JSZJ.getCode()){
  301. nb.setProcessState(OrderChangeProcess.CWZY.getCode());
  302. }else if (nb.getProcessState()==OrderChangeProcess.CWZY.getCode()){
  303. if (nb.getType()==OrderChangeType.ZS.getCode()){
  304. boolean flag=pushApproval(nb, dep,remarks);
  305. if (flag) return 1;
  306. }else if (nb.getType()==OrderChangeType.KJXY.getCode()){
  307. completeChange(remarks, nb);
  308. return 1;
  309. }else {
  310. nb.setProcessState(OrderChangeProcess.CWZJ.getCode());
  311. }
  312. }else if (nb.getProcessState()==OrderChangeProcess.CWZJ.getCode()){
  313. boolean flag=pushApproval(nb, dep,remarks);
  314. if (flag){
  315. return 1;
  316. }
  317. }else if(nb.getProcessState()==OrderChangeProcess.TPSH.getCode()) {
  318. if (nb.getType()==OrderChangeType.TDTK.getCode()||nb.getType()==OrderChangeType.TDBTK.getCode()) {
  319. nb.setStatus(2);
  320. }else {
  321. completeChange(remarks, nb);
  322. return 1;
  323. }
  324. }else if (nb.getProcessState()==OrderChangeProcess.FZC.getCode()){
  325. if (nb.getType()==OrderChangeType.TDTK.getCode()) {
  326. if (nb.getChangeAmount().compareTo(new BigDecimal("0.2")) < 0) {
  327. //小于则总裁通过,大于则董事长
  328. nb.setStatus(2);
  329. }else {
  330. nb.setProcessState(OrderChangeProcess.DSZ.getCode());
  331. }
  332. }else if (nb.getType()==OrderChangeType.TDBTK.getCode()){
  333. nb.setStatus(2);
  334. }else {
  335. completeChange(remarks, nb);
  336. return 1;
  337. }
  338. }else if (nb.getProcessState()==OrderChangeProcess.DSZ.getCode()){
  339. if (nb.getType()==OrderChangeType.TDTK.getCode()||nb.getType()==OrderChangeType.TDBTK.getCode()) {
  340. nb.setStatus(2);
  341. }else {
  342. completeChange(remarks, nb);
  343. return 1;
  344. }
  345. }
  346. }
  347. }
  348. if(nb.getStatus()==3) {
  349. nb.setStatus(1);//如果驳回数据则改为正常数据
  350. }
  351. //通过订单取消记录的驳回位置
  352. if (processState==nb.getBackStatus()) {
  353. nb.setBackStatus(0);
  354. }
  355. }else {
  356. nb.setProcessState(rejectState);
  357. nb.setStatus(3);//订单变更设置为驳回
  358. //驳回订单记录驳回位置
  359. if (processState>nb.getBackStatus()) {
  360. nb.setBackStatus(processState);
  361. }
  362. //驳回重置审核人
  363. if (rejectState<=3) {
  364. orderExamineMapper.updateByOrderNo(orderNo,1,null);
  365. }else if (rejectState==4){
  366. orderExamineMapper.updateByOrderNo(orderNo,1,1);
  367. }
  368. if (rejectState==3) {
  369. orderExamineMapper.updateByOrderNoAndAid(nb.getOrderNo(),TokenManager.getAdminId(),0);
  370. int wsh=orderExamineMapper.checkCountStatus(nb.getOrderNo(),0,0);
  371. if (wsh==0){
  372. pushZXSJL( nb,date,1);
  373. }
  374. }else if(rejectState==4){
  375. pushZXSJL(nb,date,1);
  376. }
  377. }
  378. addOrderChangeLog(remarks, status, orderNo, nb.getId());
  379. sendNotice(status,nb);
  380. pushOrderCangeProcess(nb);
  381. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  382. return 1;
  383. }
  384. private void completeChange(String remarks, NewOrderChangeBo nb ) {
  385. nb.setStatus(4);
  386. addOrderChangeLog(remarks, 2, nb.getOrderNo(), nb.getId());
  387. pushCompleteOrderChange(nb);
  388. }
  389. private boolean pushApproval(NewOrderChangeBo nb, Department dep,String remarks) {
  390. TOrderNew tOrderNew = tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  391. Date date = new Date();
  392. date.setTime(date.getTime()+500);
  393. if (tOrderNew.getSalesmanId().equals(AFTConstants.CAOJIN_AID)) {
  394. nb.setProcessState(OrderChangeProcess.DSZ.getCode());
  395. }else {
  396. if (dep.getApproval()==1){
  397. nb.setProcessState(OrderChangeProcess.TPSH.getCode());
  398. }else {
  399. addOrderChangeLog("公司/部门管理审核人员未设置,系统自动通过", 2, nb.getOrderNo(), nb.getId(),date,AFTConstants.SUPERADMIN_ID);
  400. if (nb.getType()==OrderChangeType.TDTK.getCode()||nb.getType()==OrderChangeType.TDBTK.getCode()){
  401. nb.setProcessState(OrderChangeProcess.TPSH.getCode());
  402. nb.setStatus(2);
  403. }else {
  404. completeChange(remarks,nb);
  405. return true;
  406. }
  407. }
  408. }
  409. return false;
  410. }
  411. /**
  412. *
  413. * @param nb
  414. * @param date
  415. * @param type 0正常审核 1跨流程需要通知
  416. */
  417. @Override
  418. public void pushZXS(NewOrderChangeBo nb, Date date,Integer type) {
  419. int zxs=orderExamineMapper.checkCountStatus(nb.getOrderNo(),0,0);
  420. if (zxs>0){
  421. nb.setProcessState(OrderChangeProcess.JSY.getCode());
  422. }else {
  423. if(type==1){
  424. date.setTime(date.getTime()+100);
  425. addOrderChangeLog("无咨询师自动通过", 2, nb.getOrderNo(), nb.getId(), date);
  426. }
  427. pushZXSJL(nb,date,1);
  428. }
  429. }
  430. /**
  431. * 咨询师经理,跳过就返回x=1,在后续添加日志放到先审核,后添加日志
  432. * @param nb
  433. * @param type 0正常审核 1跨流程需要通知
  434. * @return
  435. */
  436. @Override
  437. public void pushZXSJL(NewOrderChangeBo nb,Date date,Integer type) {
  438. int zxsjl=orderExamineMapper.checkCountStatus(nb.getOrderNo(),1,0);
  439. if (nb.getType()==OrderChangeType.XMJJEBG.getCode()||
  440. nb.getType()==OrderChangeType.TDTK.getCode()||
  441. nb.getType()==OrderChangeType.TDBTK.getCode()||
  442. nb.getType()==OrderChangeType.CB.getCode()||
  443. nb.getType()==OrderChangeType.JXMBG.getCode()){
  444. if (zxsjl>0){
  445. nb.setProcessState(OrderChangeProcess.JSJL.getCode());
  446. }else {
  447. if (type==1){
  448. date.setTime(date.getTime()+100);
  449. addOrderChangeLog("无咨询师经理自动通过", 2, nb.getOrderNo(), nb.getId(),date);
  450. }
  451. //重报 没有技术员跳入财务
  452. if (nb.getType()==OrderChangeType.CB.getCode()){
  453. nb.setProcessState(OrderChangeProcess.CWZY.getCode());
  454. //项目变更没有跳入技术总监
  455. }else{
  456. nb.setProcessState(OrderChangeProcess.JSZJ.getCode());
  457. }
  458. }
  459. }
  460. }
  461. private void addOrderChangeLog(String remarks, Integer status, String orderNo, Integer id) {
  462. addOrderChangeLog(remarks,status,orderNo,id,null,null);
  463. }
  464. private void addOrderChangeLog(String remarks, Integer status, String orderNo, Integer id,Date date) {
  465. addOrderChangeLog(remarks,status,orderNo,id,date,null);
  466. }
  467. private void addOrderChangeLog(String remarks, Integer status, String orderNo, Integer id,Date date,String aid) {
  468. if (date ==null)date=new Date();
  469. if (aid ==null)aid=TokenManager.getAdminId();
  470. OrderChangeLog ocl = new OrderChangeLog();
  471. ocl.setAuditor(aid);
  472. ocl.setOrderNo(orderNo);
  473. ocl.setRemarks(remarks);
  474. ocl.setChangeId(id);
  475. ocl.setStatus(status);
  476. ocl.setCreateTime(date);
  477. orderChangeLogMapper.insertSelective(ocl);
  478. }
  479. private void sendNotice(Integer status,NewOrderChangeBo nb) {
  480. //0发起2通过 3驳回
  481. Integer type=0;
  482. if(status==0)type=NoticeStatus.ORDER_CHANGE_START.getCode();
  483. if(status==2)type=NoticeStatus.ORDER_CHANGE_YES.getCode();
  484. if(status==3)type=NoticeStatus.ORDER_CHANGE_NO.getCode();
  485. //获取发起人与发起人部门
  486. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  487. //获取客户信息
  488. TOrderNewBo o=tOrderNewMapper.getSaleIdByOno(nb.getOrderNo());
  489. //获取接收者
  490. //流程状态 0=营销员,1=营销经理,2=营销管理员,3=技术员,4=技术经理,5=技术总监,6=财务专员,7=财务总监,8=总裁,9=董事长
  491. List<String> alist = new ArrayList<>();
  492. //获取部门负责财务人员
  493. switch (nb.getProcessState()) {
  494. case 0:
  495. alist.add(o.getSalesmanId());
  496. break;
  497. case 1:
  498. Admin saleaman = adminMapper.selectByPrimaryKey(o.getSalesmanId());
  499. alist.add(saleaman.getManagerId());
  500. break;
  501. case 2:
  502. alist.addAll(adminMapper.listNameByDepAndName(o.getOrderDep(), AFTConstants.SALESMAN_ADMIN));
  503. break;
  504. case 3:
  505. alist.addAll(addOrderExamine(o.getOrderNo(),0));
  506. break;
  507. case 4:
  508. alist.addAll(addOrderExamine(o.getOrderNo(),1));
  509. break;
  510. case 5:
  511. for (Admin admin : adminMapper.getAdminRoleTypeList(AFTConstants.TECH_ADMIN)) {
  512. alist.add(admin.getId());
  513. }
  514. break;
  515. case 6:
  516. alist.add(o.getFinanceId());
  517. break;
  518. case 7:
  519. for (Admin admin : adminMapper.getAdminRoleTypeList(AFTConstants.FINANCE_ADMIN)) {
  520. alist.add(admin.getId());
  521. }
  522. break;
  523. case 8:
  524. if(nb.getStatus()==2) {
  525. alist.add(o.getFinanceId());
  526. }else {
  527. alist.add(o.getApprovalAid());
  528. }
  529. break;
  530. case 9:
  531. if(nb.getStatus()==2) {
  532. alist.add(o.getFinanceId());
  533. }else {
  534. for (Admin admin : adminMapper.selectAdminByRoleType(AFTConstants.APPROVAL_DECISION)) {
  535. alist.add(admin.getId());
  536. }
  537. }
  538. break;
  539. case 10:
  540. if(nb.getStatus()==2) {
  541. alist.add(o.getFinanceId());
  542. }else {
  543. for (Admin admin : adminMapper.selectAdminByRoleType(AFTConstants.VICE_CED)) {
  544. alist.add(admin.getId());
  545. }
  546. }
  547. break;
  548. }
  549. //发送站内信息与邮件
  550. pushGeneralSendNoticeAndEmail(alist, type, o, TokenManager.getAdminId(),0);
  551. }
  552. public void pushGeneralSendNoticeAndEmail(List<String> alist, Integer type,TOrderNewBo o,String adminId,Integer approval){
  553. orderNewService.pushGeneralSendNoticeAndEmail(alist, type,o, adminId,approval);
  554. }
  555. /**
  556. *
  557. * @param orderNo 订单编号
  558. * @param i 0咨询师 1咨询师经理
  559. * @return
  560. */
  561. private List<String> addOrderExamine(String orderNo, Integer i) {
  562. List<String> list=new ArrayList<>();
  563. List<OrderExamineBo> orderExamineBos = orderExamineMapper.selectByOrderNo(orderNo, i);
  564. for (OrderExamineBo bo : orderExamineBos) {
  565. if (bo.getStatus()==0){
  566. list.add(bo.getAid());
  567. }
  568. }
  569. return list;
  570. }
  571. /**
  572. * 变更完成复制出原订单镜像
  573. */
  574. private void changeAdopt(NewOrderChangeBo nb) {
  575. TOrderNew t1=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  576. List<OutNewOrderDunBo> td2=newOrderDunMapper.selectListNewOrderDun(nb.getOrderNo(), null);
  577. List<TOrderTaskBo> tt1=tOrderTaskMapper.selectOrderTaskAll(nb.getOrderNo(),null);
  578. List<TOrderLogBo> tl1=tOrderLogMapper.selectOrderByNo(nb.getOrderNo());
  579. String newOrderNo=idGenerator.generateId().toString();
  580. t1.setOrderNo(newOrderNo);
  581. nb.setUsedOrder(newOrderNo);
  582. t1.setDeleteSign(1);//将原订单作废,只能查看
  583. tOrderNewMapper.insertSelective(t1);
  584. Map<Integer, Integer> map=new HashMap<>();
  585. for (TOrderTaskBo tOrderTaskBo : tt1) {
  586. //处理父子项目关系 将员父项目存储
  587. int x=tOrderTaskBo.getId();
  588. tOrderTaskBo.setId(null);
  589. tOrderTaskBo.setOrderNo(newOrderNo);
  590. if(tOrderTaskBo.getSplitStatus()==2) {
  591. tOrderTaskBo.setSplitSuper(map.get(tOrderTaskBo.getSplitSuper()));
  592. }
  593. tOrderTaskBo.setProcessStatus(3);
  594. tOrderTaskMapper.insertSelective(tOrderTaskBo);
  595. TTaskMember tTaskMember = tTaskMemberMapper.selectByTid(x);
  596. if (tTaskMember!=null){
  597. tTaskMember.setId(null);
  598. tTaskMember.setTid(tOrderTaskBo.getId());
  599. tTaskMemberMapper.insertSelective(tTaskMember);
  600. }
  601. int y=tOrderTaskBo.getId();
  602. TTaskMid dtails = tTaskMidMapper.getDtails(tOrderTaskBo.getId());
  603. TTaskMid tTaskMid = new TTaskMid(y, new BigDecimal(0));
  604. tTaskMid.setDispatchProvince(dtails.getDispatchProvince());
  605. tTaskMid.setDutyDep(dtails.getDutyDep());
  606. tTaskMidMapper.insertSelective(tTaskMid);
  607. if(tOrderTaskBo.getSplitStatus()==1) {
  608. map.put(x, y);
  609. }
  610. }
  611. if (!td2.isEmpty()) {
  612. List<OutNewOrderDunBo> newtd2=new ArrayList<>();
  613. for (OutNewOrderDunBo outNewOrderDunBo : td2) {
  614. outNewOrderDunBo.setId(null);
  615. outNewOrderDunBo.setOrderNo(newOrderNo);
  616. newtd2.add(outNewOrderDunBo);
  617. }
  618. newOrderDunMapper.insertBatch(newtd2);
  619. }
  620. if (!tl1.isEmpty()) {
  621. List<TOrderLogBo> newtl1=new ArrayList<>();
  622. for (TOrderLogBo tOrderLogBo : tl1) {
  623. tOrderLogBo.setId(null);
  624. tOrderLogBo.setOrderNo(newOrderNo);
  625. newtl1.add(tOrderLogBo);
  626. }
  627. tOrderLogMapper.insertBatch(newtl1);
  628. }
  629. nb.setStatus(4);
  630. //将订单恢复正常
  631. TOrderNew orderNew =new TOrderNew();
  632. orderNew.setOrderNo(nb.getOrderNo());
  633. orderNew.setDeleteSign(0);
  634. orderNew.setPrimaryOrder(newOrderNo);
  635. int i =tOrderMidMapper.judgeProjectType(nb.getOrderNo());
  636. if (i>0){
  637. TOrderMid tm=new TOrderMid();
  638. tm.setOrderNo(nb.getOrderNo());
  639. tm.setProjectType(1);
  640. tOrderMidMapper.updateByOrderNo(tm);
  641. }
  642. tOrderNewMapper.updateByPrimaryKeySelective(orderNew);
  643. }
  644. @Override
  645. public boolean checkOderNo(String orderNo) {
  646. int i=newOrderChangeMapper.checkOderNo(orderNo);
  647. if (i>0) {
  648. return true;
  649. }
  650. return false;
  651. }
  652. @Override
  653. public List<OrderChangeLogBo> selectOrderChangeLogList(String changeId) {
  654. return orderChangeLogMapper.selectOrderChangeLogList(changeId);
  655. }
  656. @SuppressWarnings("unchecked")
  657. @Override
  658. public Pagination<NewOderCahngeListBo> selectOrderChangeList(String userName,Integer processState,Integer timeType,String startTime,String endTime,
  659. String deps,String salesmanName,Integer complete,String orderNo, String contractNo,Integer type,Integer pageSize, Integer pageNo) {
  660. Map<String, Object> parameter=new HashMap<String, Object>();
  661. if(pageSize==null||pageSize<0)pageSize=10;
  662. if(pageNo==null||pageNo<0)pageNo=1;
  663. parameter.put("processState", processState==null?0:processState);
  664. parameter.put("complete", complete==null?0:complete);
  665. if (StringUtils.isNotBlank(userName)) parameter.put("userName", userName);
  666. if (StringUtils.isNotBlank(orderNo)) parameter.put("orderNo", orderNo);
  667. if (StringUtils.isNotBlank(contractNo)) parameter.put("contractNo", contractNo);
  668. if (null!=type) parameter.put("type", type);
  669. if (null!=timeType) parameter.put("timeType", timeType);
  670. if (StringUtils.isNotBlank(startTime)) parameter.put("startTime", startTime);
  671. if (StringUtils.isNotBlank(endTime)) parameter.put("endTime", endTime+" 23:59:59");
  672. if (processState==2){
  673. List<String > myDep;
  674. if (deps!=null) {
  675. myDep=departmentService.selectSubDeps(deps);
  676. if (myDep.isEmpty()){
  677. return new Pagination(1,10,0);
  678. }
  679. }else {
  680. myDep=departmentService.selectMyDeps();
  681. }
  682. parameter.put("deps",myDep);
  683. }else {
  684. if (deps!=null) {
  685. parameter.put("deps",departmentService.parseArray(deps));
  686. }
  687. }
  688. if (StringUtils.isNotBlank(salesmanName)) parameter.put("salesmanName", salesmanName);
  689. //财务专员有财务经理查看财务专员的权限
  690. if(processState==OrderChangeProcess.CWZY.getCode()&&TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  691. parameter.put("aids", adminMapper.selectBySuperId(TokenManager.getAdminId()));
  692. }else {
  693. parameter.put("aid", TokenManager.getAdminId());
  694. }
  695. Pagination<NewOderCahngeListBo> data = (Pagination<NewOderCahngeListBo>)findPage("selectOrderChangeList", "selectOrderChangeCount", parameter, pageNo, pageSize);
  696. return data;
  697. }
  698. @Override
  699. public int updateOrderChange(NewOrderChangeBo t,Integer changeType,String startRemarks) {
  700. NewOrderChange noc=new NewOrderChange();
  701. t.setProcessState(1);
  702. noc.setOrderNo(t.getOrderNo());
  703. noc.setId(t.getId());
  704. if (changeType==0) {
  705. // chekeChangeTaskNumber(noc);
  706. noc.setRemarks(t.getRemarks());
  707. if(t.getContractPictureUrl()!=null)noc.setContractPictureUrl(t.getContractPictureUrl());
  708. noc.setType(t.getType());
  709. noc.setVoucherUrl(t.getVoucherUrl());
  710. noc.setTotalAmount(t.getTotalAmount());
  711. noc.setSettlementAmount(t.getSettlementAmount());
  712. noc.setChangeAmount(t.getChangeAmount());
  713. noc.setApplicant(t.getApplicant());
  714. noc.setStatus(1);//订单置为正常
  715. noc.setDepName(t.getDepName());
  716. noc.setContacts(t.getContacts());
  717. noc.setContactMobile(t.getContactMobile());
  718. noc.setManagerContacts(t.getManagerContacts());
  719. noc.setManagerContactMobile(t.getManagerContactMobile());
  720. Date date =new Date();
  721. addOrderChangeLog(startRemarks==null?"":startRemarks, 0, t.getOrderNo(), noc.getId(),date);
  722. if(t.getType()!=0)chekeAmout(t);
  723. TOrderNew ton=new TOrderNew();
  724. ton.setOrderNo(noc.getOrderNo());
  725. ton.setDeleteSign(2);
  726. if(t.getType()==OrderChangeType.KJXY.getCode()){
  727. ton.setTotalAmount(t.getTotalAmount());
  728. }
  729. tOrderNewMapper.updateByPrimaryKeySelective(ton);
  730. TOrderNewBo tOrderNew = tOrderNewMapper.getSaleIdByOno(t.getOrderNo());
  731. if (t.getType()!=OrderChangeType.JBGGT.getCode()){
  732. //不是仅合同变更就看营销经理是否存在
  733. if (tOrderNew.getManagerName()!=null){
  734. noc.setProcessState(OrderChangeProcess.YXJL.getCode());
  735. }else {
  736. //增加营销经理的日志
  737. date.setTime(date.getTime()+500);
  738. addOrderChangeLog("未设置营销经理自动通过", 2, t.getOrderNo(), noc.getId(),date);
  739. //营销经理不存在判定营销管理员
  740. List<Admin> admins = adminMapper.listAdminBydepIdAndRoleType(tOrderNew.getOrderDep(), AFTConstants.SALESMAN_ADMIN);
  741. boolean flag=false;
  742. for (Admin admin : admins) {
  743. if (tOrderNew.getSalesmanId().equals(admin.getId())){
  744. flag=true;
  745. }
  746. }
  747. //如果自己是审核人员则跳过
  748. if (flag){
  749. date.setTime(date.getTime()+500);
  750. addOrderChangeLog("审核人重复自动通过", 2, t.getOrderNo(), noc.getId(),date);
  751. noc.setProcessState(OrderChangeProcess.JSY.getCode());
  752. if (t.getType()==OrderChangeType.CB.getCode()||
  753. t.getType()==OrderChangeType.JXMBG.getCode()||
  754. t.getType()==OrderChangeType.XMJJEBG.getCode()||
  755. t.getType()==OrderChangeType.TDTK.getCode()||
  756. t.getType()==OrderChangeType.TDBTK.getCode()){
  757. //将所有审核重置
  758. orderExamineMapper.updateByOrderNo(t.getOrderNo(),null,null);
  759. pushZXS(t,date,1);
  760. }else if(t.getType()==OrderChangeType.ZS.getCode()||t.getType()==OrderChangeType.KJXY.getCode()){
  761. noc.setProcessState(OrderChangeProcess.CWZY.getCode());
  762. }else if(t.getType()==OrderChangeType.JJEBG.getCode()){
  763. noc.setProcessState(OrderChangeProcess.JSZJ.getCode());
  764. }
  765. }else {
  766. //不跳过就设置流程未营销管理员
  767. noc.setProcessState(OrderChangeProcess.YXGLY.getCode());
  768. }
  769. }
  770. }else {
  771. noc.setProcessState(OrderChangeProcess.YXGLY.getCode());
  772. t.setProcessState(OrderChangeProcess.YXGLY.getCode());
  773. }
  774. sendNotice(0, t);
  775. pushOrderCangeProcess(noc);
  776. //框架协议不需要设置咨询师审核角色
  777. if (t.getType()!=OrderChangeType.KJXY.getCode()){
  778. pushOrderExamine(noc.getOrderNo(),noc.getType());
  779. }
  780. }else if (changeType==2) {
  781. noc.setCwCost(t.getCwCost());
  782. noc.setCwIndirectCost(t.getCwIndirectCost());
  783. noc.setRefundableAmount(t.getRefundableAmount());
  784. }
  785. if(changeType!=1)newOrderChangeMapper.updateByPrimaryKeySelective(noc);
  786. return 1;
  787. }
  788. @Override
  789. public void pushOrderCangeProcess(NewOrderChange noc) {
  790. if (noc.getProcessState()== OrderChangeProcess.YXY.getCode()){
  791. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  792. noc.setExamineName(ton.getSalesmanName());
  793. }else if (noc.getProcessState()== OrderChangeProcess.YXJL.getCode()){
  794. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  795. Admin saleman = adminMapper.selectByPrimaryKey(ton.getSalesmanId());
  796. Admin manager = adminMapper.selectByPrimaryKey(saleman.getManagerId());
  797. noc.setExamineName(manager.getName());
  798. }else if (noc.getProcessState()== OrderChangeProcess.YXGLY.getCode()){
  799. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  800. StringBuffer str=new StringBuffer();
  801. List<Admin> admins = adminMapper.listAdminBydepIdAndRoleType(ton.getOrderDep(),AFTConstants.SALESMAN_ADMIN);
  802. if (admins.isEmpty()){
  803. OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep());
  804. admins = adminMapper.listAdminBydepIdAndRoleType(dep.getSuperId(),AFTConstants.SALESMAN_ADMIN);
  805. }
  806. for (Admin admin : admins) {
  807. if (!str.toString().contains(admin.getName()))str.append(admin.getName()).append(",");
  808. }
  809. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  810. }else if (noc.getProcessState()== OrderChangeProcess.JSY.getCode()){
  811. List<OrderExamineBo> os = orderExamineMapper.selectByOrderNo(noc.getOrderNo(), 0);
  812. StringBuffer str=new StringBuffer();
  813. for (OrderExamineBo o : os) {
  814. if (o.getStatus()==0){
  815. if (!str.toString().contains(o.getName()))str.append(o.getName()).append(",");
  816. }
  817. }
  818. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  819. }else if (noc.getProcessState()== OrderChangeProcess.JSJL.getCode()){
  820. List<OrderExamineBo> os = orderExamineMapper.selectByOrderNo(noc.getOrderNo(), 1);
  821. StringBuffer str=new StringBuffer();
  822. for (OrderExamineBo o : os) {
  823. if (o.getStatus()==0){
  824. if (!str.toString().contains(o.getName()))str.append(o.getName()).append(",");
  825. }
  826. }
  827. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  828. }else if (noc.getProcessState()== OrderChangeProcess.JSZJ.getCode()){
  829. StringBuffer str=new StringBuffer();
  830. List<Admin> admins = adminMapper.getAdminRoleTypeList(AFTConstants.TECH_ADMIN);
  831. for (Admin a : admins) {
  832. str=str.append(a.getName()).append(",");
  833. }
  834. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  835. }else if (noc.getProcessState()== OrderChangeProcess.CWZY.getCode()){
  836. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  837. OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep());
  838. noc.setExamineName(dep.getFinanceName());
  839. }else if (noc.getProcessState()== OrderChangeProcess.CWZJ.getCode()){
  840. StringBuffer str=new StringBuffer();
  841. List<Admin> admins = adminMapper.getAdminRoleTypeList(AFTConstants.FINANCE_ADMIN);
  842. for (Admin a : admins) {
  843. str=str.append(a.getName()).append(",");
  844. }
  845. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  846. }else if (noc.getProcessState()== OrderChangeProcess.TPSH.getCode()
  847. ||noc.getProcessState()== OrderChangeProcess.DSZ.getCode()
  848. ||noc.getProcessState()== OrderChangeProcess.FZC.getCode()){
  849. if(noc.getStatus()==1){
  850. StringBuffer str=new StringBuffer();
  851. if (noc.getProcessState()== OrderChangeProcess.TPSH.getCode()){
  852. Department department = tOrderNewMapper.selectDepByOrderNo(noc.getOrderNo());
  853. Admin a = adminMapper.selectByPrimaryKey(department.getApprovalAid());
  854. str=str.append(a.getName()).append(",");
  855. }else if(noc.getProcessState()== OrderChangeProcess.DSZ.getCode()){
  856. List<Admin> admins = adminMapper.getAdminRoleTypeList(AFTConstants.APPROVAL_DECISION);
  857. for (Admin a : admins) {
  858. str=str.append(a.getName()).append(",");
  859. }
  860. }
  861. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  862. } else if(noc.getStatus()==2){
  863. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  864. OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep());
  865. noc.setExamineName(dep.getFinanceName());
  866. }else {
  867. noc.setExamineName("");
  868. }
  869. }
  870. }
  871. private void chekeAmout(NewOrderChangeBo t) {
  872. BigDecimal amout=t.getTotalAmount();
  873. List<TChangeTaskOut> list = selectChangeTask(t.getId());
  874. BigDecimal count=new BigDecimal(0);
  875. for (TChangeTaskOut tt : list) {
  876. if(tt.getType()!=3)count=count.add(tt.getCommodityPrice());
  877. }
  878. if (amout.compareTo(count)!=0) {
  879. throw new BusinessException("项目金额总和不等于合同总金额。");
  880. }
  881. List<TChangeDunOut> list2 = selectChangeDun(t.getId());
  882. count=new BigDecimal(0);
  883. for (TChangeDunOut td : list2) {
  884. if(td.getMoney()==null)td.setMoney(new BigDecimal(0));
  885. if(td.getType()!=3)count=count.add(td.getMoney());
  886. }
  887. if (amout.compareTo(count)!=0) {
  888. throw new BusinessException("收款节点金额总和不等于合同总金额。");
  889. }
  890. }
  891. @Override
  892. public int addOrderRefundInvoice(OrderRefundInvoice o) {
  893. o.setCreateTime(new Date());
  894. newOrderChangeMapper.addRefundInvoice(o.getOrderNo(),o.getAmount());
  895. return orderRefundInvoiceMapper.insertSelective(o);
  896. }
  897. @Override
  898. public int deleteOrderRefundInvoice(Integer id) {
  899. OrderRefundInvoice or=orderRefundInvoiceMapper.selectByPrimaryKey(id);
  900. newOrderChangeMapper.subtractRefundInvoice(or.getOrderNo(),or.getAmount());
  901. return orderRefundInvoiceMapper.deleteByPrimaryKey(id);
  902. }
  903. @Override
  904. public List<OrderRefundInvoice> listOrderRefundInvoice(String orderNo) {
  905. return orderRefundInvoiceMapper.selectByorderNo(orderNo);
  906. }
  907. @Override
  908. @Transactional
  909. public int pushCompleteOrderChange(NewOrderChangeBo nb) {
  910. //变更完成
  911. changeAdopt(nb);
  912. pushChange(nb);
  913. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  914. TOrderNewBo order=tOrderNewMapper.getSaleIdByOno(nb.getOrderNo());
  915. List<String> alist = getAllAid(nb.getId());
  916. Date date=new Date();
  917. date.setTime(date.getTime()+500);
  918. addOrderChangeLog("变更完成。", 4, nb.getOrderNo(), nb.getId(),date);
  919. pushGeneralSendNoticeAndEmail(alist,NoticeStatus.ORDER_CHANGE_END.getCode(), order, TokenManager.getAdminId(),0);
  920. return 1;
  921. }
  922. /**
  923. * 获取除当前审核者所有审核者
  924. * @param id
  925. * @return
  926. */
  927. private List<String> getAllAid(Integer id) {
  928. List<String> alist = new ArrayList<>();
  929. List<String>newl=new ArrayList<>();
  930. List<OrderChangeLogBo> list=orderChangeLogMapper.selectOrderChangeLogList(id.toString());
  931. for (OrderChangeLogBo log : list) {
  932. if (!TokenManager.getAdminId().equals(log.getAuditor())){
  933. if (!newl.contains(log.getAuditor())){
  934. newl.add(log.getAuditor());
  935. }
  936. }
  937. }
  938. alist.addAll(newl);
  939. return alist;
  940. }
  941. @Override
  942. public int pushCompleteRefund(NewOrderChangeBo nb) {
  943. NewOrderChangeBo nob=newOrderChangeMapper.selectById(nb.getId());
  944. TOrderNewBo o=tOrderNewMapper.getSaleIdByOno(nob.getOrderNo());
  945. List<String> alist = new ArrayList<>();
  946. alist.add(o.getSalesmanId());
  947. nb.setOrderNo(nob.getOrderNo());
  948. nb.setExamineName("");
  949. nb.setType(nob.getType());
  950. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  951. addOrderChangeLog("变更财务退票。", 2, nob.getOrderNo(), nb.getId());
  952. pushGeneralSendNoticeAndEmail(alist,NoticeStatus.ORDER_CHANGE_YES.getCode(), o, TokenManager.getAdminId(),0);
  953. nb.setStatus(4);
  954. pushCompleteOrderChange(nb);
  955. return 1;
  956. }
  957. @Override
  958. public boolean checkChangeId(Integer id) {
  959. NewOrderChangeBo nob=newOrderChangeMapper.selectById(id);
  960. if (nob.getStatus()==4){
  961. return true;
  962. }
  963. return false;
  964. }
  965. /**
  966. * 修改订单数据
  967. * @param nb
  968. */
  969. private TOrderNew pushChange(NewOrderChangeBo nb) {
  970. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  971. NewOrderChangeBo nob=newOrderChangeMapper.selectById(nb.getId());
  972. // 变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送
  973. if(nob.getType()==OrderChangeType.TDTK.getCode()) {
  974. o.setTotalAmount(nob.getTotalAmount());
  975. if (nob.getFirstAmount()!=null)o.setFirstAmount(nob.getFirstAmount());
  976. }else if (nob.getType()==OrderChangeType.XMJJEBG.getCode()) {
  977. o.setTotalAmount(nob.getTotalAmount());
  978. if (nob.getFirstAmount()!=null)o.setFirstAmount(nob.getFirstAmount());
  979. }else if (nob.getType()==OrderChangeType.JJEBG.getCode()) {
  980. o.setTotalAmount(nob.getTotalAmount());
  981. if (nob.getFirstAmount()!=null)o.setFirstAmount(nob.getFirstAmount());
  982. }else if (nob.getType()==OrderChangeType.CB.getCode()){
  983. o.setTotalAmount(nob.getTotalAmount());
  984. if (nob.getFirstAmount()!=null)o.setFirstAmount(nob.getFirstAmount());
  985. }
  986. //处理变更项目与催款新增在订单中
  987. pushTaskAndDun(nob.getId(),o);
  988. o.setProcessStatus(orderProjectService.getOrderProcessStatus(nb.getOrderNo()));
  989. o.setDeleteSign(0);
  990. //处理客户中间表退单标识
  991. //处理客户已派项目
  992. UserMid um=new UserMid();
  993. String taskNames=userMidMapper.getUserTaskNames(o.getBuyerId());
  994. um.setUid(o.getBuyerId());
  995. um.setTaskNames(taskNames);
  996. if (nb.getType()==0)um.setChargeback(1);
  997. userMidMapper.updateByUid(um);
  998. //如果合同不是空,则修改合同
  999. if (nob.getContractPictureUrl()!=null)o.setContractPictureUrl(nob.getContractPictureUrl());
  1000. //清算状态 0-首付待付请,1-尾款待付清,2-已付请,3-部分退款,4-全部退款
  1001. o.setLiquidationStatus(OrderUtils.getLiquidationStatus(o));
  1002. tOrderNewMapper.updateByPrimaryKeySelective(o);
  1003. orderProjectService.updateMidServiceProject(o.getOrderNo());
  1004. return o;
  1005. }
  1006. private void pushTaskAndDun(Integer id,TOrderNew o) {
  1007. pushChangeAddOrderTask(id);
  1008. //处理主项目显示派单年份
  1009. List<TChangeDunOut> listcd=tChangeDunMapper.selectByCid(id);
  1010. for (TChangeDunOut cd : listcd) {
  1011. NewOrderDun nd=new NewOrderDun();
  1012. if (cd.getType()==1) {
  1013. nd.setOrderNo(cd.getOrderNo());
  1014. nd.setAid(cd.getAid());
  1015. nd.setAppropriationRatio(cd.getAppropriationRatio());
  1016. nd.setTid(cd.getTid());
  1017. nd.setProjectType(cd.getProjectType());
  1018. nd.setDunType(cd.getDunType());
  1019. nd.setMoney(cd.getMoney());
  1020. nd.setWaitDay(cd.getWaitDay());
  1021. nd.setStartTime(cd.getStartTime());
  1022. nd.setEffectiveCount(cd.getEffectiveCount());
  1023. nd.setCustomizeTime(cd.getCustomizeTime());
  1024. nd.setCustomizeName(cd.getCustomizeName());
  1025. if (cd.getDunType()==1) {
  1026. nd.setStatus(1);
  1027. nd.setStartTime(new Date());
  1028. }
  1029. newOrderDunMapper.insertSelective(nd);
  1030. }else if (cd.getType()==2) {
  1031. nd.setId(cd.getDid());
  1032. nd.setMoney(cd.getMoney());
  1033. newOrderDunMapper.updateByPrimaryKeySelective(nd);
  1034. }else if(cd.getType()==3) {
  1035. newOrderDunMapper.deleteByPrimaryKey(cd.getDid());
  1036. }
  1037. }
  1038. orderNewService.pushOrderMidDun(o);
  1039. }
  1040. /**
  1041. * 通过变更id来处理变更,先将父级新增、再新增子集。为了获取到订单项目的父子级关系
  1042. * @param id
  1043. */
  1044. private void pushChangeAddOrderTask(Integer id) {
  1045. List<TChangeTaskOut> listct=tChangeTaskMapper.selectByCid(id,3);
  1046. HashMap<Integer, Integer> map=changeAddOrderTask(listct,null);
  1047. List<TChangeTaskOut> listct2=tChangeTaskMapper.selectByCid(id,2);
  1048. changeAddOrderTask(listct2,map);
  1049. }
  1050. /**
  1051. *
  1052. * @param listct 变更数据
  1053. * @param input 新增数据Id
  1054. */
  1055. private HashMap<Integer, Integer> changeAddOrderTask(List<TChangeTaskOut> listct, HashMap<Integer, Integer> input) {
  1056. HashMap<Integer, Integer> map = new HashMap<>();
  1057. for (TChangeTaskOut cd : listct) {
  1058. TOrderTask ot=new TOrderTask();
  1059. if (cd.getType()==1) {
  1060. ot.setOrderNo(cd.getOrderNo());
  1061. ot.setCommodityId(cd.getCommodityId());
  1062. ot.setCommodityName(cd.getCommodityName());
  1063. ot.setCommodityPrice(cd.getCommodityPrice());
  1064. ot.setCommodityQuantity(cd.getCommodityQuantity());
  1065. ot.setTaskComment(cd.getTaskComment());
  1066. ot.setMain(cd.getMain());
  1067. ot.setTaskStatus(0);
  1068. ot.setSplitStatus(cd.getSplitStatus());
  1069. if (cd.getSplitStatus()==2){
  1070. Integer tid;
  1071. //如果原本有上级直接使用
  1072. if (cd.getSplitSuper()!=null){
  1073. ot.setSplitSuper(cd.getSplitSuper());
  1074. }else {
  1075. //如果没有,原本项目,这用获取新增的项目
  1076. if (cd.getTid()!=null){
  1077. tid=cd.getTid();
  1078. }else{
  1079. tid=input.get(cd.getChangeSplitSuper());
  1080. }
  1081. if (tid==null)tid=tChangeTaskMapper.selectByPrimaryKey(cd.getChangeSplitSuper()).getTid();
  1082. ot.setSplitSuper(tid);
  1083. }
  1084. ot.setSplitId(pushSplitId(ot.getSplitSuper()));
  1085. ot.setCommodityPrice(new BigDecimal(0));
  1086. }
  1087. if (cd.getDeclarationBatch()!=null)ot.setDeclarationBatch(cd.getDeclarationBatch());
  1088. if (cd.getPatentType()!=null)ot.setPatentType(cd.getPatentType());
  1089. tOrderTaskMapper.insertSelective(ot);
  1090. InputAddTask inMid=new InputAddTask();
  1091. inMid.setId(ot.getId());
  1092. inMid.setCommodityId(ot.getCommodityId());
  1093. inMid.setOrderNo(ot.getOrderNo());
  1094. inMid.setChange(1);
  1095. inMid.setLastYear(cd.getLastYear());
  1096. inMid.setLastYearCapital(cd.getLastYearCapital());
  1097. inMid.setLastYearIncome(cd.getLastYearIncome());
  1098. orderNewService.addTaskMid(inMid);
  1099. if (cd.getSplitStatus()==1){
  1100. map.put(cd.getId(),ot.getId());
  1101. }
  1102. orderNewService.addTTaskMember(ot.getId(),cd.getServiceLife(),cd.getServiceYear(),cd.getYearSum(),cd.getContractTerm());
  1103. cd.setTid(ot.getId());
  1104. tChangeTaskMapper.updateByPrimaryKeySelective(cd);
  1105. tChangeDunMapper.updateByCTid(cd.getId(), ot.getId());
  1106. }else if (cd.getType()==2) {
  1107. ot.setId(cd.getTid());
  1108. ot.setCommodityPrice(cd.getCommodityPrice());
  1109. ot.setCommodityQuantity(cd.getCommodityQuantity());
  1110. ot.setSplitStatus(cd.getSplitStatus());
  1111. if (ot.getSplitSuper()!=null)ot.setSplitId(pushSplitId(ot.getSplitSuper()));
  1112. if (cd.getDeclarationBatch()!=null)ot.setDeclarationBatch(cd.getDeclarationBatch());
  1113. if (cd.getPatentType()!=null)ot.setPatentType(cd.getPatentType());
  1114. tOrderTaskMapper.updateByPrimaryKeySelective(ot);
  1115. if (cd.getServiceLife()!=null){
  1116. updateTaskMember(ot.getId(),cd.getServiceLife(),cd.getServiceYear(),cd.getYearSum(),cd.getContractTerm());
  1117. }
  1118. if (cd.getLastYear()!=null){
  1119. updateTaskMid(ot.getId(),cd.getLastYear(),cd.getLastYearCapital(),cd.getLastYearIncome());
  1120. }
  1121. }else if(cd.getType()==3) {
  1122. tOrderTaskMapper.deleteByPrimaryKey(cd.getTid());
  1123. }
  1124. }
  1125. return map;
  1126. }
  1127. private Integer pushSplitId(Integer splitSuper) {
  1128. //计算出拆分编号
  1129. Integer i = tOrderTaskMapper.getSplitCount(splitSuper);
  1130. i++;
  1131. return i;
  1132. }
  1133. private void updateTaskMid(Integer id, String lastYear, BigDecimal lastYearCapital, BigDecimal lastYearIncome) {
  1134. TTaskMid tTaskMid = new TTaskMid();
  1135. tTaskMid.setTid(id);
  1136. tTaskMid.setLastYear(lastYear);
  1137. tTaskMid.setLastYearCapital(lastYearCapital);
  1138. tTaskMid.setLastYearIncome(lastYearIncome);
  1139. tTaskMidMapper.updateByTid(tTaskMid);
  1140. }
  1141. private void updateTaskMember(Integer id, String serviceLife, String serviceYear, Integer yearSum,String contractTerm) {
  1142. TTaskMember ttm=new TTaskMember();
  1143. ttm.setTid(id);
  1144. ttm.setServiceLife(serviceLife);
  1145. ttm.setServiceYear(serviceYear);
  1146. ttm.setYearSum(yearSum);
  1147. ttm.setContractTerm(contractTerm);
  1148. tTaskMemberMapper.updateByTid(ttm);
  1149. }
  1150. @Override
  1151. public Map<String, Object> listOrderInvoiceAndBill(String orderNo) {
  1152. Map<String, Object> map=new HashMap<>();
  1153. List<BillBo>list=tOrderBillNewMapper.selectByOrderNo(orderNo);
  1154. List<InvoiceBo>list2=tOrderInvoiceMapper.selectByOrderNo(orderNo);
  1155. map.put("bill", list);
  1156. map.put("invoice", list2);
  1157. return map;
  1158. }
  1159. @SuppressWarnings("unchecked")
  1160. @Override
  1161. public void exportMyChange(HttpServletResponse response, String userName, Integer processState, Integer timeType,
  1162. String startTime, String endTime, String deps, String salesmanName, Integer complete,String orderNo, String contractNo,
  1163. Integer type,Integer pageSize,Integer pageNo) throws IOException {
  1164. OutputStream out = response.getOutputStream();
  1165. List<NewOderCahngeListBo>list=(List<NewOderCahngeListBo>) selectOrderChangeList( userName, processState, timeType, startTime, endTime,
  1166. deps, salesmanName, complete, orderNo, contractNo, type, pageSize, pageNo).getList();
  1167. try {
  1168. //设计表头 String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间","订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"}
  1169. String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间","订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"};
  1170. String fileName ="开票变更记录表" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls";
  1171. //type 0 变更
  1172. XSSFWorkbook wb =ExportExcelUtil.exportTemplateInfoS(comment,"开票变更记录");
  1173. //根据列表编写文档
  1174. XSSFSheet sheet =wb.getSheetAt(0);
  1175. for (NewOderCahngeListBo ob : (List<NewOderCahngeListBo>)list) {
  1176. //新增一行
  1177. XSSFRow r = sheet.createRow(sheet.getLastRowNum()+1);
  1178. for (int i = 0; i < comment.length; i++) {
  1179. //当前列的只
  1180. String o = "";
  1181. switch (comment[i]) {
  1182. // String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间",
  1183. // "订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"};
  1184. case "合同编号": o = ob.getContractNo(); break;
  1185. case "订单编号": o = ob.getOrderNo().toString(); break;
  1186. case "客户名称": o = ob.getNickname(); break;
  1187. case "订单部门": o = ob.getDepName(); break;
  1188. case "订单类型": o = OrderType.getValueByCode(ob.getOrderType()); break;
  1189. case "下单时间": o = ob.getEstablishTimes(); break;
  1190. case "订单状态": o = OrderNewState.getValueByCode(ob.getOrderStatus()); break;
  1191. case "合同额(万元)": o = ob.getTotalAmount().toString(); break;
  1192. case "已付额(万元)": o = ob.getSettlementAmount().toString(); break;
  1193. case "欠款(万元)": o = ob.getArrears().toString(); break;
  1194. case "订单负责人": o = ob.getSalesmanName(); break;
  1195. case "变更类型": o = OrderChangeType.getValueByCode(ob.getType()); break;
  1196. case "变更审核状态": o = getProcessState(ob.getProcessState(),ob.getStatus()); break;
  1197. case "变更提交时间": o = ob.getCreateTimes(); break;
  1198. default: o = ""; break;
  1199. }
  1200. XSSFCell c = r.createCell(i);
  1201. c.setCellValue(o);
  1202. }
  1203. }
  1204. //返回名称及参数
  1205. response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1"));
  1206. response.setContentType("application/octet-stream;charset=utf-8");
  1207. // 返回数据流
  1208. wb.write(out);
  1209. out.flush();
  1210. out.close();
  1211. } catch (Exception e) {
  1212. throw new BusinessException(new Error("表格生成错误。"));
  1213. }finally {
  1214. out.flush();
  1215. out.close();
  1216. }
  1217. }
  1218. public static String getProcessState(Integer processState,Integer status) {
  1219. String str="";
  1220. if (processState == 0) {
  1221. str = "营销员";
  1222. } else if (processState == 1) {
  1223. str = "营销管理员";
  1224. } else if (processState == 2) {
  1225. str = "咨询师";
  1226. } else if (processState == 3) {
  1227. str = "咨询师经理";
  1228. } else if (processState == 4) {
  1229. str = "咨询师总监";
  1230. } else if (processState == 5) {
  1231. str = "财务专员";
  1232. } else if (processState == 6) {
  1233. str = "财务总监";
  1234. } else if (processState == 7) {
  1235. str = "总裁";
  1236. } else if (processState == 8) {
  1237. str = "董事长";
  1238. }
  1239. String num = "";
  1240. if (status == 0) {
  1241. num = "发起";
  1242. } else if (status == 1) {
  1243. num = "审核中";
  1244. } else if (status == 2) {
  1245. num = "通过";
  1246. } else if (status == 3) {
  1247. num = "驳回";
  1248. return num + "到" + str;
  1249. } else if (status == 4) {
  1250. num = "完成";
  1251. }
  1252. if (processState == 7 && status == 2) {
  1253. return "订单变更退票中";
  1254. } else if (processState == 8 && status == 2) {
  1255. return "订单变更退票中";
  1256. } else if (processState >= 7 && status == 4) {
  1257. return "订单变更已完成";
  1258. } else {
  1259. return str + num;
  1260. }
  1261. }
  1262. @Override
  1263. public Object addChangeTask(TChangeTask t) {
  1264. t.setType(1);
  1265. tChangeTaskMapper.insertSelective(t);
  1266. return t;
  1267. }
  1268. @Override
  1269. public int addChangeDun(TChangeDun d) {
  1270. d.setAid(TokenManager.getAdminId());
  1271. d.setType(1);
  1272. if(d.getCustomizeTimes()!=null)d.setCustomizeTime(DateUtils.StringToDate(d.getCustomizeTimes(), AFTConstants.YYYYMMDD));
  1273. return tChangeDunMapper.insertSelective(d);
  1274. }
  1275. @Override
  1276. public int deleteChangeTask(Integer id) {
  1277. return tChangeTaskMapper.deleteByPrimaryKey(id);
  1278. }
  1279. @Override
  1280. public int deleteChangeDun(Integer id) {
  1281. return tChangeDunMapper.deleteByPrimaryKey(id);
  1282. }
  1283. @Override
  1284. public List<TChangeTaskOut> selectChangeTask(Integer cid) {
  1285. List<TChangeTaskOut> list=tChangeTaskMapper.selectByCid(cid,3);//3设置不等于2
  1286. for (TChangeTaskOut tChangeTaskOut : list) {
  1287. if(tChangeTaskOut.getSplitStatus()==1){
  1288. //变更会员子项目有2中,一种是复制过来的,根据上级项目编号关联,还一种是新增的根据变更项目编号关联
  1289. TChangeTask input= new TChangeTask();
  1290. input.setCid(cid);
  1291. input.setSplitSuper(tChangeTaskOut.getTid());
  1292. input.setChangeSplitSuper(tChangeTaskOut.getId());
  1293. tChangeTaskOut.setList(getChangeSonTasks(input));
  1294. }
  1295. }
  1296. return list;
  1297. }
  1298. @Override
  1299. public List<TChangeDunOut> selectChangeDun(Integer cid) {
  1300. return tChangeDunMapper.selectByCid(cid);
  1301. }
  1302. @Override
  1303. public int updateChangeTask(InputTChangeTask t) {
  1304. //有tid是订单复制项目
  1305. if(t.getTid()!=null) {
  1306. //type 0正常 1新增 2修改 3删除
  1307. TChangeTask tt=tChangeTaskMapper.selectByPrimaryKey(t.getId());
  1308. BusinessProject bp = businessProjectMapper.selectByPrimaryKey(tt.getCommodityId());
  1309. Integer member=null;
  1310. if (t.getType()==3) {
  1311. //删除首先将项目删除,然后将所属催款做删除
  1312. if (bp.getType()==7)member=1;
  1313. tChangeTaskMapper.updateByTid(t.getTid(),null,tt.getCid(),3,member);
  1314. if (tt.getSplitStatus()==0) {
  1315. tChangeDunMapper.updateByTid(tt.getTid(),tt.getCid(),3);
  1316. }else if (tt.getSplitStatus()==1) {
  1317. t.setServiceYear("");
  1318. //删除父类下所有的子类
  1319. if (tt.getType()==1){
  1320. tChangeTaskMapper.deleteByChangeSplitSuper(tt.getTid());
  1321. }else {
  1322. tChangeTaskMapper.updateByTid(null,tt.getTid(),tt.getCid(),3,member);
  1323. tChangeDunMapper.updateByTid(tt.getTid(),tt.getCid(),3);
  1324. }
  1325. }else if(tt.getSplitStatus()==2) {
  1326. List<TChangeTask> list=tChangeTaskMapper.selectBySuper(tt.getSplitSuper(),null,tt.getCid());
  1327. boolean flag=true;
  1328. for (TChangeTask tc : list) {
  1329. if (tc.getType()!=3) {
  1330. flag=false;
  1331. break;
  1332. }
  1333. }
  1334. if (flag) {
  1335. //如果所有子类删除判断删除父类
  1336. tChangeTaskMapper.updateByTid(tt.getSplitSuper(),null,tt.getCid(),3,member);
  1337. tChangeDunMapper.updateByTid(tt.getSplitSuper(),tt.getCid(),3);
  1338. }
  1339. }
  1340. }else if(t.getType()==2){
  1341. tChangeTaskMapper.updateByTid(t.getTid(),null,tt.getCid(),2,member);
  1342. if (tt.getSplitStatus()==1) {
  1343. if (t.getServiceLife()!=null||t.getServiceYear()!=null||t.getYearSum()!=null||t.getContractTerm()!=null){
  1344. tChangeTaskMapper.updateMemberByTid(tt.getTid(),t.getCid(),null,t.getServiceLife(),t.getServiceYear(),t.getYearSum(),t.getContractTerm());
  1345. }
  1346. updateChangeType(tt);
  1347. }else if(tt.getSplitStatus()==2) {
  1348. tChangeTaskMapper.updateByTid(tt.getSplitSuper(),null,tt.getCid(),2,member);
  1349. }
  1350. }
  1351. //如果没有tid是新增项目则直接删除
  1352. }else {
  1353. if (t.getType()==3) {
  1354. tChangeTaskMapper.deleteByPrimaryKey(t.getId());
  1355. tChangeTaskMapper.deleteByChangeSplitSuper(t.getId());
  1356. tChangeDunMapper.deleteByCtid(t.getId());
  1357. }
  1358. }
  1359. return tChangeTaskMapper.updateByPrimaryKeySelective(t);
  1360. }
  1361. private void updateChangeType(TChangeTask t) {
  1362. List<TChangeTask> changeSonTasks = getChangeSonTasks(t);
  1363. List<Integer> list=new ArrayList<>();
  1364. for (TChangeTask changeSonTask : changeSonTasks) {
  1365. if (changeSonTask.getType()==0||changeSonTask.getType()==2){
  1366. list.add(changeSonTask.getId());
  1367. }
  1368. }
  1369. if(!list.isEmpty())tChangeTaskMapper.updateTypeBatch(2,list);
  1370. }
  1371. @Override
  1372. public int updateChangeDun(TChangeDun t) {
  1373. if(t.getCustomizeTimes()!=null)t.setCustomizeTime(DateUtils.StringToDate(t.getCustomizeTimes(), AFTConstants.YYYYMMDD));
  1374. if (t.getType()==1||t.getType()==2) {
  1375. return tChangeDunMapper.updateByPrimaryKeySelective(t);
  1376. }else if(t.getType()==3){
  1377. if (t.getDid()!=null) {
  1378. return tChangeDunMapper.updateByPrimaryKeySelective(t);
  1379. }else {
  1380. return tChangeDunMapper.deleteByPrimaryKey(t.getId());
  1381. }
  1382. }else {
  1383. return 0;
  1384. }
  1385. }
  1386. @Override
  1387. public List<TOrderNewBo> orderChangeUsed(String orderNo) {
  1388. List<TOrderNewBo> list=tOrderNewMapper.selectUsedOrderByOrder(orderNo);
  1389. for (TOrderNewBo t : list) {
  1390. t.setDunList(newOrderDunService.selectListNewOrderDun(orderNo));
  1391. t.setTaskList(orderNewService.selectOrderTask(orderNo,0));
  1392. }
  1393. return list;
  1394. }
  1395. @Override
  1396. public List<Map<String, String>> getOrderChange(String orderNo) {
  1397. List<Map<String, String>> list=new ArrayList<>();
  1398. list =newOrderChangeMapper.getOrderChange(orderNo);
  1399. return list;
  1400. }
  1401. @Override
  1402. public int addOrderRefund(InputNewOrderRefund or) {
  1403. or.setRefundTime(DateUtils.StringToDate(or.getRefundDate(), AFTConstants.YYYYMMDD));
  1404. return newOrderRefundMapper.insertSelective(or);
  1405. }
  1406. @Override
  1407. public int deleteRefund(Integer id) {
  1408. return newOrderRefundMapper.deleteByPrimaryKey(id);
  1409. }
  1410. @Override
  1411. public List<OutNewOrderRefund> listRefund(Integer id) {
  1412. return newOrderRefundMapper.listRefund(id);
  1413. }
  1414. @Override
  1415. public int pushRefund(Integer id,String refundUrl) {
  1416. NewOrderChange noc=newOrderChangeMapper.selectByPrimaryKey(id);
  1417. if (noc.getRefundStatus()!=1) {
  1418. List<OutNewOrderRefund> list=listRefund(id);
  1419. BigDecimal bd=new BigDecimal(0);
  1420. TOrderNew order=tOrderNewMapper.selectByPrimaryKey(noc.getOrderNo());
  1421. for (OutNewOrderRefund o : list) {
  1422. TOrderBillNew tbn =new TOrderBillNew();
  1423. tbn.setOrderNo(o.getOrderNo());
  1424. tbn.setTransactionAmount(o.getRefundAmount().negate());// 取负数
  1425. tbn.setBillNo(UUID.randomUUID().toString().replaceAll("-", ""));
  1426. tbn.setCreater(TokenManager.getAdminId());
  1427. tbn.setPayeeId(order.getBuyerId());
  1428. tbn.setPayerId("0");
  1429. tbn.setRemarks(o.getRemarks());
  1430. tbn.setTransactionSubject(2);
  1431. tbn.setTransactionChannel(2);
  1432. tbn.setConfirmSign(1);
  1433. tbn.setRefundTime(o.getRefundTime());
  1434. bd=bd.add(o.getRefundAmount());
  1435. tOrderBillNewMapper.insertSelective(tbn);
  1436. }
  1437. TOrderNew o=new TOrderNew();
  1438. o.setOrderNo(noc.getOrderNo());
  1439. o.setRefundAmount(bd);
  1440. tOrderNewMapper.updaterefund(o);
  1441. NewOrderChange n=new NewOrderChange();
  1442. n.setId(id);
  1443. n.setRefundStatus(1);
  1444. n.setRefundUrl(refundUrl);
  1445. newOrderChangeMapper.updateByPrimaryKeySelective(n);
  1446. }
  1447. return 1;
  1448. }
  1449. @Override
  1450. public boolean checkrefund(InputNewOrderRefund or) {
  1451. if (or.getOrderNo()!=null) {
  1452. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(or.getOrderNo());
  1453. BigDecimal refund=new BigDecimal(0);
  1454. List<OutNewOrderRefund> list=listRefund(or.getCid());
  1455. refund=refund.add(or.getRefundAmount());
  1456. for (OutNewOrderRefund oor : list) {
  1457. refund=refund.add(oor.getRefundAmount());
  1458. }
  1459. if (o.getSettlementAmount().compareTo(refund)!=-1) {
  1460. return false;
  1461. }else {
  1462. return true;
  1463. }
  1464. }
  1465. return true;
  1466. }
  1467. @Override
  1468. public int updateCancelOrderChange(NewOrderChangeBo nb) {
  1469. NewOrderChange noc=new NewOrderChange();
  1470. noc.setId(nb.getId());
  1471. noc.setStatus(5);
  1472. newOrderChangeMapper.updateByPrimaryKeySelective(noc);
  1473. TOrderNew t=new TOrderNew();
  1474. t.setOrderNo(nb.getOrderNo());
  1475. t.setDeleteSign(0);
  1476. addOrderChangeLog("变更撤销成功", 5, nb.getOrderNo(), nb.getId());
  1477. tOrderNewMapper.updateByPrimaryKeySelective(t);
  1478. return 1;
  1479. }
  1480. @Override
  1481. public Object addMemberSonProject(Integer id, String serviceYear, String taskComment) {
  1482. //先修改父项目
  1483. TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id);
  1484. Integer tid=tChangeTask.getTid();
  1485. tChangeTask.setSplitStatus(1);
  1486. if (tChangeTask.getType()!=1)tChangeTask.setType(2);
  1487. tChangeTaskMapper.updateByPrimaryKey(tChangeTask);
  1488. //在判断是否有删除的年份没有就新增
  1489. tChangeTask.setId(null);
  1490. tChangeTask.setTid(null);
  1491. tChangeTask.setSplitStatus(2);
  1492. if(tid!=null){
  1493. tChangeTask.setSplitSuper(tid);
  1494. }else {
  1495. tChangeTask.setChangeSplitSuper(id);
  1496. }
  1497. tChangeTask.setType(1);
  1498. tChangeTask.setCommodityQuantity(1);
  1499. tChangeTask.setCommodityPrice(new BigDecimal(0));
  1500. tChangeTask.setTaskComment(taskComment);
  1501. tChangeTask.setServiceYear(serviceYear);
  1502. tChangeTaskMapper.insertSelective(tChangeTask);
  1503. //根据上级id修改上级
  1504. updateSuperServiceYear(tChangeTask);
  1505. return tChangeTask;
  1506. }
  1507. public void updateSuperServiceYear(TChangeTask tChangeTask) {
  1508. if(tChangeTask.getSplitSuper()!=null){
  1509. tChangeTaskMapper.updateSuperServiceYear(tChangeTask);
  1510. }else {
  1511. tChangeTaskMapper.updateChangeSuperServiceYear(tChangeTask);
  1512. }
  1513. }
  1514. @Override
  1515. public int deleteMemberSonProject(Integer id) {
  1516. TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id);
  1517. if (tChangeTask.getType()==1){
  1518. tChangeTaskMapper.deleteByPrimaryKey(id);
  1519. }else {
  1520. TChangeTask newtChangeTask = new TChangeTask();
  1521. newtChangeTask.setId(id);
  1522. newtChangeTask.setType(3);
  1523. tChangeTaskMapper.updateByPrimaryKeySelective(newtChangeTask);
  1524. }
  1525. List<TChangeTask> tChangeTasks = getChangeSonTasks(tChangeTask);
  1526. //如果没有子项目则修改上级
  1527. if (tChangeTasks == null || tChangeTasks.isEmpty()) {
  1528. TChangeTask changeTask = new TChangeTask();
  1529. changeTask.setId(tChangeTask.getSplitSuper());
  1530. changeTask.setSplitStatus(0);
  1531. tChangeTaskMapper.updateByPrimaryKeySelective(changeTask);
  1532. }
  1533. updateSuperServiceYear(tChangeTask);
  1534. return 1;
  1535. }
  1536. @Override
  1537. public Object updateMemberSonProject(Integer id,String taskComment) {
  1538. TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id);
  1539. tChangeTask.setType(2);
  1540. tChangeTask.setTaskComment(taskComment);
  1541. tChangeTaskMapper.updateByPrimaryKeySelective(tChangeTask);
  1542. updateSuperServiceYear(tChangeTask);
  1543. return tChangeTask;
  1544. }
  1545. /**
  1546. * 如果是有splitSuper 是父有项目的tid,变更父项目有订单项目,则需要看订单项目变更后的子集,反正则不需要
  1547. * changeSplitSuper 是当前变更项目的子集
  1548. * @param tChangeTask
  1549. * @return
  1550. */
  1551. private List<TChangeTask> getChangeSonTasks(TChangeTask tChangeTask) {
  1552. List<TChangeTask> tChangeTasks = new ArrayList<>();
  1553. if (tChangeTask.getSplitSuper()!=null)tChangeTasks.addAll(tChangeTaskMapper.selectBySuper(tChangeTask.getSplitSuper(),null, tChangeTask.getCid()));
  1554. tChangeTasks.addAll(tChangeTaskMapper.selectBySuper(null, tChangeTask.getChangeSplitSuper(), tChangeTask.getCid()));
  1555. return tChangeTasks;
  1556. }
  1557. @Override
  1558. public Object gerProcessName(Integer id) {
  1559. NewOrderChange newOrderChange=newOrderChangeMapper.selectByPrimaryKey(id);
  1560. OutProcessName processName = newOrderChangeMapper.getProcessName(id, newOrderChange.getOrderNo());
  1561. if (processName.getSalesmanId().equals(AFTConstants.CAOJIN_AID)){
  1562. processName.setSpecial(1);
  1563. }else {
  1564. if (processName.getApprovalStatus()==0){
  1565. processName.setApprovalName("未设置特批审核人员");
  1566. }
  1567. }
  1568. return processName;
  1569. }
  1570. @Override
  1571. public boolean checkTaskMain(TChangeTask t) {
  1572. int i=0;
  1573. if (t.getMain()==1){
  1574. if (t.getId()!=null) {
  1575. TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(t.getId());
  1576. t.setCid(tChangeTask.getCid());
  1577. }
  1578. List<TChangeTaskOut> l = tChangeTaskMapper.selectByCid(t.getCid(), null);
  1579. for (TChangeTaskOut task : l) {
  1580. if (task.getId().equals(t.getId())){
  1581. task.setMain(1);
  1582. }
  1583. if (task.getMain()==1){
  1584. i++;
  1585. }
  1586. }
  1587. if (i>1){
  1588. return true;
  1589. }
  1590. }
  1591. return false;
  1592. }
  1593. @Override
  1594. public void pushChangeProcess(String taskReceiverId, Integer type) {
  1595. List<Integer> list = newOrderChangeMapper.selectProcess(type, taskReceiverId);
  1596. if(!list.isEmpty()){
  1597. Date date =new Date();
  1598. for (Integer i : list) {
  1599. NewOrderChangeBo changeBo = orderChangeDetailsById(i);
  1600. if (type==3)pushZXS(changeBo,date,1);
  1601. if (type==4)pushZXSJL(changeBo,date,1);
  1602. newOrderChangeMapper.updateByPrimaryKeySelective(changeBo);
  1603. }
  1604. }
  1605. }
  1606. }