OrderNewServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. package com.goafanti.order.service.impl;
  2. import java.math.BigDecimal;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.UUID;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.beans.factory.annotation.Value;
  14. import org.springframework.stereotype.Service;
  15. import com.alibaba.fastjson.JSON;
  16. import com.goafanti.common.bo.Error;
  17. import com.goafanti.common.constant.ErrorConstants;
  18. import com.goafanti.common.dao.OrganizationContactBookMapper;
  19. import com.goafanti.common.dao.TDunLogMapper;
  20. import com.goafanti.common.dao.TOrderBackMapper;
  21. import com.goafanti.common.dao.TOrderDunMapper;
  22. import com.goafanti.common.dao.TOrderNewMapper;
  23. import com.goafanti.common.dao.TOrderRefundMapper;
  24. import com.goafanti.common.dao.TOrderTaskMapper;
  25. import com.goafanti.common.dao.UserLockReleaseMapper;
  26. import com.goafanti.common.error.BusinessException;
  27. import com.goafanti.common.model.OrganizationContactBook;
  28. import com.goafanti.common.model.TDunLog;
  29. import com.goafanti.common.model.TOrderBack;
  30. import com.goafanti.common.model.TOrderDun;
  31. import com.goafanti.common.model.TOrderNew;
  32. import com.goafanti.common.model.TOrderRefundWithBLOBs;
  33. import com.goafanti.common.model.TOrderTask;
  34. import com.goafanti.common.utils.ExportExcelUtil;
  35. import com.goafanti.core.mybatis.BaseMybatisDao;
  36. import com.goafanti.core.mybatis.JDBCIdGenerator;
  37. import com.goafanti.core.mybatis.page.Pagination;
  38. import com.goafanti.core.shiro.token.TokenManager;
  39. import com.goafanti.customer.bo.LockingReleaseBo;
  40. import com.goafanti.order.bo.TDunLogListBo;
  41. import com.goafanti.order.bo.TOrderNewBo;
  42. import com.goafanti.order.bo.TOrderRefundBo;
  43. import com.goafanti.order.bo.TOrderTaskBo;
  44. import com.goafanti.order.enums.ActiveState;
  45. import com.goafanti.order.enums.ApprovalNewState;
  46. import com.goafanti.order.enums.LiquidationNewState;
  47. import com.goafanti.order.enums.OrderNewState;
  48. import com.goafanti.order.enums.ProcessStatus;
  49. import com.goafanti.order.enums.ProjectNewStage;
  50. import com.goafanti.order.enums.TaskState;
  51. import com.goafanti.order.enums.refundState;
  52. import com.goafanti.order.service.OrderNewService;
  53. @Service
  54. public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> implements OrderNewService {
  55. @Autowired
  56. private TOrderNewMapper tOrderNewMapper;
  57. @Autowired
  58. private TOrderTaskMapper tOrderTaskMapper;
  59. @Autowired
  60. private TOrderDunMapper tOrderDunMapper;
  61. @Autowired
  62. private TDunLogMapper tDunLogMapper;
  63. @Autowired
  64. private TOrderRefundMapper tOrderRefundMapper;
  65. @Autowired
  66. private TOrderBackMapper tOrderBackMapper;
  67. @Autowired
  68. private OrganizationContactBookMapper organizationContactBookMapper;
  69. @Autowired
  70. private JDBCIdGenerator idGenerator;
  71. @Autowired
  72. private UserLockReleaseMapper userLockReleaseMapper;
  73. @Value(value = "${mobileRemindCodeTemplate}")
  74. private String mobileRemindCodeTemplate = null;
  75. @Value(value = "${upload.path}")
  76. private String uploadPath = null;
  77. @Value(value = "${accessKey}")
  78. private String accessKey = null;
  79. @Value(value = "${accessSecret}")
  80. private String accessSecret = null;
  81. @Override
  82. public int createServiceOrder(String uid, Integer orderType) {
  83. BigDecimal initial = new BigDecimal(0);
  84. TOrderNew t=new TOrderNew();
  85. t.setOrderNo(idGenerator.generateId().toString());
  86. t.setOrderType(orderType);
  87. t.setOrderStatus(OrderNewState.DQD.getCode());
  88. t.setFirstAmount(initial);
  89. t.setTotalAmount(initial);
  90. t.setSettlementAmount(initial);
  91. t.setLiquidationStatus(LiquidationNewState.WAIT_PAY_FIRST_BALANCE.getCode());
  92. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  93. t.setProjectStatus(ProjectNewStage.DTJ.getCode());
  94. t.setApproval(ApprovalNewState.FTP.getCode());
  95. t.setDeleteSign(0);//0-正常,1-作废,2-锁定
  96. t.setSalesmanId(TokenManager.getAdminId());
  97. t.setCreater(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  98. t.setCreateTime(new Date());
  99. t.setUpdateTime(new Date());
  100. t.setBuyerId(uid);
  101. return tOrderNewMapper.insertSelective(t);
  102. }
  103. @Override
  104. public int addOrderTask(TOrderTask t) {
  105. TOrderNew order=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
  106. checkOrder(order,t);
  107. t.setTaskStatus(TaskState.WFP.getCode());
  108. t.setProjectStatus(ProjectNewStage.DTJ.getCode());
  109. return tOrderTaskMapper.insertSelective(t);
  110. }
  111. public void checkOrder(TOrderNew order,TOrderTask t){
  112. if(order == null)
  113. throw new BusinessException(new Error(ErrorConstants.ORDER_NOT_EXIST, "" ,""));
  114. if(order.getDeleteSign() == ActiveState.ABOLISH.getCode())
  115. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_FREEZE, order.getOrderNo(),""));
  116. if(order.getDeleteSign() == ActiveState.LOCKING.getCode())
  117. throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, order.getOrderNo(),""));
  118. List<LockingReleaseBo> list=userLockReleaseMapper.checkTask(order.getBuyerId(),t.getCommodityId());
  119. if (list.size()>0) {
  120. for (LockingReleaseBo lockingReleaseBo : list) {
  121. if (!lockingReleaseBo.getAid().equals(TokenManager.getAdminId())) {
  122. throw new BusinessException(new Error( "该业务已经被其他人锁定","该业务已经被其他人锁定"));
  123. }
  124. }
  125. }
  126. }
  127. @Override
  128. public int updateOrderTask(TOrderTask t) {
  129. return tOrderTaskMapper.updateByPrimaryKeySelective(t);
  130. }
  131. @Override
  132. public int delectOrderTask(Integer id) {
  133. return tOrderTaskMapper.deleteByPrimaryKey(id);
  134. }
  135. @Override
  136. public List<TOrderTaskBo> selectOrderTask(String orderNo) {
  137. return tOrderTaskMapper.selectOrderTask(orderNo);
  138. }
  139. @Override
  140. public int updateServiceOrder(TOrderNew t, Integer isSubmit) {
  141. OrganizationContactBook contactBook=new OrganizationContactBook();
  142. contactBook.setId(UUID.randomUUID().toString());
  143. contactBook.setAid(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  144. contactBook.setUid(t.getBuyerId());
  145. contactBook.setName(t.getContacts());
  146. contactBook.setMobile(t.getContactMobile());
  147. organizationContactBookMapper.insertSelective(contactBook);
  148. if (isSubmit==1) {
  149. t.setOrderStatus(OrderNewState.QDDS.getCode());
  150. t.setProcessStatus(ProcessStatus.YPYXGLY.getCode());
  151. }
  152. TOrderNew t2=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
  153. if (t2.getApproval()==ApprovalNewState.BH.getCode()||
  154. t2.getOrderStatus()==OrderNewState.QDSHJJ.getCode()||
  155. t2.getOrderStatus()==OrderNewState.YBH.getCode()) {
  156. tOrderBackMapper.updateByOrderNoAndBackStatus(t.getOrderNo());
  157. }
  158. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  159. }
  160. @Override
  161. public TOrderNewBo getOrderNewDetail(String orderNo) {
  162. TOrderNewBo tOrder= tOrderNewMapper.getOrderNewDetail(orderNo);
  163. return tOrder;
  164. }
  165. @Override
  166. public int createOrderDun(String orderDun,String orderNo) {
  167. List<TOrderDun> l= JSON.parseArray(orderDun, TOrderDun.class);
  168. List<TOrderDun> l2=tOrderDunMapper.selectByOrderNoDunSubject(orderNo);
  169. if (l!=null&&!l.isEmpty()) {
  170. for (TOrderDun t : l) {
  171. if (t.getId()==null||t.getId().equals("")) {//Id为空新增
  172. t.setId(UUID.randomUUID().toString());
  173. t.setDunBy(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  174. t.setDunStatus(0);//催款中
  175. tOrderDunMapper.insertSelective(t);
  176. }else {
  177. tOrderDunMapper.updateByPrimaryKeySelective(t);
  178. }
  179. }
  180. boolean flag=true;
  181. for (TOrderDun t2 : l2) {
  182. for (TOrderDun t : l) {
  183. if (t2.getId().equals(t.getId())) {//查询集合与返回集合比较查出删除项
  184. flag=false;
  185. }
  186. }
  187. if (t2.getId()!=null&&flag) {
  188. tOrderDunMapper.deleteByPrimaryKey(t2.getId());
  189. }
  190. }
  191. }
  192. return 1;
  193. }
  194. @SuppressWarnings("unchecked")
  195. @Override
  196. public Pagination<TOrderNewBo> orderNewList(String name, String orderNo, String starTime, String endTime,Integer specially,Integer distribution, Integer pageNo,
  197. Integer pageSize) {
  198. Map<String, Object> params = new HashMap<String, Object>();
  199. if(pageSize==null||pageSize<0)pageSize=10;
  200. if(pageNo==null||pageNo<0)pageNo=1;
  201. if (specially!=null&&specially==0) {
  202. params.put("aid", TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  203. }else if(specially!=null&&specially==4){
  204. params.put("distribution",distribution);
  205. }
  206. params.put("specially",specially);
  207. if (StringUtils.isNotBlank(name)) params.put("name", name);
  208. if (StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  209. if (StringUtils.isNotBlank(starTime)) params.put("starTime", starTime);
  210. if (StringUtils.isNotBlank(endTime)) params.put("endTime", endTime+" 23:59:59");
  211. Pagination<TOrderNewBo> p = (Pagination<TOrderNewBo>)findPage("selectOrderNewListByPage", "selectOrderNewListCount", params, pageNo, pageSize);
  212. return p;
  213. }
  214. @Override
  215. public int updateOrderNew(String orderNo, Integer orderStatus,String reason) {
  216. TOrderNew t= new TOrderNew();
  217. TOrderNew t2= tOrderNewMapper.selectByPrimaryKey(orderNo);
  218. t.setOrderNo(orderNo);
  219. if (orderStatus==OrderNewState.QDSHTG.getCode()&&t2.getApproval()==ApprovalNewState.FTP.getCode()) {//如果通过分配给财务管理员
  220. t.setProcessStatus(ProcessStatus.YPCWGLY.getCode());
  221. }
  222. if (orderStatus==OrderNewState.QDSHJJ.getCode()) {//如果不通过新增驳回
  223. t.setProcessStatus(ProcessStatus.YPYXY.getCode());
  224. addBackOrder(orderNo, reason);
  225. }
  226. t.setOrderStatus(orderStatus);
  227. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  228. }
  229. private void addBackOrder(String orderNo, String reason) {
  230. TOrderBack ob=new TOrderBack();
  231. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  232. ob.setCreateTime(new Date());
  233. ob.setOrderNo(orderNo);
  234. ob.setReason(reason);
  235. ob.setBackStatus(0);//待处理
  236. ob.setInitiate(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  237. ob.setAccept(tOrder.getSalesmanId());
  238. tOrderBackMapper.insertSelective(ob);
  239. }
  240. @SuppressWarnings("unchecked")
  241. @Override
  242. public Pagination<TOrderNewBo> dunOrderNewList(String name, String orderNo, String starTime, String endTime,
  243. Integer specially, Integer pageNo, Integer pageSize) {
  244. Map<String, Object> params = new HashMap<String, Object>();
  245. if(pageSize==null||pageSize<0)pageSize=10;
  246. if(pageNo==null||pageNo<0)pageNo=1;
  247. if (StringUtils.isNotBlank(name)) params.put("name", name);
  248. if (StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  249. if (StringUtils.isNotBlank(starTime)) params.put("starTime", starTime);
  250. if (StringUtils.isNotBlank(endTime)) params.put("endTime", endTime+" 23:59:59");
  251. Pagination<TOrderNewBo> p = (Pagination<TOrderNewBo>)findPage("selectDunOrderNewListByPage", "selectDunOrderNewListCount", params, pageNo, pageSize);
  252. return p;
  253. }
  254. @Override
  255. public int createDunLog(String dunId,String dumTime,String remarks) {
  256. TDunLog d=new TDunLog();
  257. d.setId(UUID.randomUUID().toString());
  258. d.setDunId(dunId);
  259. d.setDumBy(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  260. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  261. try {
  262. d.setDumTime(sdf.parse(dumTime));
  263. } catch (ParseException e) {
  264. e.printStackTrace();
  265. }
  266. d.setRemarks(remarks);
  267. return tDunLogMapper.insertSelective(d);
  268. }
  269. @Override
  270. public List<TDunLogListBo> selectDunLogList(String dunId) {
  271. return tDunLogMapper.selectByDunId(dunId);
  272. }
  273. @Override
  274. public int addOrderRefund(TOrderRefundWithBLOBs t) {
  275. t.setRefundStatus(refundState.DSH.getCode());
  276. t.setCreateTime(new Date());
  277. t.setInitiate(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
  278. t.setAccept("1");
  279. //t.setAccept(tOrder.getFinanceId());
  280. t.setResult("");
  281. TOrderNew tOrder=new TOrderNew();
  282. tOrder.setOrderNo(t.getOrderNo());
  283. tOrder.setOrderStatus(OrderNewState.YTD.getCode());
  284. tOrderNewMapper.updateByPrimaryKeySelective(tOrder);
  285. return tOrderRefundMapper.insertSelective(t);
  286. }
  287. @Override
  288. public int updateApprovalOrder(String orderNo,Integer confirm,String reason) {
  289. TOrderNew t=new TOrderNew();
  290. t.setOrderNo(orderNo);
  291. if (confirm==2) {
  292. t.setApproval(2);
  293. t.setProcessStatus(ProcessStatus.YPZXSGLY.getCode());
  294. } else {
  295. t.setApproval(3);
  296. t.setOrderStatus(OrderNewState.YBH.getCode());
  297. addBackOrder(orderNo, reason);
  298. }
  299. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  300. }
  301. @Override
  302. public List<TOrderDun> selectOrderDun(String orderNo) {
  303. return tOrderDunMapper.selectByOrderNoDunSubject(orderNo);
  304. }
  305. @Override
  306. public boolean checkOrderMain(TOrderTask t) {
  307. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(t.getOrderNo());
  308. int flag=0;
  309. if (t.getMain()==1) {
  310. flag++;
  311. }
  312. for (TOrderTask t2 : list) {
  313. if (t2.getMain()==1) {
  314. flag++;
  315. }
  316. }
  317. if (flag>1) {
  318. return true;
  319. }
  320. return false;
  321. }
  322. @Override
  323. public boolean chekeOrderStatus(String orderNo) {
  324. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  325. if (tOrder.getOrderStatus()!=OrderNewState.QDDS.getCode()) {
  326. return true;
  327. }
  328. return false;
  329. }
  330. @Override
  331. public boolean chekeApprovalOrderStatus(String orderNo) {
  332. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  333. if (tOrder.getApproval()==ApprovalNewState.FTP.getCode()||
  334. tOrder.getOrderStatus()==OrderNewState.QDSHJJ.getCode()||
  335. tOrder.getOrderStatus()==OrderNewState.YBH.getCode()) {
  336. return true;
  337. }
  338. return false;
  339. }
  340. @Override
  341. public int deleteOrderNew(String orderNo) {
  342. TOrderNew t=new TOrderNew();
  343. t.setOrderNo(orderNo);
  344. t.setDeleteSign(1);//作废
  345. return tOrderNewMapper.updateByPrimaryKeySelective(t);
  346. }
  347. @Override
  348. public boolean checkOderSettlementAmount(String orderNo) {
  349. TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
  350. if (tOrder.getSettlementAmount()==null||
  351. tOrder.getSettlementAmount().doubleValue()==0||
  352. tOrder.getOrderStatus()==OrderNewState.YTD.getCode()){
  353. return true;
  354. }
  355. return false;
  356. }
  357. @SuppressWarnings("unchecked")
  358. @Override
  359. public Pagination<TOrderRefundBo> orderRefundList(String name, String orderNo, String starTime, String endTime, Integer specially,
  360. Integer pageNo, Integer pageSize) {
  361. Map<String, Object> params = new HashMap<String, Object>();
  362. if(pageSize==null||pageSize<0)pageSize=10;
  363. if(pageNo==null||pageNo<0)pageNo=1;
  364. if (StringUtils.isNotBlank(name)) params.put("name", name);
  365. if (StringUtils.isNotBlank(orderNo)) params.put("orderNo", orderNo);
  366. if (StringUtils.isNotBlank(starTime)) params.put("starTime", starTime);
  367. if (StringUtils.isNotBlank(endTime)) params.put("endTime", endTime+" 23:59:59");
  368. Pagination<TOrderRefundBo> p = (Pagination<TOrderRefundBo>)findPage("selectOrderRefundListByPage", "selectOrderRefundListCount", params, pageNo, pageSize);
  369. return p;
  370. }
  371. @Override
  372. public boolean checkORderTask(String orderNo) {
  373. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo);
  374. for (TOrderTaskBo t : list) {
  375. if (t.getMain()==1) {
  376. return false;
  377. }
  378. }
  379. return true;
  380. }
  381. /**
  382. * 获取催款数据
  383. */
  384. @Override
  385. public HSSFWorkbook exportOrderDunData(String name, String orderNo, String starTime, String endTime) {
  386. if(endTime!=null) endTime=endTime+" 23:59:59";
  387. List<TOrderNewBo> list=tOrderDunMapper.getOrderDunData(name,orderNo,starTime,endTime);
  388. if (list==null && list.size()==0) {
  389. return null;
  390. }
  391. String[] comment = {"订单编号","签单时间","客户名称","订单状态","签单金额","项目状态","结算状态","已收款","订单负责人","催收科目","催款启动日期"};
  392. String filePath = uploadPath + "/OrderDun";
  393. HSSFWorkbook wb = ExportExcelUtil.exportOrderDunData(list, comment, filePath);
  394. return wb;
  395. }
  396. @Override
  397. public int checkOrderOver(String orderNo) {
  398. return 0;
  399. }
  400. }