CmDiscernReceiptService.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. package com.caimei.modules.order.service;
  2. import com.caimei.modules.hehe.dao.HeHeNewOrderDao;
  3. import com.caimei.modules.order.dao.CmDiscernReceiptDao;
  4. import com.caimei.modules.order.dao.CmRebateRecordDao;
  5. import com.caimei.modules.order.dao.NewOrderDao;
  6. import com.caimei.modules.order.dao.NewShopOrderDao;
  7. import com.caimei.modules.order.entity.*;
  8. import com.caimei.modules.user.dao.NewCmShopDao;
  9. import com.caimei.modules.user.entity.NewCmShop;
  10. import com.thinkgem.jeesite.common.persistence.Page;
  11. import com.thinkgem.jeesite.common.service.CrudService;
  12. import com.thinkgem.jeesite.common.utils.DateUtils;
  13. import com.thinkgem.jeesite.common.utils.StringUtils;
  14. import com.thinkgem.jeesite.modules.sys.entity.User;
  15. import com.thinkgem.jeesite.modules.sys.utils.UserUtils;
  16. import org.apache.commons.collections.CollectionUtils;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import javax.annotation.Resource;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.Map;
  24. /**
  25. * 识别款项表Service
  26. *
  27. * @author lwt
  28. * @version 2019-06-19
  29. */
  30. @Service
  31. @Transactional(readOnly = true)
  32. public class CmDiscernReceiptService extends CrudService<CmDiscernReceiptDao, CmDiscernReceipt> {
  33. @Resource
  34. private CmDiscernReceiptDao cmDiscernReceiptDao;
  35. @Resource
  36. private NewOrderDao newOrderDao;
  37. @Resource
  38. private CmReceiptOrderRelationService cmReceiptOrderRelationService;
  39. @Resource
  40. private CmRebateRecordDao cmRebateRecordDao;
  41. @Resource
  42. private NewCmShopDao newCmShopDao;
  43. @Resource
  44. private NewShopOrderDao newShopOrderDao;
  45. @Resource
  46. private HeHeNewOrderDao heHeNewOrderDao;
  47. public CmDiscernReceipt get(String id) {
  48. return super.get(id);
  49. }
  50. public List<CmDiscernReceipt> findList(CmDiscernReceipt cmDiscernReceipt) {
  51. return super.findList(cmDiscernReceipt);
  52. }
  53. public Page<CmDiscernReceipt> findPage(Page<CmDiscernReceipt> page, CmDiscernReceipt cmDiscernReceipt) {
  54. Page<CmDiscernReceipt> result = super.findPage(page, cmDiscernReceipt);
  55. result.getList().forEach(bean -> {
  56. logger.info("-----------------:::::" + bean.getId());
  57. String type = "";
  58. String no = "";
  59. if ("1".equals(bean.getReceiptType()) || "3".equals(bean.getReceiptType())) {
  60. List<Map<String, Object>> orderIDs = cmDiscernReceiptDao.getOrderIDStr(bean.getId());
  61. for (Map<String, Object> map : orderIDs) {
  62. if ("".equals(type)) {
  63. // 协销订单 0 普通订单 1',
  64. Integer orderType = (Integer) map.get("orderType");
  65. if (null != map.get("orderType")) {
  66. type += map.get("orderType").toString().equals("0") ? "协销" : "自主";
  67. } else {
  68. type += "自主";
  69. }
  70. if (2 == orderType) {
  71. //呵呵商城订单
  72. Integer orderId = (Integer) map.get("orderID");
  73. NewOrder order = newOrderDao.findByOrderID(orderId);
  74. String name = heHeNewOrderDao.findHeUser(order.getUserID());
  75. bean.setName(name);
  76. bean.setReceiptOrderType("2");
  77. }
  78. } else {
  79. type += ("<br>" + (map.get("orderType").toString().equals("0") ? "协销" : "自主"));
  80. }
  81. if ("".equals(no))
  82. no += "<a href='/a/order/detail?id=" + map.get("orderID") + "'>" + map.get("orderNo") + "</a>";
  83. else
  84. no += ("<br><a href='/a/order/detail?id=" + map.get("orderID") + "'>" + map.get("orderNo")) + "</a>";
  85. }
  86. }
  87. bean.setOrders(no);
  88. bean.setOrderType(type);
  89. });
  90. return result;
  91. }
  92. @Transactional(readOnly = false)
  93. public void save(CmDiscernReceipt cmDiscernReceipt) {
  94. super.save(cmDiscernReceipt);
  95. }
  96. @Transactional(readOnly = false)
  97. public void delete(CmDiscernReceipt cmDiscernReceipt) {
  98. super.delete(cmDiscernReceipt);
  99. }
  100. public ReceiptDetailVo detail(CmDiscernReceipt cmDiscernReceipt) {
  101. ReceiptDetailVo vo = cmDiscernReceiptDao.getInfos(cmDiscernReceipt.getId());
  102. List<CmReceiptOrderRelation> relations = cmReceiptOrderRelationService.findByReceiptID(cmDiscernReceipt.getId());
  103. boolean receiptOrderFlag = false;
  104. if (CollectionUtils.isNotEmpty(relations) && relations.size() > 1) {
  105. receiptOrderFlag = true;
  106. }
  107. vo.setReceiptOrderFlag(receiptOrderFlag);//设置一款多单状态
  108. List<ReceiptOrderInfoVo> orderInfos = new ArrayList<>(); //一个收款可能会关联了一个或多个订单
  109. for (CmReceiptOrderRelation relation : relations) {
  110. ReceiptOrderInfoVo roi = null; //这是通过订单列表上的一条收款记录对应的多个订单中的一个订单
  111. if ("1".equals(relation.getRelationType())) { // relation.orderID 指的是子订单id
  112. roi = cmDiscernReceiptDao.getOrderInfoByShopOrderID(relation.getOrderID());
  113. roi.setRelationType("1");
  114. }
  115. if ("2".equals(relation.getRelationType())) { // relation.orderID 指的是主订单id
  116. roi = cmDiscernReceiptDao.getOrderInfoByOrderID(relation.getOrderID());
  117. roi.setRelationType("2");
  118. }
  119. if (roi != null) {
  120. List<ReceiptRecordVo> receiptRecordByOrderID = cmDiscernReceiptDao.findReceiptRecordByOrderID(roi);
  121. // 暂时不启用抹平明细
  122. if (CollectionUtils.isNotEmpty(receiptRecordByOrderID)) {
  123. for (ReceiptRecordVo v : receiptRecordByOrderID) {
  124. if (StringUtils.equals("3", v.getConfirmType())) {
  125. String id = v.getReceiptID();
  126. double returnBalanceAmount = cmDiscernReceiptDao.getReturnBalanceAmount(id);
  127. v.setReturnBalanceAmount(returnBalanceAmount);
  128. }
  129. //统计当前已收
  130. double associateAmount = cmDiscernReceiptDao.getAssociateAmount(String.valueOf(roi.getOrderID()));
  131. v.setOrderReceivedAmount(associateAmount);
  132. }
  133. }
  134. //一个订单又包含了多个收款记录
  135. roi.setReceiptRecordVo(receiptRecordByOrderID);
  136. orderInfos.add(roi);
  137. }
  138. }
  139. vo.setOrderInfos(orderInfos);
  140. return vo;
  141. }
  142. @Transactional(readOnly = false)
  143. public void cancel(CmDiscernReceipt cmDiscernReceipt, String note) throws Exception {
  144. //receiptType 收款款项类型:1订单款,2非订单款,3返佣款
  145. //1订单款
  146. //撤销前 如果收款记录已经审核 那么要去还原这条收款记录 如果收款记录没有通过审核 那么直接修改收款记录的状态就可以
  147. if ("1".equals(cmDiscernReceipt.getReceiptType())) {
  148. // 先撤销一下收款记录就好了
  149. if ("3".equals(cmDiscernReceipt.getReceiptStatus())) { // 还原订单收款状态
  150. // 找到这个记录关联了那些订单 看看订单除了这一次收款还有没有其他的收款记录 如果有 那么订单会被还原成部分收款
  151. // 如果没有 那么订单就是待收款 注意这里的订单都是主订单
  152. List<String> orderIDs = cmDiscernReceiptDao.findOrderIDs(cmDiscernReceipt.getId());
  153. for (String orderID : orderIDs) {
  154. List<String> records = cmDiscernReceiptDao.hasReceiptRecordOrder(orderID, cmDiscernReceipt.getId()); //订单款项的收款记录
  155. NewOrder order = newOrderDao.get(orderID);
  156. if (CollectionUtils.isEmpty(records) && (order.getBalancePayFee() == null || order.getBalancePayFee() <= 0D)) {
  157. //说明除了现在正在撤销的这一条收款记录 这个订单没有其他的收款记录 就是说 撤销以后这个订单是代付款状态
  158. order.setReceiptStatus("1");
  159. if (order.getStatus().length() == 2) {
  160. order.setStatus("1" + order.getStatus().substring(1, 2));
  161. }
  162. if ("4".equals(order.getStatus()) && "5".equals(order.getStatus())) {
  163. order.setStatus("13");
  164. }
  165. } else {
  166. //反之这个订单就是部分付款状态
  167. order.setReceiptStatus("2");
  168. if (order.getStatus().length() == 2) {
  169. order.setStatus("2" + order.getStatus().substring(1, 2));
  170. }
  171. if ("4".equals(order.getStatus()) && "5".equals(order.getStatus())) {
  172. order.setStatus("23");
  173. }
  174. }
  175. newOrderDao.update(order);
  176. }
  177. }
  178. }
  179. //2非订单款 没有关联订单
  180. // if ("2".equals(cmDiscernReceipt.getReceiptType())) {
  181. //do nothing
  182. // }
  183. //3返佣款
  184. if ("3".equals(cmDiscernReceipt.getReceiptType())) {
  185. // 如果返佣收款记录还在审核中 那么直接修改一下订单状态就好了
  186. if ("2".equals(cmDiscernReceipt.getReceiptStatus())) {
  187. // 如果返佣收款记录还在已经确认了 那么就去看看这笔返佣收款记录关联了那些子订单 然后撤销它们的主订单的收款状态以及付款状态
  188. List<String> shopOrderIDs = cmDiscernReceiptDao.findShopOrderIDs(cmDiscernReceipt.getId());
  189. for (String shopOrderID : shopOrderIDs) {
  190. //records 查询的是 shopOrderID 这个子订单它的兄弟子订单 就是他的主订单下面除了他这个子订单 其他的子订单的返佣收款记录
  191. List<String> records = cmDiscernReceiptDao.hasReceiptRecordShopOrder(shopOrderID, cmDiscernReceipt.getId()); //订单款项的收款记录
  192. NewOrder order = newOrderDao.getOrderByShopOrderID(shopOrderID);
  193. NewShopOrder newShopOrder = newShopOrderDao.get(shopOrderID);
  194. if (CollectionUtils.isEmpty(records) && (order.getBalancePayFee() == null || order.getBalancePayFee() <= 0D)) {
  195. //说明除了现在正在撤销的这一条收款记录 这个订单没有其他的收款记录 就是说 撤销以后这个订单是代付款状态
  196. order.setReceiptStatus("1");
  197. order.setPayStatus("1");
  198. if (order.getStatus().length() == 2) {
  199. order.setStatus("1" + order.getStatus().substring(1, 2));
  200. }
  201. if ("4".equals(order.getStatus()) && "5".equals(order.getStatus())) {
  202. order.setStatus("13");
  203. }
  204. newShopOrder.setPayStatus("1");
  205. } else {
  206. //反之这个订单就是部分付款状态
  207. order.setReceiptStatus("2");
  208. order.setPayStatus("2");
  209. if (order.getStatus().length() == 2) {
  210. order.setStatus("2" + order.getStatus().substring(1, 2));
  211. }
  212. if ("4".equals(order.getStatus()) && "5".equals(order.getStatus())) {
  213. order.setStatus("23");
  214. }
  215. newShopOrder.setPayStatus("2");
  216. }
  217. newOrderDao.update(order);
  218. newShopOrderDao.update(newShopOrder);
  219. }
  220. if ("10".equals(cmDiscernReceipt.getPayType())) {
  221. //是口头返佣 需要扣除供应商返佣的余额 删除返佣欠款记录
  222. CmRebateRecord crr = cmRebateRecordDao.findByReceiptID(cmDiscernReceipt.getId());
  223. NewCmShop newCmShop = newCmShopDao.get(crr.getShopId());
  224. newCmShop.setAbleRebateAmount(newCmShop.getAbleRebateAmount() - crr.getRebateAmount());
  225. newCmShop.setRebateAmount(newCmShop.getRebateAmount() - crr.getRebateAmount());
  226. newCmShopDao.updateAbleRebateAmount(newCmShop);
  227. cmRebateRecordDao.deleteByReceiptID(cmDiscernReceipt.getId());
  228. cmDiscernReceipt.setDelFlag("1");
  229. }
  230. }
  231. }
  232. cmDiscernReceipt.setReceiptStatus("5");
  233. cmDiscernReceipt.setCancelReason(note);
  234. cmDiscernReceipt.setCancelDate(DateUtils.formatDateTime(new Date()));
  235. User currentUser = UserUtils.getUser();
  236. if (StringUtils.isNotBlank(currentUser.getId()))
  237. cmDiscernReceipt.setCancelUserPermissionID(Long.valueOf(currentUser.getId()));
  238. cmDiscernReceiptDao.update(cmDiscernReceipt);
  239. }
  240. public List<CmDiscernReceipt> export(Page<CmDiscernReceipt> page, CmDiscernReceipt cmDiscernReceipt) {
  241. Page<CmDiscernReceipt> result = super.findPage(page, cmDiscernReceipt);
  242. List<CmDiscernReceipt> list = result.getList();
  243. for (CmDiscernReceipt bean : list) {
  244. if ("1".equals(bean.getReceiptType()) || "3".equals(bean.getReceiptType())) {
  245. List<ReceiptExportVo> exportVo = cmDiscernReceiptDao.getExportInfo(bean.getId(), bean.getReceiptType());
  246. bean.setReceiptExportVo(exportVo);
  247. }
  248. }
  249. return list;
  250. }
  251. public List<Integer> getReceiptRecords(Integer shopOrderID) {
  252. return cmDiscernReceiptDao.getReceiptRecords(shopOrderID);
  253. }
  254. public List<CmMainReceiptExport> exportTest(CmDiscernReceipt cmDiscernReceipt) {
  255. List<CmMainReceiptExport> data = cmDiscernReceiptDao.exportTest(cmDiscernReceipt);
  256. return data;
  257. }
  258. public List<CmMainReceiptExport> exportRebate(CmDiscernReceipt cmDiscernReceipt) {
  259. List<CmMainReceiptExport> data = cmDiscernReceiptDao.exportRebate(cmDiscernReceipt);
  260. return data;
  261. }
  262. public List<CmReceiptExport> findShopOrder(String orderID) {
  263. List<CmReceiptExport> data = cmDiscernReceiptDao.findShopOrder(orderID);
  264. return data;
  265. }
  266. public List<CmMainReceiptExport> exportOnlyBalancePay(CmDiscernReceipt cmDiscernReceipt) {
  267. List<CmMainReceiptExport> data = cmDiscernReceiptDao.exportOnlyBalancePay(cmDiscernReceipt);
  268. return data;
  269. }
  270. public List<CmMainReceiptExport> exportReceiptPay(CmDiscernReceipt cmDiscernReceipt) {
  271. List<CmMainReceiptExport> data = cmDiscernReceiptDao.exportReceiptPay(cmDiscernReceipt);
  272. return data;
  273. }
  274. public List<CmMainReceiptExport> exportPay(CmDiscernReceipt cmDiscernReceipt) {
  275. List<CmMainReceiptExport> data = cmDiscernReceiptDao.exportPay(cmDiscernReceipt);
  276. return data;
  277. }
  278. public List<CmMainReceiptExport> exportPayData(CmDiscernReceipt cmDiscernReceipt) {
  279. List<CmMainReceiptExport> data = cmDiscernReceiptDao.exportPayData(cmDiscernReceipt);
  280. return data;
  281. }
  282. public List<CmMainReceiptExport> exportOrderDate(CmDiscernReceipt cmDiscernReceipt) {
  283. List<CmMainReceiptExport> data = cmDiscernReceiptDao.exportOrderDate(cmDiscernReceipt);
  284. return data;
  285. }
  286. public List<CmMainReceiptExport> getListOrder(CmDiscernReceipt cmDiscernReceipt) {
  287. List<CmMainReceiptExport> data = cmDiscernReceiptDao.getListOrder(cmDiscernReceipt);
  288. return data;
  289. }
  290. public List<CmMainReceiptExport> exportPayment(CmDiscernReceipt cmDiscernReceipt) {
  291. List<CmMainReceiptExport> data = cmDiscernReceiptDao.exportPayment(cmDiscernReceipt);
  292. return data;
  293. }
  294. public Double findOrderReceipt(Integer orderID) {
  295. Double receiptAmount = cmDiscernReceiptDao.findOrderReceipt(orderID);
  296. return receiptAmount;
  297. }
  298. public List<CmMainReceiptExport> gathering(Integer orderID) {
  299. List<CmMainReceiptExport> gathering = cmDiscernReceiptDao.gathering(orderID);
  300. return gathering;
  301. }
  302. public List<CmReturnedPurchase> exportRefund(CmDiscernReceipt cmDiscernReceipt) {
  303. List<CmReturnedPurchase> purchases = cmDiscernReceiptDao.exportRefund(cmDiscernReceipt);
  304. return purchases;
  305. }
  306. public List<CmMainReceiptExport> theOrder(CmDiscernReceipt cmDiscernReceipt) {
  307. List<CmMainReceiptExport> list = cmDiscernReceiptDao.theOrder(cmDiscernReceipt);
  308. return list;
  309. }
  310. }