OrderService.java 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933
  1. package com.dk.mdm.service.sale;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  4. import com.dk.common.exception.BaseBusinessException;
  5. import com.dk.common.infrastructure.annotaiton.Pagination;
  6. import com.dk.common.infrastructure.constant.Constant;
  7. import com.dk.common.infrastructure.enums.ErrorCodeEnum;
  8. import com.dk.common.model.pojo.PageList;
  9. import com.dk.common.response.ResponseCodeEnum;
  10. import com.dk.common.response.ResponseResultUtil;
  11. import com.dk.common.response.ResponseResultVO;
  12. import com.dk.mdm.infrastructure.convert.mac.RecPayItemConvert;
  13. import com.dk.mdm.infrastructure.convert.sale.OrderConvert;
  14. import com.dk.mdm.infrastructure.convert.sale.OrderItemConvert;
  15. import com.dk.mdm.infrastructure.convert.sale.OutBoundDtoConvert;
  16. import com.dk.mdm.mapper.common.CommonMapper;
  17. import com.dk.mdm.mapper.mac.AccountItemMapper;
  18. import com.dk.mdm.mapper.mac.RecPayHandleItemMapper;
  19. import com.dk.mdm.mapper.mac.RecPayItemMapper;
  20. import com.dk.mdm.mapper.mac.RecPayMapper;
  21. import com.dk.mdm.mapper.mst.CustomerMapper;
  22. import com.dk.mdm.mapper.mst.MoneyAccountItemMapper;
  23. import com.dk.mdm.mapper.mst.MoneyAccountMapper;
  24. import com.dk.mdm.mapper.sale.MultiOwnerMapper;
  25. import com.dk.mdm.mapper.sale.OrderItemMapper;
  26. import com.dk.mdm.mapper.sale.OrderMapper;
  27. import com.dk.mdm.model.pojo.mac.Account;
  28. import com.dk.mdm.model.pojo.mac.AccountItem;
  29. import com.dk.mdm.model.pojo.mac.RecPay;
  30. import com.dk.mdm.model.pojo.mac.RecPayItem;
  31. import com.dk.mdm.model.pojo.mst.Customer;
  32. import com.dk.mdm.model.pojo.mst.MoneyAccount;
  33. import com.dk.mdm.model.pojo.mst.MoneyAccountItem;
  34. import com.dk.mdm.model.pojo.sale.MultiOwner;
  35. import com.dk.mdm.model.pojo.sale.Order;
  36. import com.dk.common.service.BaseService;
  37. import com.dk.common.mapper.BaseMapper;
  38. import com.dk.mdm.model.pojo.sale.OrderItem;
  39. import com.dk.mdm.model.query.mac.RecPayItemQuery;
  40. import com.dk.mdm.model.query.mac.RecPayQuery;
  41. import com.dk.mdm.model.query.sale.MultiOwnerQuery;
  42. import com.dk.mdm.model.query.sale.OrderItemQuery;
  43. import com.dk.mdm.model.query.sale.OrderQuery;
  44. import com.dk.mdm.model.response.mac.RecPayItemResponse;
  45. import com.dk.mdm.model.response.mac.RecPayResponse;
  46. import com.dk.mdm.model.response.sale.MultiOwnerResponse;
  47. import com.dk.mdm.model.response.sale.OrderItemResponse;
  48. import com.dk.mdm.model.response.sale.OrderResponse;
  49. import com.dk.mdm.model.vo.ivt.OutboundVO;
  50. import com.dk.mdm.model.vo.mac.RecPayItemVO;
  51. import com.dk.mdm.model.vo.sale.OrderItemVO;
  52. import com.dk.mdm.model.vo.sale.OrderVO;
  53. import com.dk.mdm.service.common.CommonService;
  54. import com.dk.mdm.service.ivt.outbound.OutboundSaleOrderService;
  55. import com.dk.mdm.service.mac.AccountService;
  56. import com.dk.mdm.service.mac.RecPayItemService;
  57. import com.dk.mdm.service.mac.ReceiptService;
  58. import com.dk.mdm.service.mst.MoneyAccountService;
  59. import org.springframework.stereotype.Service;
  60. import org.springframework.beans.factory.annotation.Autowired;
  61. import org.springframework.transaction.annotation.Transactional;
  62. import java.math.BigDecimal;
  63. import java.time.LocalDate;
  64. import java.util.*;
  65. import java.util.stream.Collectors;
  66. @Service
  67. @Transactional
  68. public class OrderService extends BaseService<Order> {
  69. @Override
  70. public String getPrimaryKey() {
  71. return "order_id";
  72. }
  73. @Override
  74. public BaseMapper<Order> getRepository() {
  75. return orderMapper;
  76. }
  77. @Autowired
  78. private OrderMapper orderMapper;
  79. @Autowired
  80. private OrderItemService orderItemService;
  81. @Autowired
  82. private OrderItemMapper orderItemMapper;
  83. @Autowired
  84. private CommonService commonService;
  85. @Autowired
  86. private CommonMapper commonMapper;
  87. @Autowired
  88. private CustomerMapper customerMapper;
  89. @Autowired
  90. MultiOwnerMapper multiOwnerMapper;
  91. @Autowired
  92. private RecPayItemService recPayItemService;
  93. @Autowired
  94. ReceiptService receiptService;
  95. @Autowired
  96. private RecPayMapper recPayMapper;
  97. @Autowired
  98. private RecPayItemMapper recPayItemMapper;
  99. @Autowired
  100. private AccountService accountService;
  101. @Autowired
  102. private AccountItemMapper accountItemMapper;
  103. @Autowired
  104. private MoneyAccountService moneyAccountService;
  105. @Autowired
  106. private MoneyAccountMapper moneyAccountMapper;
  107. @Autowired
  108. private MoneyAccountItemMapper moneyAccountItemMapper;
  109. @Autowired
  110. RecPayHandleItemMapper recPayHandleItemMapper;
  111. @Autowired
  112. private OrderConvert orderConvert;
  113. @Autowired
  114. private OrderItemConvert orderItemConvert;
  115. @Autowired
  116. private RecPayItemConvert recPayItemConvert;
  117. @Autowired
  118. private OutboundSaleOrderService outboundSaleOrderService;
  119. @Autowired
  120. private OutBoundDtoConvert outBoundDtoConvert;
  121. /**
  122. * @desc : 条件查询
  123. * @author : 付斌
  124. * @date : 2023/1/9 10:40
  125. */
  126. @Pagination
  127. public ResponseResultVO<PageList<OrderResponse>> selectByCond(OrderQuery orderQuery) {
  128. return super.mergeListWithCount(orderQuery, orderMapper.selectByCond(orderQuery),
  129. orderMapper.countByCondForSelectByCond(orderQuery));
  130. }
  131. /**
  132. * @desc : 条件查询(数量)小程序使用
  133. * @author : 周兴
  134. * @date : 2024/4/10 10:40
  135. */
  136. public ResponseResultVO<?> countByCond(OrderQuery orderQuery) {
  137. return ResponseResultUtil.success(orderMapper.countByCond(orderQuery));
  138. }
  139. /**
  140. * @desc : 以销定采 查询
  141. * @author : 王英杰
  142. * @date : 2023/3/14 10:36
  143. */
  144. @Pagination
  145. public ResponseResultVO<PageList<Map<String, Object>>> purSaleSelectByCond(OrderQuery orderQuery) {
  146. return super.mergeListWithCount(orderQuery, orderMapper.purSaleSelectByCond(orderQuery),
  147. orderMapper.countByCond(orderQuery));
  148. }
  149. /**
  150. * @desc : 查询订单明细(货物、收款、附件)
  151. * @author : 付斌
  152. * @date : 2024-02-28 13:25
  153. */
  154. @Pagination
  155. public ResponseResultVO<Map<String, Object>> selectOrderInfoById(String id) {
  156. Map<String, Object> result = new HashMap<>();
  157. // 商品明细
  158. List<OrderItemResponse> orderItem = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
  159. result.put("orderItem", orderItem);
  160. // 收款明细
  161. List<RecPayResponse> recPayList = recPayMapper.selectByCond(new RecPayQuery().setBiznisId(id).setFlgOrderHandle(false));
  162. if (recPayList != null && recPayList.size() > 0) {
  163. List<RecPayItemResponse> receiptItem = recPayItemMapper.selectByCond(new RecPayItemQuery().setRpId(recPayList.get(0).getRpId()));
  164. result.put("receiptItem", receiptItem);
  165. } else {
  166. result.put("receiptItem", new ArrayList<RecPayResponse>());
  167. }
  168. return ResponseResultUtil.success(result);
  169. }
  170. /**
  171. * @desc : 新建方法
  172. * @author : 付斌
  173. * @date : 2023/1/9 10:49
  174. */
  175. @Transactional(
  176. rollbackFor = {Exception.class}
  177. )
  178. public ResponseResultVO<?> insert(OrderVO orderVO) {
  179. // 如果没有客户id,要新建
  180. if (orderVO.getCusId() == null) {
  181. List<Customer> listCustomer = customerMapper.selectByCond(new Customer().setCpId(orderVO.getCpId()).setCusPhone(orderVO.getCusPhone()));
  182. // 如果客户电话已存在
  183. if (listCustomer.size() > 0) {
  184. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISEXISTS_CUSPHONE.getMessage());
  185. }
  186. // 创建客户,获取编码和主键UuId
  187. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.CUSTOMER.getName(), true);
  188. Customer customer = new Customer();
  189. // 增加跟进人,用于权限分配
  190. List<String> followStaffs = new ArrayList<>();
  191. followStaffs.add(orderVO.getMakeStaff());
  192. customer.setCusId(codeMap.get("outId").toString()).setCusCode(codeMap.get("outNote").toString()).setCusName(orderVO.getCusName())
  193. .setCusPhone(orderVO.getCusPhone()).setAddressArea(orderVO.getAddressArea()).setAddressName(orderVO.getAddressName())
  194. .setAddressNo(orderVO.getAddressNo()).setAddressGcj02(orderVO.getAddressGcj02()).setAddressFull(orderVO.getAddressFull())
  195. .setContactName(orderVO.getContactName()).setContactPhone(orderVO.getContactPhone()).setCusFrom(orderVO.getCusFrom())
  196. .setChannelId(orderVO.getSalesChannel()).setOrgId(orderVO.getOrgId()).setStaffId(orderVO.getStaffId())
  197. .setFollowStaffs(followStaffs)
  198. .setReportStaff(orderVO.getMakeStaff()).setSaleStatus(Constant.SaleStatus.CHENGJIAO.getName()).setCpId(orderVO.getCpId());
  199. customerMapper.insert(customer);
  200. orderVO.setCusId(customer.getCusId());
  201. } else {
  202. // 如果当前跟进人
  203. Customer cus = customerMapper.selectByIdForUpdate(orderVO.getCusId());
  204. List<String> followStaffs = cus.getFollowStaffs();
  205. Boolean updateFollowFlag = false;
  206. if (followStaffs == null) {
  207. followStaffs.add(orderVO.getMakeStaff());
  208. updateFollowFlag = true;
  209. } else {
  210. if (!followStaffs.contains(orderVO.getMakeStaff())) {
  211. followStaffs.add(orderVO.getMakeStaff());
  212. updateFollowFlag = true;
  213. }
  214. }
  215. if (updateFollowFlag) {
  216. // 更新当前跟进人
  217. customerMapper.updateFollowStaffs(new Customer().setCusId(orderVO.getCusId())
  218. .setFollowStaffs(followStaffs));
  219. }
  220. }
  221. // 获取单号
  222. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.ORDER.getName(), false);
  223. orderVO.setOrderId(codeMap.get("outId").toString()).setOrderNo(codeMap.get("outNote").toString())
  224. .setOrderType(Constant.DocumentType.ORDER.getName());
  225. // 转化实体
  226. Order order = orderConvert.convertToPo(orderVO);
  227. // 订单总单保存
  228. super.insert(order);
  229. // 业务部门业绩保存
  230. if (orderVO.getOrgList() != null && orderVO.getOrgList().size() > 0) {
  231. for (Map<String, Object> map : orderVO.getOrgList()) {
  232. MultiOwner multiOwner = new MultiOwner();
  233. multiOwner.setOrderId(order.getOrderId()).setOwnerId(map.get("orgId").toString())
  234. .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(order.getCpId());
  235. if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
  236. multiOwner.setOwnerType(Constant.OwnerType.Z_ORG.getName());
  237. } else {
  238. multiOwner.setOwnerType(Constant.OwnerType.C_ORG.getName());
  239. }
  240. multiOwnerMapper.insert(multiOwner);
  241. }
  242. }
  243. // 业务员业绩保存
  244. if (orderVO.getStaffList() != null && orderVO.getStaffList().size() > 0) {
  245. for (Map<String, Object> map : orderVO.getStaffList()) {
  246. MultiOwner multiOwner = new MultiOwner();
  247. multiOwner.setOrderId(order.getOrderId()).setOwnerId(map.get("staffId").toString())
  248. .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(order.getCpId());
  249. if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
  250. multiOwner.setOwnerType(Constant.OwnerType.Z_STAFF.getName());
  251. } else {
  252. multiOwner.setOwnerType(Constant.OwnerType.C_STAFF.getName());
  253. }
  254. multiOwnerMapper.insert(multiOwner);
  255. }
  256. }
  257. // 订单明细保存
  258. if (orderVO.getItemList() != null && orderVO.getItemList().size() > 0) {
  259. for (OrderItemVO orderItemVO : orderVO.getItemList()) {
  260. OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
  261. orderItem.setOrderId(order.getOrderId()).setCpId(order.getCpId()).setOutStatus(Constant.OutStatus.DAICHUKU.getName());
  262. if( orderItem.getPriceStd()==null){
  263. orderItem.setPriceStd(BigDecimal.ZERO);
  264. }
  265. if( orderItem.getAmtStd()==null){
  266. orderItem.setAmtStd(BigDecimal.ZERO);
  267. }
  268. orderItem.setItemId(UUID.randomUUID().toString());
  269. orderItemMapper.insert(orderItem);
  270. orderItemVO.setItemId(orderItem.getItemId());
  271. }
  272. }
  273. /**************************************** 客户收款begin ********************************/
  274. if (orderVO.getReceiptList() != null && orderVO.getReceiptList().size() > 0) {
  275. // 商户产品版本
  276. String gradeCode = "PRO";
  277. Map<String, Object> paramCompany = new HashMap<>();
  278. paramCompany.put("cpId", orderVO.getCpId());
  279. List<Map<String, Object>> listCompany = commonMapper.getCompany(paramCompany);
  280. if (listCompany.size() > 0) {
  281. gradeCode = listCompany.get(0).get("gradeCode").toString();
  282. }
  283. // 获取单号
  284. codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.RECPAY.getName(), false);
  285. RecPay recPay = new RecPay();
  286. // 专业版有定金
  287. if ("PRO".equals(gradeCode)) {
  288. recPay.setRpId(codeMap.get("outId").toString()).setRpNo(codeMap.get("outNote").toString())
  289. .setRpType(Constant.RpType.SHOU_KUAN.getName()).setObjectId(orderVO.getCusId())
  290. .setOrgId(orderVO.getOrgId()).setStaffId(orderVO.getStaffId()).setAccDate(LocalDate.now())
  291. .setBiznisType(Constant.InventoryDocCode.ORDER.getTableName()).setBiznisId(orderVO.getOrderId()).setBiznisNo(orderVO.getOrderNo())
  292. .setMakeStaff(orderVO.getMakeStaff()).setCpId(orderVO.getCpId()).setFlgLock(true);
  293. // 计算订单明细的出库中数量,金额合计
  294. RecPayItemVO itemSum = orderVO.getReceiptList().stream().reduce((x, y) -> {
  295. RecPayItemVO item = new RecPayItemVO();
  296. item.setAmtRec(x.getAmtRec().add(y.getAmtRec()));
  297. return item;
  298. }).get();
  299. recPay.setSumAmtRec(itemSum.getAmtRec());
  300. // 总单保存
  301. recPayMapper.insert(recPay);
  302. // 明细保存
  303. for (RecPayItemVO recPayItemVO : orderVO.getReceiptList()) {
  304. RecPayItem recPayItem = recPayItemConvert.convertToPo(recPayItemVO);
  305. recPayItem.setRpId(recPay.getRpId()).setCpId(recPay.getCpId()).setMakeStaff(recPay.getMakeStaff()).setAccDate(recPay.getAccDate());
  306. recPayItemMapper.insert(recPayItem);
  307. // 插入账款明细
  308. AccountItem accountItem = new AccountItem();
  309. accountItem.setAccItemType(Constant.accItemType.SHOU_KUAN.getName())
  310. .setObjectId(recPay.getObjectId()).setOrgId(recPay.getOrgId()).setStaffId(recPay.getStaffId())
  311. .setAccDate(recPay.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()).setAmtRec(recPayItem.getAmtRec())
  312. .setBiznisType(Constant.InventoryDocCode.REC_PAY_ITEM.getTableName()).setBiznisId(recPayItem.getItemId()).setBiznisNo(recPay.getRpNo())
  313. .setMakeStaff(recPay.getMakeStaff()).setCpId(recPay.getCpId()).setFlgLock(true);
  314. accountItemMapper.insert(accountItem);
  315. // 更新收款单上的账款明细Id
  316. RecPayItem recPayItemUpdate = new RecPayItem();
  317. recPayItemUpdate.setAccItemId(accountItem.getItemId()).setItemId(recPayItem.getItemId());
  318. recPayItemService.updateByUuid(recPayItemUpdate);
  319. // 插入资金流水
  320. MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
  321. moneyAccountItem.setMacId(recPayItem.getMacId()).setFlowType(Constant.FlowType.SHOU_FU_KUAN.getName())
  322. .setInvoiceId(recPayItem.getItemId()).setAmtInflow(recPayItem.getAmtRec()).setAccDate(recPay.getAccDate())
  323. .setMakeStaff(recPayItem.getMakeStaff()).setCpId(recPayItem.getCpId());
  324. moneyAccountItemMapper.insert(moneyAccountItem);
  325. // 更新资金账户
  326. MoneyAccount moneyAccountForUpdate = moneyAccountMapper.selectByIdForUpdate(recPayItem.getMacId());
  327. MoneyAccount moneyAccountUpdate = new MoneyAccount();
  328. moneyAccountUpdate.setBalance(moneyAccountForUpdate.getBalance().add(recPayItem.getAmtRec()))
  329. .setMacId(moneyAccountForUpdate.getMacId());
  330. moneyAccountService.updateByUuid(moneyAccountUpdate);
  331. }
  332. // 插入账款总表
  333. Account accountForUpdate = accountService.getCusAccountForUpdate(recPay.getObjectId());
  334. // 更新账款总表上收款的相关字段
  335. Account accountUpdate = new Account();
  336. accountUpdate.setReceiptLock(accountForUpdate.getReceiptLock().add(recPay.getSumAmtRec()))// 锁定金额
  337. .setObjectId(accountForUpdate.getObjectId());
  338. accountService.updateByUuid(accountUpdate);
  339. } else if ("STD".equals(gradeCode)) {
  340. recPay.setRpId(codeMap.get("outId").toString()).setRpNo(codeMap.get("outNote").toString())
  341. .setRpType(Constant.RpType.SHOU_KUAN.getName()).setObjectId(orderVO.getCusId())
  342. .setOrgId(orderVO.getOrgId()).setStaffId(orderVO.getStaffId()).setAccDate(LocalDate.now())
  343. .setBiznisType(Constant.InventoryDocCode.ORDER.getTableName()).setBiznisId(orderVO.getOrderId()).setBiznisNo(orderVO.getOrderNo())
  344. .setMakeStaff(orderVO.getMakeStaff()).setCpId(orderVO.getCpId());
  345. // 计算订单明细的出库中数量,金额合计
  346. RecPayItemVO itemSum = orderVO.getReceiptList().stream().reduce((x, y) -> {
  347. RecPayItemVO item = new RecPayItemVO();
  348. item.setAmtRec(x.getAmtRec().add(y.getAmtRec()));
  349. return item;
  350. }).get();
  351. recPay.setSumAmtRec(itemSum.getAmtRec());
  352. // 总单保存
  353. recPayMapper.insert(recPay);
  354. // 明细保存
  355. for (RecPayItemVO recPayItemVO : orderVO.getReceiptList()) {
  356. RecPayItem recPayItem = recPayItemConvert.convertToPo(recPayItemVO);
  357. recPayItem.setRpId(recPay.getRpId()).setCpId(recPay.getCpId()).setMakeStaff(recPay.getMakeStaff()).setAccDate(recPay.getAccDate());
  358. recPayItemMapper.insert(recPayItem);
  359. // 插入账款明细
  360. AccountItem accountItem = new AccountItem();
  361. accountItem.setAccItemType(Constant.accItemType.SHOU_KUAN.getName())
  362. .setObjectId(recPay.getObjectId()).setOrgId(recPay.getOrgId()).setStaffId(recPay.getStaffId())
  363. .setAccDate(recPay.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()).setAmtRec(recPayItem.getAmtRec())
  364. .setBiznisType(Constant.InventoryDocCode.REC_PAY_ITEM.getTableName()).setBiznisId(recPayItem.getItemId()).setBiznisNo(recPay.getRpNo())
  365. .setMakeStaff(recPay.getMakeStaff()).setCpId(recPay.getCpId());
  366. accountItemMapper.insert(accountItem);
  367. // 更新收款单上的账款明细Id
  368. RecPayItem recPayItemUpdate = new RecPayItem();
  369. recPayItemUpdate.setAccItemId(accountItem.getItemId()).setItemId(recPayItem.getItemId());
  370. recPayItemService.updateByUuid(recPayItemUpdate);
  371. // 插入资金流水
  372. MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
  373. moneyAccountItem.setMacId(recPayItem.getMacId()).setFlowType(Constant.FlowType.SHOU_FU_KUAN.getName())
  374. .setInvoiceId(recPayItem.getItemId()).setAmtInflow(recPayItem.getAmtRec()).setAccDate(recPay.getAccDate())
  375. .setMakeStaff(recPayItem.getMakeStaff()).setCpId(recPayItem.getCpId());
  376. moneyAccountItemMapper.insert(moneyAccountItem);
  377. // 更新资金账户
  378. MoneyAccount moneyAccountForUpdate = moneyAccountMapper.selectByIdForUpdate(recPayItem.getMacId());
  379. MoneyAccount moneyAccountUpdate = new MoneyAccount();
  380. moneyAccountUpdate.setBalance(moneyAccountForUpdate.getBalance().add(recPayItem.getAmtRec()))
  381. .setMacId(moneyAccountForUpdate.getMacId());
  382. moneyAccountService.updateByUuid(moneyAccountUpdate);
  383. }
  384. // 插入账款总表
  385. Account accountForUpdate = accountService.getCusAccountForUpdate(recPay.getObjectId());
  386. // 更新账款总表上收款的相关字段
  387. Account accountUpdate = new Account();
  388. accountUpdate.setReceipt(accountForUpdate.getReceipt().add(recPay.getSumAmtRec()))// 总收款金额
  389. .setReceiptResidue(accountForUpdate.getReceiptResidue().add(recPay.getSumAmtRec()))// 可退金额
  390. .setObjectId(accountForUpdate.getObjectId());
  391. accountService.updateByUuid(accountUpdate);
  392. }
  393. }
  394. /**************************************** 客户收款end ********************************/
  395. //开单并出库办理
  396. if (orderVO.getOutboundProcessingFlag() != null && orderVO.getOutboundProcessingFlag()) {
  397. for (OrderItemVO orderItemVO : orderVO.getItemList()) {
  398. orderItemVO.setOutingQty(orderItemVO.getItemQty());
  399. orderItemVO.setOutingAmt(orderItemVO.getItemAmt());
  400. orderItemVO.setPriceOut(orderItemVO.getFactPrice());
  401. orderItemVO.setFromId(orderVO.getOrderId());
  402. orderItemVO.setFromItemId(orderItemVO.getItemId());
  403. }
  404. OutboundVO outboundVO = outBoundDtoConvert.convertToPo(orderVO);
  405. outboundVO.setOutDate(LocalDate.now());
  406. outboundVO.setOutingQty(orderVO.getSumQuantity());
  407. outboundVO.setOutingAmt(orderVO.getFactAmt());
  408. outboundVO.setFlgAutoHandle(orderVO.getFlgAutoHandle());
  409. outboundVO.setFlgHandleSetting(orderVO.getFlgHandleSetting());
  410. outboundVO.setFromId(order.getOrderId());
  411. outboundVO.setFromNo(order.getOrderNo());
  412. outboundVO.setOutDate(orderVO.getDeliveryDate());
  413. outboundVO.setFactAmt(orderVO.getFactAmt());
  414. outboundVO.setDiscount(orderVO.getDiscount());
  415. outboundVO.setDiscAmt(orderVO.getDiscAmt());
  416. outboundVO.setSumAmount(orderVO.getSumAmount());
  417. outboundSaleOrderService.inventoryOUtBond(outboundVO);
  418. }
  419. return ResponseResultUtil.success();
  420. }
  421. /**
  422. * @desc : 编辑方法
  423. * @author : 付斌
  424. * @date : 2023/1/9 10:49
  425. */
  426. @Transactional(
  427. rollbackFor = {Exception.class}
  428. )
  429. public ResponseResultVO<?> update(OrderVO orderVO) {
  430. Order orderForUpdate = orderMapper.selectByIdForUpdate(orderVO.getOrderId());
  431. // 并发校验
  432. if (!orderForUpdate.getFlgValid()) {
  433. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
  434. }
  435. // 如果全部出库了
  436. if (orderForUpdate.getSumQuantity().compareTo(orderForUpdate.getOutQty()) == 0) {
  437. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORDER_IS_OUT.getMessage());
  438. }
  439. // 明细实体(避免并发,需要再查一遍)
  440. OrderItem orderItemForUpdate;
  441. // 转化实体
  442. Order order = orderConvert.convertToPo(orderVO);
  443. //删除的
  444. if (orderVO.getDeleteItemList() != null) {
  445. List<OrderItemVO> deleteOrderItemVOList = orderVO.getDeleteItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
  446. if (deleteOrderItemVOList.size() > 0) {
  447. for (OrderItemVO orderItemVO : deleteOrderItemVOList) {
  448. orderItemForUpdate = orderItemMapper.selectByIdForUpdate(orderItemVO.getItemId());
  449. // 非待出库单据不能删除
  450. if (!Constant.OutStatus.DAICHUKU.getName().equals(orderItemForUpdate.getOutStatus())) {
  451. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.NO_WAIT_INTO.getMessage());
  452. } else {
  453. orderItemMapper.deleteById(orderItemVO.getItemId());
  454. }
  455. }
  456. }
  457. }
  458. // 新增的
  459. List<OrderItemVO> insertOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() == null).collect(Collectors.toList());
  460. for (OrderItemVO orderItemVO : insertOrderItemVOList) {
  461. OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
  462. orderItem.setOrderId(order.getOrderId()).setCpId(order.getCpId()).setOutStatus(Constant.OutStatus.DAICHUKU.getName());
  463. orderItemMapper.insert(orderItem);
  464. }
  465. // 编辑的
  466. List<OrderItemVO> editOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
  467. for (OrderItemVO orderItemVO : editOrderItemVOList) {
  468. orderItemForUpdate = orderItemMapper.selectByIdForUpdate(orderItemVO.getItemId());
  469. // 出库数量
  470. BigDecimal outintOrOutQty = orderItemForUpdate.getOutingQty().add(orderItemForUpdate.getOutQty());
  471. // 商品数量不能小于(出库中数量+已出库数量)
  472. if (orderItemVO.getItemQty().compareTo(outintOrOutQty) == -1) {
  473. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
  474. }
  475. // 如果出库数量不是0,则不能改仓库
  476. if (outintOrOutQty.compareTo(BigDecimal.ZERO) != 0) {
  477. if (!orderItemForUpdate.getWhId().equals(orderItemVO.getWhId())) {
  478. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORDER_ISOUT.getMessage());
  479. }
  480. }
  481. OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
  482. orderItemService.updateByUuid(orderItem);
  483. }
  484. // 删除业绩信息
  485. multiOwnerMapper.deleteByOrderId(order.getOrderId());
  486. // 重新保存业绩信息
  487. // 业务部门业绩保存
  488. if (orderVO.getOrgList() != null && orderVO.getOrgList().size() > 0) {
  489. for (Map<String, Object> map : orderVO.getOrgList()) {
  490. MultiOwner multiOwner = new MultiOwner();
  491. multiOwner.setOrderId(order.getOrderId()).setOwnerId(map.get("orgId").toString())
  492. .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(order.getCpId());
  493. if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
  494. multiOwner.setOwnerType(Constant.OwnerType.Z_ORG.getName());
  495. } else {
  496. multiOwner.setOwnerType(Constant.OwnerType.C_ORG.getName());
  497. }
  498. multiOwnerMapper.insert(multiOwner);
  499. }
  500. }
  501. // 业务员业绩保存
  502. if (orderVO.getStaffList() != null && orderVO.getStaffList().size() > 0) {
  503. for (Map<String, Object> map : orderVO.getStaffList()) {
  504. MultiOwner multiOwner = new MultiOwner();
  505. multiOwner.setOrderId(order.getOrderId()).setOwnerId(map.get("staffId").toString())
  506. .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(order.getCpId());
  507. if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
  508. multiOwner.setOwnerType(Constant.OwnerType.Z_STAFF.getName());
  509. } else {
  510. multiOwner.setOwnerType(Constant.OwnerType.C_STAFF.getName());
  511. }
  512. multiOwnerMapper.insert(multiOwner);
  513. }
  514. }
  515. // 更新总单
  516. super.update(order, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
  517. UUID.fromString(order.getOrderId())));
  518. /**************************************** 客户收款begin ********************************/
  519. // 需要重新计算的资金账户
  520. List<String> macList = new ArrayList<>();
  521. // 收款明细
  522. RecPay recPayForUpdate = recPayMapper.selectByBiznisIdForUpdate(orderVO.getOrderId(), false);
  523. if (recPayForUpdate != null) {
  524. // 将之前的明细全部删除
  525. List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(recPayForUpdate.getRpId());
  526. for (RecPayItem recPayItem : recPayItemOriginalList) {
  527. // 删除收付款明细
  528. recPayItemMapper.deleteById(recPayItem.getItemId());
  529. // 删除账款明细
  530. accountItemMapper.deleteById(recPayItem.getAccItemId());
  531. // 删除账户流水
  532. moneyAccountItemMapper.deleteByInvoiceId(recPayItem.getItemId());
  533. if (!macList.contains(recPayItem.getMacId())) {
  534. macList.add(recPayItem.getMacId());
  535. }
  536. }
  537. }
  538. // 商户产品版本
  539. String gradeCode = "PRO";
  540. Map<String, Object> paramCompany = new HashMap<>();
  541. paramCompany.put("cpId", orderVO.getCpId());
  542. List<Map<String, Object>> listCompany = commonMapper.getCompany(paramCompany);
  543. if (listCompany.size() > 0) {
  544. gradeCode = listCompany.get(0).get("gradeCode").toString();
  545. }
  546. // 专业版有定金
  547. if ("PRO".equals(gradeCode)) {
  548. if (orderVO.getReceiptList() != null && orderVO.getReceiptList().size() > 0) {
  549. // 计算订单明细的出库中数量,金额合计
  550. RecPayItemVO itemSum = orderVO.getReceiptList().stream().reduce((x, y) -> {
  551. RecPayItemVO item = new RecPayItemVO();
  552. item.setAmtRec(x.getAmtRec().add(y.getAmtRec()));
  553. return item;
  554. }).get();
  555. RecPay recPay = null;
  556. if (recPayForUpdate == null) {
  557. recPay = new RecPay();
  558. // 获取单号
  559. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.RECPAY.getName(), false);
  560. recPay.setRpId(codeMap.get("outId").toString()).setRpNo(codeMap.get("outNote").toString())
  561. .setRpType(Constant.RpType.SHOU_KUAN.getName()).setObjectId(orderVO.getCusId())
  562. .setOrgId(orderVO.getOrgId()).setStaffId(orderVO.getStaffId()).setAccDate(LocalDate.now())
  563. .setBiznisType(Constant.InventoryDocCode.ORDER.getTableName()).setBiznisId(orderVO.getOrderId()).setBiznisNo(orderVO.getOrderNo())
  564. .setMakeStaff(orderVO.getMakeStaff()).setCpId(orderVO.getCpId()).setFlgLock(true);
  565. recPay.setSumAmtRec(itemSum.getAmtRec());
  566. recPayMapper.insert(recPay);
  567. } else {
  568. // 更新收款总额
  569. RecPay recPayUpdate = new RecPay();
  570. recPayUpdate.setSumAmtRec(itemSum.getAmtRec()).setRpId(recPayForUpdate.getRpId());
  571. receiptService.updateByUuid(recPayUpdate);
  572. // 赋值recPay,下面要用
  573. recPay = recPayForUpdate;
  574. }
  575. // 明细保存
  576. for (RecPayItemVO recPayItemVO : orderVO.getReceiptList()) {
  577. RecPayItem recPayItem = recPayItemConvert.convertToPo(recPayItemVO);
  578. recPayItem.setItemId(null).setRpId(recPay.getRpId()).setCpId(recPay.getCpId()).setMakeStaff(recPay.getMakeStaff()).setAccDate(recPay.getAccDate());
  579. recPayItemMapper.insert(recPayItem);
  580. // 插入账款明细
  581. AccountItem accountItem = new AccountItem();
  582. accountItem.setAccItemType(Constant.accItemType.SHOU_KUAN.getName())
  583. .setObjectId(recPay.getObjectId()).setOrgId(recPay.getOrgId()).setStaffId(recPay.getStaffId())
  584. .setAccDate(recPay.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()).setAmtRec(recPayItem.getAmtRec())
  585. .setBiznisType(Constant.InventoryDocCode.REC_PAY_ITEM.getTableName()).setBiznisId(recPayItem.getItemId()).setBiznisNo(recPay.getRpNo())
  586. .setMakeStaff(recPay.getMakeStaff()).setCpId(recPay.getCpId()).setFlgLock(true);
  587. accountItemMapper.insert(accountItem);
  588. // 更新收款单上的账款明细Id
  589. RecPayItem recPayItemUpdate = new RecPayItem();
  590. recPayItemUpdate.setAccItemId(accountItem.getItemId()).setItemId(recPayItem.getItemId());
  591. recPayItemService.updateByUuid(recPayItemUpdate);
  592. // 插入资金流水
  593. MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
  594. moneyAccountItem.setMacId(recPayItem.getMacId()).setFlowType(Constant.FlowType.SHOU_FU_KUAN.getName())
  595. .setInvoiceId(recPayItem.getItemId()).setAmtInflow(recPayItem.getAmtRec()).setAccDate(recPay.getAccDate())
  596. .setMakeStaff(recPayItem.getMakeStaff()).setCpId(recPayItem.getCpId());
  597. moneyAccountItemMapper.insert(moneyAccountItem);
  598. if (!macList.contains(recPayItem.getMacId())) {
  599. macList.add(recPayItem.getMacId());
  600. }
  601. }
  602. }
  603. if (recPayForUpdate != null) {
  604. // 更新总账表的锁定金额
  605. accountService.updateReceiptLock(recPayForUpdate.getObjectId());
  606. }
  607. } else if ("STD".equals(gradeCode)) {
  608. if (orderVO.getReceiptList() != null && orderVO.getReceiptList().size() > 0) {
  609. // 计算订单明细的出库中数量,金额合计
  610. RecPayItemVO itemSum = orderVO.getReceiptList().stream().reduce((x, y) -> {
  611. RecPayItemVO item = new RecPayItemVO();
  612. item.setAmtRec(x.getAmtRec().add(y.getAmtRec()));
  613. return item;
  614. }).get();
  615. RecPay recPay = null;
  616. if (recPayForUpdate == null) {
  617. recPay = new RecPay();
  618. // 获取单号
  619. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.RECPAY.getName(), false);
  620. recPay.setRpId(codeMap.get("outId").toString()).setRpNo(codeMap.get("outNote").toString())
  621. .setRpType(Constant.RpType.SHOU_KUAN.getName()).setObjectId(orderVO.getCusId())
  622. .setOrgId(orderVO.getOrgId()).setStaffId(orderVO.getStaffId()).setAccDate(LocalDate.now())
  623. .setBiznisType(Constant.InventoryDocCode.ORDER.getTableName()).setBiznisId(orderVO.getOrderId()).setBiznisNo(orderVO.getOrderNo())
  624. .setMakeStaff(orderVO.getMakeStaff()).setCpId(orderVO.getCpId());
  625. recPay.setSumAmtRec(itemSum.getAmtRec());
  626. recPayMapper.insert(recPay);
  627. } else {
  628. // 更新收款总额
  629. RecPay recPayUpdate = new RecPay();
  630. recPayUpdate.setSumAmtRec(itemSum.getAmtRec()).setRpId(recPayForUpdate.getRpId());
  631. receiptService.updateByUuid(recPayUpdate);
  632. // 赋值recPay,下面要用
  633. recPay = recPayForUpdate;
  634. }
  635. // 明细保存
  636. for (RecPayItemVO recPayItemVO : orderVO.getReceiptList()) {
  637. RecPayItem recPayItem = recPayItemConvert.convertToPo(recPayItemVO);
  638. recPayItem.setItemId(null).setRpId(recPay.getRpId()).setCpId(recPay.getCpId()).setMakeStaff(recPay.getMakeStaff()).setAccDate(recPay.getAccDate());
  639. recPayItemMapper.insert(recPayItem);
  640. // 插入账款明细
  641. AccountItem accountItem = new AccountItem();
  642. accountItem.setAccItemType(Constant.accItemType.SHOU_KUAN.getName())
  643. .setObjectId(recPay.getObjectId()).setOrgId(recPay.getOrgId()).setStaffId(recPay.getStaffId())
  644. .setAccDate(recPay.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()).setAmtRec(recPayItem.getAmtRec())
  645. .setBiznisType(Constant.InventoryDocCode.REC_PAY_ITEM.getTableName()).setBiznisId(recPayItem.getItemId()).setBiznisNo(recPay.getRpNo())
  646. .setMakeStaff(recPay.getMakeStaff()).setCpId(recPay.getCpId());
  647. accountItemMapper.insert(accountItem);
  648. // 更新收款单上的账款明细Id
  649. RecPayItem recPayItemUpdate = new RecPayItem();
  650. recPayItemUpdate.setAccItemId(accountItem.getItemId()).setItemId(recPayItem.getItemId());
  651. recPayItemService.updateByUuid(recPayItemUpdate);
  652. // 插入资金流水
  653. MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
  654. moneyAccountItem.setMacId(recPayItem.getMacId()).setFlowType(Constant.FlowType.SHOU_FU_KUAN.getName())
  655. .setInvoiceId(recPayItem.getItemId()).setAmtInflow(recPayItem.getAmtRec()).setAccDate(recPay.getAccDate())
  656. .setMakeStaff(recPayItem.getMakeStaff()).setCpId(recPayItem.getCpId());
  657. moneyAccountItemMapper.insert(moneyAccountItem);
  658. if (!macList.contains(recPayItem.getMacId())) {
  659. macList.add(recPayItem.getMacId());
  660. }
  661. }
  662. }
  663. if (recPayForUpdate != null) {
  664. // 更新总账表的总收款额和可用额
  665. accountService.updateReceipt(recPayForUpdate.getObjectId());
  666. }
  667. }
  668. // 更新账户余额
  669. for (String macId : macList) {
  670. accountService.updateMac(macId);
  671. }
  672. /**************************************** 客户收款end ********************************/
  673. return ResponseResultUtil.success();
  674. }
  675. /**
  676. * @desc : 作废
  677. * @author : 付斌
  678. * @date : 2024-03-08 16:38
  679. */
  680. public ResponseResultVO<?> invalid(String id) {
  681. Order orderForUpdate = orderMapper.selectByIdForUpdate(id);
  682. // 并发校验
  683. if (!orderForUpdate.getFlgValid()) {
  684. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
  685. }
  686. // 如果出库中数量或已出库数量不是0,不能作废
  687. if (orderForUpdate.getOutingQty().compareTo(BigDecimal.ZERO) != 0 || orderForUpdate.getOutQty().compareTo(BigDecimal.ZERO) != 0) {
  688. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISEXISTS_AFTER_OPERATE.getMessage());
  689. }
  690. // 作废
  691. Order orderUpdate = new Order();
  692. orderUpdate.setFlgValid(false).setOrderId(id);
  693. super.update(orderUpdate, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
  694. UUID.fromString(orderUpdate.getOrderId())));
  695. // 需要重新计算的资金账户
  696. List<String> macList = new ArrayList<>();
  697. // 收款明细
  698. RecPay recPayForUpdate = recPayMapper.selectByBiznisIdForUpdate(id, false);
  699. if (recPayForUpdate != null) {
  700. // 将之前的明细全部删除
  701. List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(recPayForUpdate.getRpId());
  702. for (RecPayItem recPayItem : recPayItemOriginalList) {
  703. // 删除收付款明细
  704. recPayItemMapper.deleteById(recPayItem.getItemId());
  705. // 删除账款明细
  706. accountItemMapper.deleteById(recPayItem.getAccItemId());
  707. // 删除账户流水
  708. moneyAccountItemMapper.deleteByInvoiceId(recPayItem.getItemId());
  709. if (!macList.contains(recPayItem.getMacId())) {
  710. macList.add(recPayItem.getMacId());
  711. }
  712. }
  713. // 更新总账表的总收款额和可用额
  714. accountService.updateReceiptLock(recPayForUpdate.getObjectId());
  715. // 更新账户余额
  716. for (String macId : macList) {
  717. accountService.updateMac(macId);
  718. }
  719. // 作废
  720. RecPay recPayUpdate = new RecPay();
  721. recPayUpdate.setFlgValid(false).setRpId(id);
  722. receiptService.updateByUuid(recPayUpdate);
  723. }
  724. return ResponseResultUtil.success();
  725. }
  726. /**
  727. * @desc : 获取订单信息(编辑用)
  728. * @author : 付斌
  729. * @date : 2024-03-02 17:27
  730. */
  731. public ResponseResultVO<?> getOrderForUpdate(String id) {
  732. Map<String, Object> dataInfo = new HashMap<>();
  733. OrderResponse orderResponse = orderMapper.selectById(id);
  734. dataInfo.put("data", orderResponse);
  735. // 商品明细
  736. List<OrderItemResponse> orderItemResponse = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
  737. dataInfo.put("dataItem", orderItemResponse);
  738. //查询主从业务员
  739. List<String> staffList = new ArrayList<>();
  740. staffList.add(Constant.OwnerType.Z_STAFF.getName());
  741. staffList.add(Constant.OwnerType.C_STAFF.getName());
  742. List<MultiOwnerResponse> multiOwnersStaff = multiOwnerMapper.selectByType(new MultiOwnerQuery().setOrderId(id).setOwnerTypes(staffList));
  743. if (multiOwnersStaff != null && multiOwnersStaff.size() > 0) {
  744. dataInfo.put("staffList", multiOwnersStaff);
  745. }
  746. //查询主从业务部门
  747. List<String> orgList = new ArrayList<>();
  748. orgList.add(Constant.OwnerType.Z_ORG.getName());
  749. orgList.add(Constant.OwnerType.C_ORG.getName());
  750. List<MultiOwnerResponse> multiOwnersOrg = multiOwnerMapper.selectByType(new MultiOwnerQuery().setOrderId(id).setOwnerTypes(orgList));
  751. if (multiOwnersOrg != null && multiOwnersOrg.size() > 0) {
  752. dataInfo.put("orgList", multiOwnersOrg);
  753. }
  754. // 获取实收金额
  755. Map<String, Object> mapFactReceipt = orderMapper.getFactReceipt(id);
  756. orderResponse.setAmtFactReceipt(new BigDecimal(mapFactReceipt.get("sumFactReceipt").toString()));
  757. // 收款明细
  758. List<RecPayResponse> recPayList = recPayMapper.selectByCond(new RecPayQuery().setBiznisId(id).setFlgOrderHandle(false));
  759. if (recPayList != null && recPayList.size() > 0) {
  760. // 如果有定金,实收金额加上定金
  761. if (recPayList.get(0).getFlgLock()) {
  762. orderResponse.setAmtFactReceipt(orderResponse.getAmtFactReceipt().add(recPayList.get(0).getSumAmtRec()));
  763. }
  764. List<RecPayItemResponse> receiptItem = recPayItemMapper.selectByCond(new RecPayItemQuery().setRpId(recPayList.get(0).getRpId()));
  765. dataInfo.put("receiptItem", receiptItem);
  766. } else {
  767. dataInfo.put("receiptItem", new ArrayList<RecPayResponse>());
  768. }
  769. return ResponseResultUtil.success(dataInfo);
  770. }
  771. /**
  772. * @desc : 获取订单信息(出库用)
  773. * @author : 付斌
  774. * @date : 2024-03-02 17:27
  775. */
  776. public ResponseResultVO<?> getOrderForOut(String id) {
  777. Map<String, Object> dataInfo = new HashMap<>();
  778. OrderResponse orderResponse = orderMapper.selectById(id);
  779. dataInfo.put("data", orderResponse);
  780. // 商品明细
  781. List<OrderItemResponse> orderItem = orderItemMapper.selectByCondForOut(new OrderItemQuery().setOrderId(id));
  782. dataInfo.put("dataItem", orderItem);
  783. return ResponseResultUtil.success(dataInfo);
  784. }
  785. /**
  786. * @desc : 获取订单信息(退货用)
  787. * @author : 付斌
  788. * @date : 2024-03-02 17:27
  789. */
  790. public ResponseResultVO<?> getOrderForReturn(String id) {
  791. Map<String, Object> dataInfo = new HashMap<>();
  792. OrderResponse orderResponse = orderMapper.selectById(id);
  793. // 数量金额取反
  794. orderResponse.setSumQuantity(orderResponse.getSumQuantity().negate()).setSumAmount(orderResponse.getSumAmount().negate());
  795. dataInfo.put("data", orderResponse);
  796. // 商品明细
  797. List<OrderItemResponse> orderItem = orderItemMapper.selectByCondForReturn(new OrderItemQuery().setOrderId(id));
  798. dataInfo.put("dataItem", orderItem);
  799. return ResponseResultUtil.success(dataInfo);
  800. }
  801. /**
  802. * @desc : 条件查询(总单带明细)
  803. * @author : 于继渤
  804. * @date : 2023/1/9 10:36
  805. */
  806. @Pagination
  807. public ResponseResultVO<PageList<OrderResponse>> selectTotalSingleTapeDetailPage(OrderQuery orderQuery) {
  808. return super.mergeListWithCount(orderQuery, orderMapper.selectByCondDetail(orderQuery),
  809. orderMapper.countByCondDetail(orderQuery));
  810. }
  811. /**
  812. * @desc : 销售跟踪报表
  813. * @author : 宋扬
  814. * @date : 2024/4/24 17:17
  815. */
  816. public ResponseResultVO<PageList> getOrderTrackReport(Map<String, Object> param) {
  817. // 获取组合商品
  818. Map<String, Object> map = orderMapper.getOrderTrackReport(param);
  819. JSONObject sku = JSONObject.parseObject(map.get("f_query_ord_for_track").toString());
  820. // 定义返回值
  821. PageList data = new PageList<>();
  822. List dataList = sku.get("data") != null ? JSONObject.parseArray(sku.get("data").toString()).toJavaList(Map.class) : new ArrayList();
  823. // 组装返回值
  824. data.setList(dataList);
  825. return ResponseResultUtil.success(data);
  826. }
  827. }