package com.dk.mdm.service.pur; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.dk.common.exception.BaseBusinessException; import com.dk.common.infrastructure.annotaiton.Pagination; import com.dk.common.infrastructure.constant.Constant; import com.dk.common.infrastructure.enums.ErrorCodeEnum; import com.dk.common.model.pojo.PageList; import com.dk.common.response.ResponseCodeEnum; import com.dk.common.response.ResponseResultUtil; import com.dk.common.response.ResponseResultVO; import com.dk.mdm.infrastructure.convert.pur.PurChaseConvert; import com.dk.mdm.infrastructure.convert.pur.PurChaseItemConvert; import com.dk.mdm.mapper.common.CommonMapper; import com.dk.mdm.mapper.pur.PurchaseItemMapper; import com.dk.mdm.model.pojo.mst.Staff; import com.dk.mdm.model.pojo.pur.Purchase; import com.dk.mdm.mapper.pur.PurchaseMapper; import com.dk.common.service.BaseService; import com.dk.common.mapper.BaseMapper; import com.dk.mdm.model.pojo.pur.PurchaseItem; import com.dk.mdm.model.query.pur.PurchaseItemQuery; import com.dk.mdm.model.query.pur.PurchaseQuery; import com.dk.mdm.model.response.pur.PurchaseItemResponse; import com.dk.mdm.model.response.pur.PurchaseResponse; import com.dk.mdm.model.vo.mst.StaffVO; import com.dk.mdm.model.vo.pur.PurchaseItemVO; import com.dk.mdm.model.vo.pur.PurchaseVO; import com.dk.mdm.service.common.CommonService; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; @Service @Transactional public class PurchaseService extends BaseService { @Override public BaseMapper getRepository() { return purchaseMapper; } @Autowired private PurchaseMapper purchaseMapper; @Autowired private PurChaseConvert purChaseConvert; @Autowired private PurChaseItemConvert purchaseItemConvert; @Autowired private PurchaseItemMapper purchaseItemMapper; @Autowired private CommonMapper commonMapper; @Autowired private CommonService commonService; @Autowired private PurchaseItemService purchaseItemService; /** * @desc : 条件查询 * @author : 常皓宁 * @date : 2024/2/28 9:47 */ @Pagination public ResponseResultVO> selectByCond(PurchaseQuery purchaseQuery) { return super.mergeListWithCount(purchaseQuery, purchaseMapper.selectByCond(purchaseQuery), purchaseMapper.countByCond(purchaseQuery)); } /** * @desc : 新建 * @author : 常皓宁 * @date : 2024/2/28 9:42 */ @Transactional(rollbackFor = {Exception.class}) public ResponseResultVO insert(PurchaseVO purchasevo) { //region 组织结构不能为空 if (purchasevo.getOrgId() == null) { throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORGANIZATION_CANNOT_BE_EMPTY.getMessage()); } //endregion //region 员工不能为空 if (purchasevo.getStaffId() == null) { throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.STAFF_CANNOT_BE_EMPTY.getMessage()); } //endregion //region 供应商不能为空 if (purchasevo.getSupId() == null) { throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.SUPLIER_CANNOT_BE_EMPTY.getMessage()); } //endregion //region 设置采购订单总单信息并新建 // 制单时间 purchasevo.setMakeTime(LocalDateTime.now()); // 单据类型 purchasevo.setPurType(Constant.DocumentType.PUR_CHASE.getName()); // 入库状态 purchasevo.setIntoStatus(Constant.IntoStatus.DAIRUKU.getName()); // 订单状态 purchasevo.setPurStatus(Constant.OrderStatus.STATUS_DEAL.getName()); // 获取单号 Map codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.PURCHASE.getName(),false); purchasevo.setPurId(codeMap.get("outId").toString()); purchasevo.setPurNo(codeMap.get("outNote").toString()); Purchase purchase = purChaseConvert.convertToPo(purchasevo); purchaseMapper.insert(purchase); //endregion //region 设置采购订单明细信息并新建 List purchaseItemVOList = purchasevo.getPurchaseItemVOList().stream().filter(it -> it.getItemId() == null).collect(Collectors.toList()); // 商品顺序 for (PurchaseItemVO purchaseItemVO : purchaseItemVOList) { PurchaseItem purchaseItem = purchaseItemConvert.convertToPo(purchaseItemVO); purchaseItem.setPurId(purchase.getPurId()); purchaseItem.setItemIndex(purchaseItemVO.getItemIndex()); purchaseItem.setIntoStatus(Constant.IntoStatus.DAIRUKU.getName()); purchaseItem.setCpId(purchase.getCpId()); purchaseItemMapper.insert(purchaseItem); } //endregion return ResponseResultUtil.success(); } /** * @desc : 根据总单id查询 * @author : 常皓宁 * @date : 2024/2/29 9:56 */ public ResponseResultVO selectById(String purId) { //根据id查询 PurchaseResponse purchaseResponse = purchaseMapper.selectById(purId); //不存在 if (purchaseResponse == null) { return ResponseResultUtil.error(ErrorCodeEnum.PURCHASE_CANNOT_BE_EMPTY.getCode(), ErrorCodeEnum.PURCHASE_CANNOT_BE_EMPTY.getMessage()); } //查询明细 List purchaseItemResponses = purchaseItemMapper.selectByCond(new PurchaseItemQuery().setPurId(purId)); purchaseResponse.setPurchaseItemResponseList(purchaseItemResponses); return ResponseResultUtil.success(purchaseResponse); } /** * @desc : 编辑方法 * @author : 常皓宁 * @date : 2024/2/28 10:57 */ @Transactional( rollbackFor = {Exception.class} ) public ResponseResultVO update(PurchaseVO purchasevo) { // 转化实体 Purchase purchase = purChaseConvert.convertToPo(purchasevo); //删除的 List deletePurchaseItemVOList = purchasevo.getDeletePurchaseItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList()); if(deletePurchaseItemVOList.size() > 0){ for (PurchaseItemVO purchaseItemVO : deletePurchaseItemVOList) { // 非待入库单据不能删除 if(!Constant.IntoStatus.DAIRUKU.getName().equals(purchaseItemVO.getIntoStatus())){ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.NO_WAIT_INTO.getMessage()); } else { purchaseItemMapper.deleteById(purchaseItemVO.getItemId()); } } } // 编辑的(包括新增的) // 新增的 List insertPurchaseItemVOList = purchasevo.getEditPurchaseItemList().stream().filter(it -> it.getItemId() == null).collect(Collectors.toList()); for (PurchaseItemVO purchaseItemVO : insertPurchaseItemVOList) { PurchaseItem purchaseItem = purchaseItemConvert.convertToPo(purchaseItemVO); purchaseItem.setPurId(purchase.getPurId()); purchaseItem.setItemIndex(purchaseItemVO.getItemIndex()); purchaseItem.setIntoStatus(Constant.IntoStatus.DAIRUKU.getName()); purchaseItem.setCpId(purchase.getCpId()); purchaseItemMapper.insert(purchaseItem); } // 编辑的 List editPurchaseItemVOList = purchasevo.getEditPurchaseItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList()); for (PurchaseItemVO purchaseItemVO : editPurchaseItemVOList) { // 商品数量不能小于入库中数量 if(purchaseItemVO.getItemQty().compareTo(purchaseItemVO.getIntoQty()) == -1){ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_INTOQTY.getMessage()); } else { PurchaseItem purchaseItem = purchaseItemConvert.convertToPo(purchaseItemVO); purchaseItemService.updataById(purchaseItem); } } return ResponseResultUtil.success(super.update(purchase,new UpdateWrapper().lambda().eq(Purchase::getPurId, UUID.fromString(purchase.getPurId())))) ; } }