PurchaseService.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package com.dk.mdm.service.pur;
  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.pur.PurChaseConvert;
  12. import com.dk.mdm.infrastructure.convert.pur.PurChaseItemConvert;
  13. import com.dk.mdm.mapper.common.CommonMapper;
  14. import com.dk.mdm.mapper.pur.PurchaseItemMapper;
  15. import com.dk.mdm.model.pojo.mst.Staff;
  16. import com.dk.mdm.model.pojo.pur.Purchase;
  17. import com.dk.mdm.mapper.pur.PurchaseMapper;
  18. import com.dk.common.service.BaseService;
  19. import com.dk.common.mapper.BaseMapper;
  20. import com.dk.mdm.model.pojo.pur.PurchaseItem;
  21. import com.dk.mdm.model.query.pur.PurchaseItemQuery;
  22. import com.dk.mdm.model.query.pur.PurchaseQuery;
  23. import com.dk.mdm.model.response.pur.PurchaseItemResponse;
  24. import com.dk.mdm.model.response.pur.PurchaseResponse;
  25. import com.dk.mdm.model.vo.mst.StaffVO;
  26. import com.dk.mdm.model.vo.pur.PurchaseItemVO;
  27. import com.dk.mdm.model.vo.pur.PurchaseVO;
  28. import com.dk.mdm.service.common.CommonService;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.transaction.annotation.Transactional;
  32. import org.springframework.web.bind.annotation.PathVariable;
  33. import org.springframework.web.bind.annotation.PostMapping;
  34. import java.math.BigDecimal;
  35. import java.time.LocalDateTime;
  36. import java.util.List;
  37. import java.util.Map;
  38. import java.util.UUID;
  39. import java.util.stream.Collectors;
  40. @Service
  41. @Transactional
  42. public class PurchaseService extends BaseService<Purchase> {
  43. @Override
  44. public BaseMapper<Purchase> getRepository() {
  45. return purchaseMapper;
  46. }
  47. @Autowired
  48. private PurchaseMapper purchaseMapper;
  49. @Autowired
  50. private PurChaseConvert purChaseConvert;
  51. @Autowired
  52. private PurChaseItemConvert purchaseItemConvert;
  53. @Autowired
  54. private PurchaseItemMapper purchaseItemMapper;
  55. @Autowired
  56. private CommonMapper commonMapper;
  57. @Autowired
  58. private CommonService commonService;
  59. @Autowired
  60. private PurchaseItemService purchaseItemService;
  61. /**
  62. * @desc : 条件查询
  63. * @author : 常皓宁
  64. * @date : 2024/2/28 9:47
  65. */
  66. @Pagination
  67. public ResponseResultVO<PageList<PurchaseResponse>> selectByCond(PurchaseQuery purchaseQuery) {
  68. return super.mergeListWithCount(purchaseQuery, purchaseMapper.selectByCond(purchaseQuery), purchaseMapper.countByCond(purchaseQuery));
  69. }
  70. /**
  71. * @desc : 新建
  72. * @author : 常皓宁
  73. * @date : 2024/2/28 9:42
  74. */
  75. @Transactional(rollbackFor = {Exception.class})
  76. public ResponseResultVO<Boolean> insert(PurchaseVO purchasevo) {
  77. //region 组织结构不能为空
  78. if (purchasevo.getOrgId() == null) {
  79. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORGANIZATION_CANNOT_BE_EMPTY.getMessage());
  80. }
  81. //endregion
  82. //region 员工不能为空
  83. if (purchasevo.getStaffId() == null) {
  84. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.STAFF_CANNOT_BE_EMPTY.getMessage());
  85. }
  86. //endregion
  87. //region 供应商不能为空
  88. if (purchasevo.getSupId() == null) {
  89. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.SUPLIER_CANNOT_BE_EMPTY.getMessage());
  90. }
  91. //endregion
  92. //region 设置采购订单总单信息并新建
  93. // 制单时间
  94. purchasevo.setMakeTime(LocalDateTime.now());
  95. // 单据类型
  96. purchasevo.setPurType(Constant.DocumentType.PUR_CHASE.getName());
  97. // 入库状态
  98. purchasevo.setIntoStatus(Constant.IntoStatus.DAIRUKU.getName());
  99. // 订单状态
  100. purchasevo.setPurStatus(Constant.OrderStatus.STATUS_DEAL.getName());
  101. // 获取单号
  102. Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.PURCHASE.getName(),false);
  103. purchasevo.setPurId(codeMap.get("outId").toString());
  104. purchasevo.setPurNo(codeMap.get("outNote").toString());
  105. Purchase purchase = purChaseConvert.convertToPo(purchasevo);
  106. purchaseMapper.insert(purchase);
  107. //endregion
  108. //region 设置采购订单明细信息并新建
  109. List<PurchaseItemVO> purchaseItemVOList = purchasevo.getPurchaseItemVOList().stream().filter(it -> it.getItemId() == null).collect(Collectors.toList());
  110. // 商品顺序
  111. for (PurchaseItemVO purchaseItemVO : purchaseItemVOList) {
  112. PurchaseItem purchaseItem = purchaseItemConvert.convertToPo(purchaseItemVO);
  113. purchaseItem.setPurId(purchase.getPurId());
  114. purchaseItem.setItemIndex(purchaseItemVO.getItemIndex());
  115. purchaseItem.setIntoStatus(Constant.IntoStatus.DAIRUKU.getName());
  116. purchaseItem.setCpId(purchase.getCpId());
  117. purchaseItemMapper.insert(purchaseItem);
  118. }
  119. //endregion
  120. return ResponseResultUtil.success();
  121. }
  122. /**
  123. * @desc : 根据总单id查询
  124. * @author : 常皓宁
  125. * @date : 2024/2/29 9:56
  126. */
  127. public ResponseResultVO selectById(String purId) {
  128. //根据id查询
  129. PurchaseResponse purchaseResponse = purchaseMapper.selectById(purId);
  130. //不存在
  131. if (purchaseResponse == null) {
  132. return ResponseResultUtil.error(ErrorCodeEnum.PURCHASE_CANNOT_BE_EMPTY.getCode(),
  133. ErrorCodeEnum.PURCHASE_CANNOT_BE_EMPTY.getMessage());
  134. }
  135. //查询明细
  136. List<PurchaseItemResponse> purchaseItemResponses = purchaseItemMapper.selectByCond(new PurchaseItemQuery().setPurId(purId));
  137. purchaseResponse.setPurchaseItemResponseList(purchaseItemResponses);
  138. return ResponseResultUtil.success(purchaseResponse);
  139. }
  140. /**
  141. * @desc : 编辑方法
  142. * @author : 常皓宁
  143. * @date : 2024/2/28 10:57
  144. */
  145. @Transactional(
  146. rollbackFor = {Exception.class}
  147. )
  148. public ResponseResultVO<Boolean> update(PurchaseVO purchasevo) {
  149. // 转化实体
  150. Purchase purchase = purChaseConvert.convertToPo(purchasevo);
  151. //删除的
  152. List<PurchaseItemVO> deletePurchaseItemVOList = purchasevo.getDeletePurchaseItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
  153. if(deletePurchaseItemVOList.size() > 0){
  154. for (PurchaseItemVO purchaseItemVO : deletePurchaseItemVOList) {
  155. // 非待入库单据不能删除
  156. if(!Constant.IntoStatus.DAIRUKU.getName().equals(purchaseItemVO.getIntoStatus())){
  157. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.NO_WAIT_INTO.getMessage());
  158. } else {
  159. purchaseItemMapper.deleteById(purchaseItemVO.getItemId());
  160. }
  161. }
  162. }
  163. // 编辑的(包括新增的)
  164. // 新增的
  165. List<PurchaseItemVO> insertPurchaseItemVOList = purchasevo.getEditPurchaseItemList().stream().filter(it -> it.getItemId() == null).collect(Collectors.toList());
  166. for (PurchaseItemVO purchaseItemVO : insertPurchaseItemVOList) {
  167. PurchaseItem purchaseItem = purchaseItemConvert.convertToPo(purchaseItemVO);
  168. purchaseItem.setPurId(purchase.getPurId());
  169. purchaseItem.setItemIndex(purchaseItemVO.getItemIndex());
  170. purchaseItem.setIntoStatus(Constant.IntoStatus.DAIRUKU.getName());
  171. purchaseItem.setCpId(purchase.getCpId());
  172. purchaseItemMapper.insert(purchaseItem);
  173. }
  174. // 编辑的
  175. List<PurchaseItemVO> editPurchaseItemVOList = purchasevo.getEditPurchaseItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
  176. for (PurchaseItemVO purchaseItemVO : editPurchaseItemVOList) {
  177. // 商品数量不能小于入库中数量
  178. if(purchaseItemVO.getItemQty().compareTo(purchaseItemVO.getIntoQty()) == -1){
  179. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_INTOQTY.getMessage());
  180. } else {
  181. PurchaseItem purchaseItem = purchaseItemConvert.convertToPo(purchaseItemVO);
  182. purchaseItemService.updataById(purchaseItem);
  183. }
  184. }
  185. return ResponseResultUtil.success(super.update(purchase,new UpdateWrapper<Purchase>().lambda().eq(Purchase::getPurId,
  186. UUID.fromString(purchase.getPurId())))) ;
  187. }
  188. }