OrderService.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. package com.dk.mdm.service.sale;
  2. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  3. import com.dk.common.exception.BaseBusinessException;
  4. import com.dk.common.infrastructure.annotaiton.Pagination;
  5. import com.dk.common.infrastructure.constant.Constant;
  6. import com.dk.common.infrastructure.enums.ErrorCodeEnum;
  7. import com.dk.common.model.pojo.PageList;
  8. import com.dk.common.response.ResponseCodeEnum;
  9. import com.dk.common.response.ResponseResultUtil;
  10. import com.dk.common.response.ResponseResultVO;
  11. import com.dk.mdm.infrastructure.convert.sale.OrderConvert;
  12. import com.dk.mdm.infrastructure.convert.sale.OrderItemConvert;
  13. import com.dk.mdm.mapper.mst.CustomerMapper;
  14. import com.dk.mdm.mapper.sale.OrderItemMapper;
  15. import com.dk.mdm.mapper.sale.OrderMapper;
  16. import com.dk.mdm.model.pojo.mst.Customer;
  17. import com.dk.mdm.model.pojo.sale.Order;
  18. import com.dk.common.service.BaseService;
  19. import com.dk.common.mapper.BaseMapper;
  20. import com.dk.mdm.model.pojo.sale.OrderItem;
  21. import com.dk.mdm.model.query.sale.OrderItemQuery;
  22. import com.dk.mdm.model.query.sale.OrderQuery;
  23. import com.dk.mdm.model.response.sale.OrderItemResponse;
  24. import com.dk.mdm.model.response.sale.OrderResponse;
  25. import com.dk.mdm.model.vo.sale.OrderItemVO;
  26. import com.dk.mdm.model.vo.sale.OrderVO;
  27. import com.dk.mdm.service.common.CommonService;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import java.util.*;
  32. import java.util.stream.Collectors;
  33. @Service
  34. @Transactional
  35. public class OrderService extends BaseService<Order> {
  36. @Override
  37. public String getPrimaryKey() {
  38. return "order_id";
  39. }
  40. @Override
  41. public BaseMapper<Order> getRepository() {
  42. return orderMapper;
  43. }
  44. @Autowired
  45. private OrderMapper orderMapper;
  46. @Autowired
  47. private OrderConvert orderConvert;
  48. @Autowired
  49. private OrderItemConvert orderItemConvert;
  50. @Autowired
  51. private OrderItemService orderItemService;
  52. @Autowired
  53. private OrderItemMapper orderItemMapper;
  54. @Autowired
  55. private CommonService commonService;
  56. @Autowired
  57. private CustomerMapper customerMapper;
  58. /**
  59. * @desc : 条件查询
  60. * @author : 付斌
  61. * @date : 2023/1/9 10:40
  62. */
  63. @Pagination
  64. public ResponseResultVO<PageList<OrderResponse>> selectByCond(OrderQuery orderQuery) {
  65. return super.mergeListWithCount(orderQuery, orderMapper.selectByCond(orderQuery),
  66. orderMapper.countByCond(orderQuery));
  67. }
  68. /**
  69. * @desc : 查询订单明细(货物、收款、附件)
  70. * @author : 付斌
  71. * @date : 2024-02-28 13:25
  72. */
  73. @Pagination
  74. public ResponseResultVO<Map<String, Object>> selectOrderItemById(String id) {
  75. Map<String, Object> result = new HashMap<>();
  76. // 商品明细
  77. List<OrderItemResponse> orderItem = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
  78. result.put("orderItem", orderItem);
  79. // 收款
  80. // 附件
  81. return ResponseResultUtil.success(result);
  82. }
  83. /**
  84. * @desc : 新建方法
  85. * @author : 付斌
  86. * @date : 2023/1/9 10:49
  87. */
  88. @Transactional(
  89. rollbackFor = {Exception.class}
  90. )
  91. public ResponseResultVO<?> insert(OrderVO orderVO) {
  92. // 如果没有客户id,要新建
  93. if (orderVO.getCusId() == null) {
  94. List<Customer> listCustomer = customerMapper.selectByCond(new Customer().setCpId(orderVO.getCpId()).setCusPhone(orderVO.getCusPhone()));
  95. // 如果客户电话已存在
  96. if (listCustomer.size() > 0) {
  97. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISEXISTS_CUSPHONE.getMessage());
  98. }
  99. // 创建客户,获取编码和主键UuId
  100. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.CUSTOMER.getName(), true);
  101. Customer customer = new Customer();
  102. customer.setCusId(codeMap.get("outId").toString()).setCusCode(codeMap.get("outNote").toString()).setCusName(orderVO.getCusName())
  103. .setCusPhone(orderVO.getCusPhone()).setAddressArea(orderVO.getAddressArea()).setAddressName(orderVO.getAddressName())
  104. .setAddressNo(orderVO.getAddressNo()).setAddressGcj02(orderVO.getAddressGcj02()).setAddressFull(orderVO.getAddressFull())
  105. .setContactName(orderVO.getContactName()).setContactPhone(orderVO.getContactPhone()).setCusFrom(orderVO.getCusFrom())
  106. .setChannelId(orderVO.getSalesChannel()).setOrgId(orderVO.getOrgId()).setStaffId(orderVO.getStaffId())
  107. .setReportStaff(orderVO.getMakeStaff()).setSaleStatus(Constant.SaleStatus.CHENGJIAO.getName()).setCpId(orderVO.getCpId());
  108. customerMapper.insert(customer);
  109. orderVO.setCusId(customer.getCusId());
  110. }
  111. // 获取单号
  112. Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.ORDER.getName(),false);
  113. orderVO.setOrderId(codeMap.get("outId").toString()).setOrderNo(codeMap.get("outNote").toString())
  114. .setOrderType(Constant.DocumentType.ORDER_CHASE.getName());
  115. // 转化实体
  116. Order order = orderConvert.convertToPo(orderVO);
  117. // 订单总单保存
  118. super.insert(order);
  119. // // 更新单号
  120. // Order updateOrder = new Order();
  121. // updateOrder.setOrderNo(commonMapper.getDocNo(order.getCpId(), order.getOrderId(), Constant.DocumentType.ORDER_CHASE.getName()));
  122. // updateOrder.setOrderId(order.getOrderId());
  123. // super.update(updateOrder,new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
  124. // UUID.fromString(updateOrder.getOrderId())));
  125. // 订单明细保存
  126. if (orderVO.getItemList() != null && orderVO.getItemList().size() > 0) {
  127. for (OrderItemVO orderItemVO : orderVO.getItemList()) {
  128. OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
  129. orderItem.setOrderId(order.getOrderId()).setCpId(order.getCpId()).setOutStatus(Constant.OutStatus.DAICHUKU.getName());
  130. orderItemMapper.insert(orderItem);
  131. }
  132. }
  133. return ResponseResultUtil.success();
  134. }
  135. /**
  136. * @desc : 获取订单信息(编辑用)
  137. * @author : 付斌
  138. * @date : 2024-03-02 17:27
  139. */
  140. public ResponseResultVO<?> getOrderForUpdate(String id) {
  141. Map<String, Object> orderInfo = new HashMap<>();
  142. OrderResponse orderResponse = orderMapper.selectById(id);
  143. orderInfo.put("order", orderResponse);
  144. // 商品明细
  145. List<OrderItemResponse> orderItem = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
  146. orderInfo.put("orderItem", orderItem);
  147. return ResponseResultUtil.success(orderInfo);
  148. }
  149. /**
  150. * @desc : 编辑方法
  151. * @author : 付斌
  152. * @date : 2023/1/9 10:49
  153. */
  154. @Transactional(
  155. rollbackFor = {Exception.class}
  156. )
  157. public ResponseResultVO<Boolean> update(OrderVO orderVO) {
  158. // 转化实体
  159. Order order = orderConvert.convertToPo(orderVO);
  160. //删除的
  161. List<OrderItemVO> deleteOrderItemVOList = orderVO.getDeleteItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
  162. if(deleteOrderItemVOList.size() > 0){
  163. for (OrderItemVO orderItemVO : deleteOrderItemVOList) {
  164. // 非待出库单据不能删除
  165. if(!Constant.OutStatus.DAICHUKU.getName().equals(orderItemVO.getOutStatus())){
  166. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.NO_WAIT_INTO.getMessage());
  167. } else {
  168. orderItemMapper.deleteById(orderItemVO.getItemId());
  169. }
  170. }
  171. }
  172. // 编辑的(包括新增的)
  173. // 新增的
  174. List<OrderItemVO> insertOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() == null).collect(Collectors.toList());
  175. for (OrderItemVO orderItemVO : insertOrderItemVOList) {
  176. OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
  177. orderItem.setOrderId(order.getOrderId()).setCpId(order.getCpId()).setOutStatus(Constant.OutStatus.DAICHUKU.getName());
  178. orderItemMapper.insert(orderItem);
  179. }
  180. // 编辑的
  181. List<OrderItemVO> editOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
  182. for (OrderItemVO orderItemVO : editOrderItemVOList) {
  183. // 商品数量不能小于出库中数量
  184. if(orderItemVO.getItemQty().compareTo(orderItemVO.getOutingQty()) == -1){
  185. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
  186. } else {
  187. OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
  188. orderItemService.updateByUuid(orderItem);
  189. }
  190. }
  191. return ResponseResultUtil.success(super.update(order, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
  192. UUID.fromString(order.getOrderId()))));
  193. }
  194. /**
  195. * @desc : 获取订单信息(编辑用)
  196. * @author : 付斌
  197. * @date : 2024-03-02 17:27
  198. */
  199. public ResponseResultVO<?> getOrderForOut(String id) {
  200. Map<String, Object> orderInfo = new HashMap<>();
  201. OrderResponse orderResponse = orderMapper.selectById(id);
  202. orderInfo.put("order", orderResponse);
  203. // 商品明细
  204. List<OrderItemResponse> orderItem = orderItemMapper.selectByCondForOut(new OrderItemQuery().setOrderId(id));
  205. orderInfo.put("orderItem", orderItem);
  206. return ResponseResultUtil.success(orderInfo);
  207. }
  208. }