|
@@ -6,22 +6,25 @@ import cn.hutool.core.date.DateUtil;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.gree.mall.manager.bean.SalesCustomerPartsBean;
|
|
|
+import com.gree.mall.manager.bean.SalesCustomerPartsItemBean;
|
|
|
import com.gree.mall.manager.bean.admin.AdminUserCom;
|
|
|
import com.gree.mall.manager.bean.listvo.material.WorkerStockAccPVO;
|
|
|
import com.gree.mall.manager.bean.listvo.material.WorkerStockAccVO;
|
|
|
import com.gree.mall.manager.bean.listvo.material.WorkerStockPVO;
|
|
|
import com.gree.mall.manager.bean.listvo.material.WorkerStockVO;
|
|
|
import com.gree.mall.manager.bean.material.stock.WorkerStockDTO;
|
|
|
+import com.gree.mall.manager.bean.material.worker.OldRefundManageBean;
|
|
|
+import com.gree.mall.manager.bean.material.worker.OldRefundManageItemBean;
|
|
|
import com.gree.mall.manager.commonmapper.CommonMapper;
|
|
|
-import com.gree.mall.manager.enums.material.DirectFlagEnum;
|
|
|
-import com.gree.mall.manager.enums.material.PartsAttrEnum;
|
|
|
-import com.gree.mall.manager.enums.material.WebsitGoodsTypeEnum;
|
|
|
-import com.gree.mall.manager.enums.material.WorkerStockFlagEnum;
|
|
|
+import com.gree.mall.manager.enums.material.*;
|
|
|
import com.gree.mall.manager.exception.RemoteServiceException;
|
|
|
+import com.gree.mall.manager.inf.ValidGroup;
|
|
|
import com.gree.mall.manager.logic.common.CommonLogic;
|
|
|
import com.gree.mall.manager.plus.entity.*;
|
|
|
import com.gree.mall.manager.plus.service.*;
|
|
|
import com.gree.mall.manager.utils.CommonUtils;
|
|
|
+import com.gree.mall.manager.utils.ValidateUtil;
|
|
|
import com.gree.mall.manager.zfire.bean.ZfireParamBean;
|
|
|
import com.gree.mall.manager.zfire.util.FieldUtils;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
@@ -31,10 +34,13 @@ import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import javax.validation.ValidationException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Slf4j
|
|
@@ -54,6 +60,8 @@ public class WorkerStockLogic {
|
|
|
private final WorkerStockBakService workerStockBakService;
|
|
|
private final WorkerStockAccBakService workerStockAccBakService;
|
|
|
private final WebsitUserService websitUserService;
|
|
|
+ private final WebsitPartsOldRefundManageService websitPartsOldRefundManageService;
|
|
|
+ private final WebsitPartsOldRefundManageItemService websitPartsOldRefundManageItemService;
|
|
|
|
|
|
/**
|
|
|
* 师傅辅材库存列表
|
|
@@ -360,4 +368,221 @@ public class WorkerStockLogic {
|
|
|
workerStockAccBakService.saveBatch(workerStockAccBakList);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public String oldRefundManageSyncAdd(SalesCustomerPartsBean bean) throws Exception {
|
|
|
+ ValidateUtil.validate(bean, ValidGroup.Add.class);
|
|
|
+ for (SalesCustomerPartsItemBean itemBean : bean.getItems()) {
|
|
|
+ try {
|
|
|
+ ValidateUtil.validate(itemBean, ValidGroup.Add.class);
|
|
|
+ } catch (ValidationException e) {
|
|
|
+ throw new RemoteServiceException("明细出错原因:" + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 查询接收网点
|
|
|
+ AdminWebsit websit = adminWebsitService.lambdaQuery()
|
|
|
+ .eq(AdminWebsit::getCompanyWechatId, bean.getCompanyWechatId())
|
|
|
+ .eq(AdminWebsit::getWebsitId, bean.getReceiveWebsitId())
|
|
|
+ .eq(AdminWebsit::getPartsWebsitId, bean.getReceivePartsWebsitId())
|
|
|
+ .one();
|
|
|
+ if (Objects.isNull(websit)) {
|
|
|
+ throw new RemoteServiceException("接收网点不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询师傅在接收网点的新件库存
|
|
|
+ List<WorkerStock> workerStockList = workerStockService.lambdaQuery()
|
|
|
+ .eq(WorkerStock::getCompanyWechatId, bean.getCompanyWechatId())
|
|
|
+ .eq(WorkerStock::getIdentity, bean.getIdentity())
|
|
|
+ .eq(WorkerStock::getWebsitId, bean.getReceiveWebsitId())
|
|
|
+ .eq(WorkerStock::getPartsWebsitId, bean.getReceivePartsWebsitId())
|
|
|
+ .in(WorkerStock::getGoodsId, bean.getItems().stream()
|
|
|
+ .map(SalesCustomerPartsItemBean::getPartsNumber)
|
|
|
+ .collect(Collectors.toList()))
|
|
|
+ .list();
|
|
|
+ if (CollectionUtil.isEmpty(workerStockList)) {
|
|
|
+ throw new RemoteServiceException("在“" + websit.getName() + "”未找到新件配件库存");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询配件资料
|
|
|
+ List<WebsitGoods> partsList = websitGoodsService.lambdaQuery()
|
|
|
+ .eq(WebsitGoods::getCompanyWechatId, bean.getCompanyWechatId())
|
|
|
+ .in(WebsitGoods::getGoodsCode, bean.getItems().stream()
|
|
|
+ .map(SalesCustomerPartsItemBean::getPartsNumber)
|
|
|
+ .collect(Collectors.toList()))
|
|
|
+ .list();
|
|
|
+
|
|
|
+ // 检查明细归还的数量必须大于0并且少于等于库存数量
|
|
|
+ Map<String, WorkerStock> workerStockMap = workerStockList.stream()
|
|
|
+ .collect(Collectors.toMap(WorkerStock::getGoodsId, Function.identity()));
|
|
|
+ Map<String, WebsitGoods> partsMap = partsList.stream()
|
|
|
+ .collect(Collectors.toMap(WebsitGoods::getGoodsCode, Function.identity()));
|
|
|
+
|
|
|
+ OldRefundManageBean oldRefundManageBean = this.convertBean(bean, websit, partsMap);
|
|
|
+
|
|
|
+ for (OldRefundManageItemBean itemBean : oldRefundManageBean.getOldRefundManageItemBeanList()) {
|
|
|
+ WorkerStock workerStock = workerStockMap.get(itemBean.getNewPartsNumber());
|
|
|
+ if (Objects.isNull(workerStock)) {
|
|
|
+ throw new RemoteServiceException("“" + itemBean.getNewPartsName() + "”新配件未找到库存记录");
|
|
|
+ }
|
|
|
+ if (itemBean.getQty().compareTo(workerStock.getQty()) > 0) {
|
|
|
+ throw new RemoteServiceException("“" + workerStock.getGoodsName() + "”使用新件数量不能大于库存数量");
|
|
|
+ }
|
|
|
+ if (itemBean.getQty().compareTo(BigDecimal.ZERO) < 1) {
|
|
|
+ throw new RemoteServiceException("“" + workerStock.getGoodsName() + "”使用新件数量必须大于0");
|
|
|
+ }
|
|
|
+ workerStockMap.get(itemBean.getNewPartsNumber()).setQty(workerStock.getQty().subtract(itemBean.getQty()));
|
|
|
+ }
|
|
|
+
|
|
|
+ String sheetId = commonLogic.generateMaterialNo(bean.getCompanyWechatId(), "JH", PartsRefTypeEnum.OLD_REFUND.getKey(), 13);
|
|
|
+ oldRefundManageBean.setApplyNo(sheetId);
|
|
|
+
|
|
|
+ // 保存主表和明细
|
|
|
+ WebsitPartsOldRefundManage partsOldRefundManage = new WebsitPartsOldRefundManage();
|
|
|
+ BeanUtils.copyProperties(oldRefundManageBean, partsOldRefundManage);
|
|
|
+ // workOrderNo与pgId是同值
|
|
|
+ partsOldRefundManage.setPgId(oldRefundManageBean.getWorkOrderNo());
|
|
|
+
|
|
|
+ List<WebsitPartsOldRefundManageItem> partsOldRefundManageItems = new ArrayList<>();
|
|
|
+ for (OldRefundManageItemBean itemBean : oldRefundManageBean.getOldRefundManageItemBeanList()) {
|
|
|
+ WebsitPartsOldRefundManageItem partsOldRefundManageItem = new WebsitPartsOldRefundManageItem();
|
|
|
+ itemBean.setId(IdWorker.getIdStr());
|
|
|
+ itemBean.setApplyNo(sheetId);
|
|
|
+ BeanUtils.copyProperties(itemBean, partsOldRefundManageItem);
|
|
|
+ partsOldRefundManageItem.setNewUnitName(itemBean.getNewGoodsStockUnit());
|
|
|
+ partsOldRefundManageItems.add(partsOldRefundManageItem);
|
|
|
+ }
|
|
|
+ partsOldRefundManage.setCreateBy(partsOldRefundManage.getWorkerName())
|
|
|
+ .setUpdateBy(partsOldRefundManage.getWorkerName())
|
|
|
+ .insert();
|
|
|
+
|
|
|
+ // 刷新创建人和更新人
|
|
|
+ websitPartsOldRefundManageService.lambdaUpdate()
|
|
|
+ .set(WebsitPartsOldRefundManage::getCreateBy, partsOldRefundManage.getWorkerName())
|
|
|
+ .set(WebsitPartsOldRefundManage::getUpdateBy, partsOldRefundManage.getWorkerName())
|
|
|
+ .eq(WebsitPartsOldRefundManage::getApplyNo, sheetId)
|
|
|
+ .update();
|
|
|
+
|
|
|
+ websitPartsOldRefundManageItemService.saveBatch(partsOldRefundManageItems);
|
|
|
+
|
|
|
+ // 减去师傅新件库存 增加旧件库存
|
|
|
+ String refType = PartsRepairFlagEnum.INNER.getKey().equals(partsOldRefundManage.getRepairFlag()) ?
|
|
|
+ PartsRefTypeEnum.OLD_REFUND.getRemark() :
|
|
|
+ PartsRefTypeEnum.OUTSIDE_TO_SALES.getRemark();
|
|
|
+ List<WorkerStockDTO> workerStockDTOList = this.createWorkerStockDTO(partsOldRefundManage, partsOldRefundManageItems,
|
|
|
+ refType, PartsAttrEnum.NEW.getKey(), PartsAttrEnum.OLD.getKey());
|
|
|
+ materialGoodsStockLogic.handleWorkerStock(workerStockDTOList);
|
|
|
+
|
|
|
+ return sheetId;
|
|
|
+ }
|
|
|
+
|
|
|
+ private OldRefundManageBean convertBean(SalesCustomerPartsBean bean, AdminWebsit websit, Map<String, WebsitGoods> partsMap) {
|
|
|
+ OldRefundManageBean oldRefundManageBean = new OldRefundManageBean();
|
|
|
+ BeanUtils.copyProperties(bean, oldRefundManageBean);
|
|
|
+ if (PartsRepairFlagEnum.INNER.getKey().equals(bean.getRepairFlag())) {
|
|
|
+ oldRefundManageBean.setApplyType(PartsRefundApplyTypeEnum.OLD.getKey());
|
|
|
+ } else {
|
|
|
+ oldRefundManageBean.setApplyType(PartsRefundApplyTypeEnum.NOT.getKey());
|
|
|
+ }
|
|
|
+ oldRefundManageBean.setReceiveWebsitName(websit.getName());
|
|
|
+ oldRefundManageBean.setWebsitAddress(websit.getAddress());
|
|
|
+ oldRefundManageBean.setCreateBy(bean.getWorkerName());
|
|
|
+ oldRefundManageBean.setCreateTime(DateUtil.date());
|
|
|
+ oldRefundManageBean.setUpdateBy(bean.getWorkerName());
|
|
|
+ oldRefundManageBean.setUpdateTime(DateUtil.date());
|
|
|
+ oldRefundManageBean.setFlag(PartsOrderFlagEnum.SAVE.toString());
|
|
|
+
|
|
|
+ List<OldRefundManageItemBean> oldRefundManageItemBeanList = new ArrayList<>();
|
|
|
+ for (SalesCustomerPartsItemBean itemBean : bean.getItems()) {
|
|
|
+ OldRefundManageItemBean oldRefundManageItemBean = new OldRefundManageItemBean();
|
|
|
+ BeanUtils.copyProperties(itemBean, oldRefundManageItemBean);
|
|
|
+ WebsitGoods parts = partsMap.get(itemBean.getPartsNumber());
|
|
|
+ if (Objects.isNull(parts)) {
|
|
|
+ throw new RemoteServiceException("“" + itemBean.getPartsNumber() + "”配件编码未找到资料记录");
|
|
|
+ }
|
|
|
+ oldRefundManageItemBean.setOldPartsNumber(itemBean.getOldPartsNumber());
|
|
|
+ oldRefundManageItemBean.setOldPartsName(itemBean.getOldPartsName());
|
|
|
+ oldRefundManageItemBean.setNewPartsNumber(parts.getGoodsCode());
|
|
|
+ oldRefundManageItemBean.setNewPartsName(parts.getGoodsName());
|
|
|
+ oldRefundManageItemBean.setNewMaterialGroupName(parts.getMaterialGroupName());
|
|
|
+ oldRefundManageItemBean.setNewGoodsStockUnit(parts.getGoodsStockUnit());
|
|
|
+ oldRefundManageItemBeanList.add(oldRefundManageItemBean);
|
|
|
+ }
|
|
|
+ oldRefundManageBean.setOldRefundManageItemBeanList(oldRefundManageItemBeanList);
|
|
|
+ return oldRefundManageBean;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<WorkerStockDTO> createWorkerStockDTO(WebsitPartsOldRefundManage partsOldRefundManage,
|
|
|
+ List<WebsitPartsOldRefundManageItem> partsOldRefundManageItems,
|
|
|
+ String refType, String partsAttr1,
|
|
|
+ String partsAttr2) {
|
|
|
+ List<WorkerStockDTO> workerStockDTOList = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotBlank(partsAttr1)) {
|
|
|
+ for (WebsitPartsOldRefundManageItem refundManageItem : partsOldRefundManageItems) {
|
|
|
+ WorkerStockDTO workerStockDTO = new WorkerStockDTO();
|
|
|
+ workerStockDTO.setCompanyWechatId(partsOldRefundManage.getCompanyWechatId());
|
|
|
+ workerStockDTO.setCompanyWechatName(partsOldRefundManage.getCompanyWechatName());
|
|
|
+ workerStockDTO.setIdentity(partsOldRefundManage.getIdentity());
|
|
|
+ workerStockDTO.setWorkerId(partsOldRefundManage.getWorkerId());
|
|
|
+ workerStockDTO.setWorkerName(partsOldRefundManage.getWorkerName());
|
|
|
+ workerStockDTO.setWebsitId(partsOldRefundManage.getReceiveWebsitId());
|
|
|
+ workerStockDTO.setWebsitName(partsOldRefundManage.getReceiveWebsitName());
|
|
|
+ workerStockDTO.setPartsWebsitId(partsOldRefundManage.getReceivePartsWebsitId());
|
|
|
+ workerStockDTO.setSdate(DateUtil.date());
|
|
|
+ workerStockDTO.setGoodsType(WebsitGoodsTypeEnum.P.toString());
|
|
|
+ workerStockDTO.setGoodsId(refundManageItem.getNewPartsNumber());
|
|
|
+ workerStockDTO.setGoodsName(refundManageItem.getNewPartsName());
|
|
|
+ workerStockDTO.setMaterialGroupName(refundManageItem.getNewMaterialGroupName());
|
|
|
+ workerStockDTO.setGoodsStockUnit(refundManageItem.getNewUnitName());
|
|
|
+ workerStockDTO.setPrice(BigDecimal.ZERO);
|
|
|
+ workerStockDTO.setRef(partsOldRefundManage.getApplyNo());
|
|
|
+ workerStockDTO.setRefType(refType);
|
|
|
+ workerStockDTO.setPartsAttr(partsAttr1);
|
|
|
+ workerStockDTO.setChangeQty(refundManageItem.getQty());
|
|
|
+ workerStockDTO.setDirectFlag(DirectFlagEnum.SUB.getKey());
|
|
|
+ workerStockDTO.setRemark(refundManageItem.getRemark());
|
|
|
+ workerStockDTO.setWorkerOrderNo(partsOldRefundManage.getWorkOrderNo());
|
|
|
+ workerStockDTO.setOperateBy(partsOldRefundManage.getWorkerName());
|
|
|
+ workerStockDTO.setOperateTime(DateUtil.date());
|
|
|
+
|
|
|
+ workerStockDTOList.add(workerStockDTO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(partsAttr2)) {
|
|
|
+ for (WebsitPartsOldRefundManageItem refundManageItem : partsOldRefundManageItems) {
|
|
|
+ WorkerStockDTO workerStockDTO = new WorkerStockDTO();
|
|
|
+ workerStockDTO.setCompanyWechatId(partsOldRefundManage.getCompanyWechatId());
|
|
|
+ workerStockDTO.setCompanyWechatName(partsOldRefundManage.getCompanyWechatName());
|
|
|
+ workerStockDTO.setIdentity(partsOldRefundManage.getIdentity());
|
|
|
+ workerStockDTO.setWorkerId(partsOldRefundManage.getWorkerId());
|
|
|
+ workerStockDTO.setWorkerName(partsOldRefundManage.getWorkerName());
|
|
|
+ workerStockDTO.setWebsitId(partsOldRefundManage.getReceiveWebsitId());
|
|
|
+ workerStockDTO.setWebsitName(partsOldRefundManage.getReceiveWebsitName());
|
|
|
+ workerStockDTO.setPartsWebsitId(partsOldRefundManage.getReceivePartsWebsitId());
|
|
|
+ workerStockDTO.setSdate(DateUtil.date());
|
|
|
+ workerStockDTO.setGoodsType(WebsitGoodsTypeEnum.P.toString());
|
|
|
+ workerStockDTO.setGoodsId(refundManageItem.getNewPartsNumber());
|
|
|
+ workerStockDTO.setGoodsName(refundManageItem.getNewPartsName());
|
|
|
+ workerStockDTO.setMaterialGroupName(refundManageItem.getNewMaterialGroupName());
|
|
|
+ workerStockDTO.setGoodsStockUnit(refundManageItem.getNewUnitName());
|
|
|
+ workerStockDTO.setPrice(BigDecimal.ZERO);
|
|
|
+ workerStockDTO.setRef(partsOldRefundManage.getApplyNo());
|
|
|
+ workerStockDTO.setRefType(refType);
|
|
|
+ workerStockDTO.setPartsAttr(partsAttr2);
|
|
|
+ workerStockDTO.setChangeQty(refundManageItem.getQty());
|
|
|
+ workerStockDTO.setDirectFlag(DirectFlagEnum.ADD.getKey());
|
|
|
+ workerStockDTO.setRemark(refundManageItem.getRemark());
|
|
|
+ workerStockDTO.setWorkerOrderNo(partsOldRefundManage.getWorkOrderNo());
|
|
|
+ workerStockDTO.setOperateBy(partsOldRefundManage.getWorkerName());
|
|
|
+ workerStockDTO.setOperateTime(DateUtil.date());
|
|
|
+
|
|
|
+ workerStockDTOList.add(workerStockDTO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return workerStockDTOList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public void fucaiHandleWorkerStock(List<WorkerStockDTO> workerStockDTOS) throws Exception {
|
|
|
+ materialGoodsStockLogic.handleWorkerStock(workerStockDTOS);
|
|
|
+ }
|
|
|
}
|