|
|
@@ -1,23 +1,309 @@
|
|
|
package com.dk.mdm.service.ivt;
|
|
|
|
|
|
+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.ivt.IntoReturnConvert;
|
|
|
+import com.dk.mdm.infrastructure.convert.ivt.IntoReturnItemConvert;
|
|
|
+import com.dk.mdm.infrastructure.util.AuthUtils;
|
|
|
+import com.dk.mdm.mapper.ivt.InboundItemMapper;
|
|
|
+import com.dk.mdm.mapper.ivt.InboundMapper;
|
|
|
+import com.dk.mdm.mapper.pur.PurchaseItemMapper;
|
|
|
+import com.dk.mdm.mapper.pur.PurchaseMapper;
|
|
|
+import com.dk.mdm.model.pojo.ivt.Inbound;
|
|
|
+import com.dk.mdm.model.pojo.ivt.InboundItem;
|
|
|
import com.dk.mdm.model.pojo.ivt.IntoReturn;
|
|
|
import com.dk.mdm.mapper.ivt.IntoReturnMapper;
|
|
|
import com.dk.common.service.BaseService;
|
|
|
import com.dk.common.mapper.BaseMapper;
|
|
|
+import com.dk.mdm.model.pojo.ivt.IntoReturnItem;
|
|
|
+import com.dk.mdm.model.pojo.pur.PurchaseItem;
|
|
|
+import com.dk.mdm.model.query.ivt.IntoReturnQuery;
|
|
|
+import com.dk.mdm.model.query.pur.PurchaseQuery;
|
|
|
+import com.dk.mdm.model.response.ivt.IntoReturnResponse;
|
|
|
+import com.dk.mdm.model.response.pur.PurchaseItemResponse;
|
|
|
+import com.dk.mdm.model.response.pur.PurchaseResponse;
|
|
|
+import com.dk.mdm.model.vo.ivt.IntoReturnItemVO;
|
|
|
+import com.dk.mdm.model.vo.ivt.IntoReturnVO;
|
|
|
+import com.dk.mdm.model.vo.ivt.OutboundItemVO;
|
|
|
+import com.dk.mdm.model.vo.ivt.OutboundVO;
|
|
|
+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 java.math.BigDecimal;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
@Service
|
|
|
@Transactional
|
|
|
public class IntoReturnService extends BaseService<IntoReturn> {
|
|
|
|
|
|
- @Override
|
|
|
- public BaseMapper<IntoReturn> getRepository() {
|
|
|
- return intoReturnMapper;
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ public BaseMapper<IntoReturn> getRepository() {
|
|
|
+ return intoReturnMapper;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IntoReturnMapper intoReturnMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IntoReturnConvert intoReturnConvert;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IntoReturnItemConvert intoReturnItemConvert;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PurchaseMapper purchaseMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PurchaseItemMapper purchaseItemMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IntoReturnItemService intoReturnItemService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CommonService commonService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AuthUtils authUtils;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OutboundService outboundService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private InboundService inboundService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private InboundMapper inboundMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private InboundItemMapper inboundItemMapper;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 查询
|
|
|
+ * @author : 于继渤
|
|
|
+ * @date : 2023/1/5 9:39
|
|
|
+ */
|
|
|
+ @Pagination
|
|
|
+ public ResponseResultVO<PageList<IntoReturnResponse>> selectByCond(IntoReturnQuery intoReturnQuery) {
|
|
|
+ return super.mergeListWithCount(intoReturnQuery, intoReturnMapper.selectByCond(intoReturnQuery), intoReturnMapper.countByCond(intoReturnQuery));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 新建采购退货
|
|
|
+ * @author : 于继渤
|
|
|
+ * @date : 2023/1/5 9:39
|
|
|
+ */
|
|
|
+ @Transactional(
|
|
|
+ rollbackFor = {Exception.class}
|
|
|
+ )
|
|
|
+ public ResponseResultVO<?> insert(IntoReturnVO intoReturnVO) {
|
|
|
+ //校验明细长度
|
|
|
+ List<IntoReturnItemVO> intoReturnItemVOList = intoReturnVO.getIntoReturnItemVOList();
|
|
|
+ //明细不存在
|
|
|
+ if (intoReturnItemVOList == null || intoReturnItemVOList.size() == 0) {
|
|
|
+ //返回 采购退货明细不可为空,请重新操作
|
|
|
+ return ResponseResultUtil.error(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.PURCHASE_RETURN_DETAIL_NOT_EXIST.getMessage());
|
|
|
+ }
|
|
|
+ //设置总单
|
|
|
+ intoReturnVO = this.insertTotal(intoReturnVO);
|
|
|
+ //设置明细
|
|
|
+ intoReturnItemVOList = this.insertDetail(intoReturnVO, intoReturnItemVOList);
|
|
|
+
|
|
|
+ //反写入库单 反写退货数量金额
|
|
|
+ Inbound inbound = inboundMapper.selectById(intoReturnVO.getIntoId());
|
|
|
+ inboundMapper.updateAmount(new Inbound().setIntoId(intoReturnVO.getIntoId())
|
|
|
+ .setReturnQty(inbound.getReturnQty().add(intoReturnVO.getSumQuantity()))
|
|
|
+ .setReturnAmt(inbound.getReturnAmt().add(intoReturnVO.getSumAmount())));
|
|
|
+
|
|
|
+
|
|
|
+ //反写入库订单明细、反写订单明细
|
|
|
+ for (IntoReturnItemVO intoReturnItemVO : intoReturnItemVOList) {
|
|
|
+
|
|
|
+ //根据退货明细中入库明细id查询入库明细数据
|
|
|
+ InboundItem inboundItem = inboundItemMapper.selectById(intoReturnItemVO.getIntoItemId());
|
|
|
+ inboundItemMapper.updateAmount(
|
|
|
+ new InboundItem()
|
|
|
+ .setItemId(inboundItem.getItemId())
|
|
|
+ .setReturnQty(inboundItem.getReturnQty().add(intoReturnItemVO.getItemQty().setScale(6, BigDecimal.ROUND_HALF_UP)))
|
|
|
+ .setReturnAmt(inboundItem.getReturnAmt().add(intoReturnItemVO.getItemAmt().setScale(6, BigDecimal.ROUND_HALF_UP)))
|
|
|
+ );
|
|
|
+ //TODO 反写订单出库明细 退货数量和退货金额
|
|
|
+ //查询采购订单明细数据
|
|
|
+ PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(intoReturnItemVO.getPurItemId());
|
|
|
+ //反写订单明细退货数量和退货金额
|
|
|
+ purchaseItemMapper.updateAmount(
|
|
|
+ new PurchaseItem()
|
|
|
+ .setItemId(intoReturnItemVO.getPurItemId())
|
|
|
+ .setReturnQty(purchaseItemResponse.getReturnQty().add(intoReturnItemVO.getItemQty().setScale(6, BigDecimal.ROUND_HALF_UP)))
|
|
|
+ .setReturnAmt(purchaseItemResponse.getReturnAmt().add(intoReturnItemVO.getItemAmt().setScale(6, BigDecimal.ROUND_HALF_UP)))
|
|
|
+
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+// //新建出库单
|
|
|
+// OutboundVO outboundVO = new OutboundVO();
|
|
|
+// //来源ID
|
|
|
+// outboundVO.setFromId(intoReturnVO.getReturnId());
|
|
|
+// //来源单号
|
|
|
+// outboundVO.setFromNo(intoReturnVO.getReturnNo());
|
|
|
+// //部门
|
|
|
+// outboundVO.setOrgId(intoReturnVO.getOrgId());
|
|
|
+// //员工
|
|
|
+// outboundVO.setStaffId(intoReturnVO.getStaffId());
|
|
|
+// //供应商
|
|
|
+// outboundVO.setSupId(intoReturnVO.getSupId());
|
|
|
+// //出库状态
|
|
|
+// outboundVO.setOutStatus("出库状态-出库中");
|
|
|
+// outboundVO.setMakeStaff(authUtils.getStaff().getStaffId());
|
|
|
+// outboundVO.setCpId(authUtils.getStaff().getCpId());
|
|
|
+// List<OutboundItemVO> itemList = new ArrayList<>();
|
|
|
+// Integer itemIndex = 0;
|
|
|
+//
|
|
|
+// for (IntoReturnItemVO intoReturnItemVO : intoReturnItemVOList) {
|
|
|
+// OutboundItemVO outboundItemVO = new OutboundItemVO();
|
|
|
+// outboundItemVO.setSkuId(intoReturnItemVO.getSkuId());
|
|
|
+// outboundItemVO.setItemIndex(itemIndex +1);
|
|
|
+// outboundItemVO.setPriceOut(intoReturnItemVO.getPriceReturn());
|
|
|
+// outboundItemVO.setInvId("10112024-0305-0000-0000-000009593bb6");
|
|
|
+// itemList.add(outboundItemVO);
|
|
|
+// }
|
|
|
+//
|
|
|
+// outboundVO.setItemList(itemList);
|
|
|
+//
|
|
|
+//
|
|
|
+//
|
|
|
+// outboundService.insert(outboundVO);
|
|
|
+
|
|
|
+
|
|
|
+ return ResponseResultUtil.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 设置总单信息
|
|
|
+ * @date : 2023/9/28 16:20
|
|
|
+ * @author : 于继渤
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = {Exception.class})
|
|
|
+ public IntoReturnVO insertTotal(IntoReturnVO intoReturnVO) {
|
|
|
+ // 获取单号
|
|
|
+ Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OUTBOUND.getName(), false);
|
|
|
+ intoReturnVO.setReturnId(codeMap.get("outId").toString()).setReturnNo(codeMap.get("outNote").toString())
|
|
|
+ .setReturnType(Constant.returnType.PURRETURN.getName());
|
|
|
+ //查询采购订单上的客户信息
|
|
|
+ PurchaseResponse purchaseResponse = purchaseMapper.selectById(intoReturnVO.getPurId());
|
|
|
+ //部门Id
|
|
|
+ intoReturnVO.setOrgId(purchaseResponse.getOrgId());
|
|
|
+ intoReturnVO.setReturnStatus("退货状态-通过");
|
|
|
+ //出库状态
|
|
|
+ intoReturnVO.setOutStatus(Constant.OutStatus.DAICHUKU.getName());
|
|
|
+ //制单员
|
|
|
+ intoReturnVO.setMakeStaff(authUtils.getStaff().getStaffId());
|
|
|
+ //业务员
|
|
|
+ intoReturnVO.setStaffId(purchaseResponse.getStaffId());
|
|
|
+ //供应商
|
|
|
+ intoReturnVO.setSupId(purchaseResponse.getSupId());
|
|
|
+ //联系人
|
|
|
+ intoReturnVO.setContactName(purchaseResponse.getContactName());
|
|
|
+ //联系电话
|
|
|
+ intoReturnVO.setContactPhone(purchaseResponse.getContactPhone());
|
|
|
+ //送货日期//取货日期
|
|
|
+ intoReturnVO.setDeliveryDate(purchaseResponse.getPickupDate());
|
|
|
+ //新建总单
|
|
|
+ IntoReturn intoReturn = intoReturnConvert.convertToPo(intoReturnVO);
|
|
|
+ intoReturnMapper.insert(intoReturn);
|
|
|
+ return intoReturnVO;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 设置明细信息
|
|
|
+ * @date : 2023/9/28 16:20
|
|
|
+ * @author : 于继渤
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = {Exception.class})
|
|
|
+ public List<IntoReturnItemVO> insertDetail(IntoReturnVO intoReturnVO, List<IntoReturnItemVO> intoReturnItemVOList) {
|
|
|
+ for (IntoReturnItemVO intoReturnItemVO : intoReturnItemVOList) {
|
|
|
+ //总单Id
|
|
|
+ intoReturnItemVO.setReturnId(intoReturnVO.getReturnId());
|
|
|
+ //公司Id
|
|
|
+ intoReturnItemVO.setCpId(intoReturnVO.getCpId());
|
|
|
+ //根据分销订单明细Id查询数据
|
|
|
+ //查询明细数据
|
|
|
+ PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(intoReturnItemVO.getFromItemId());
|
|
|
+ //采购订单id
|
|
|
+ intoReturnItemVO.setPurId(purchaseItemResponse.getPurId());
|
|
|
+ intoReturnItemVO.setPurItemId(purchaseItemResponse.getItemId());
|
|
|
+ intoReturnItemVO.setIntoItemId(intoReturnItemVO.getItemId());
|
|
|
+ intoReturnItemVO.setItemId(null);
|
|
|
+ //标价
|
|
|
+ intoReturnItemVO.setPriceStd(purchaseItemResponse.getPriceStd());
|
|
|
+ //标价金额 (商品数量*标价)
|
|
|
+ intoReturnItemVO.setAmtStd(intoReturnItemVO.getItemQty().multiply(intoReturnItemVO.getPriceStd()).setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ //退货价格
|
|
|
+ intoReturnItemVO.setPriceReturn(purchaseItemResponse.getPricePur());
|
|
|
+ //退货金额 (商品数量*退货价)
|
|
|
+ intoReturnItemVO.setItemAmt(intoReturnItemVO.getItemQty().multiply(intoReturnItemVO.getPriceReturn()).setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
|
+
|
|
|
+ //新建明细
|
|
|
+ IntoReturnItem intoReturnItem = intoReturnItemConvert.convertToPo(intoReturnItemVO);
|
|
|
+ intoReturnItemService.insert(intoReturnItem);
|
|
|
+
|
|
|
+// //已出库数量
|
|
|
+
|
|
|
+// orderOutRejectItemVO.setOutOutQuantity(orderItem.getOutQuantity());
|
|
|
+// //已出库金额
|
|
|
+// orderOutRejectItemVO.setOutOutAmount(orderItem.getOutAmount());
|
|
|
+// //已出库退货数量
|
|
|
+// orderOutRejectItemVO.setOutRejectQuantity(orderItem.getRejectQuantity());
|
|
|
+// //已出库退货金额
|
|
|
+// orderOutRejectItemVO.setOutRejectAmount(orderItem.getRejectAmount());
|
|
|
+// //退货差价
|
|
|
+// orderOutRejectItemVO.setDifferencePrice(orderItem.getPriceSale().subtract(orderOutRejectItemVO.getOrderPriceSale()));
|
|
|
+// //退货差额
|
|
|
+// orderOutRejectItemVO.setDifferenceAmount(orderOutRejectItemVO.getDifferencePrice().multiply(orderOutRejectItemVO.getOutRejectQuantity()));
|
|
|
+// // 出库中数量 - 已出库数量 < 本次出库数量
|
|
|
+// if (orderOutRejectItemVO.getOutOutQuantity().add(orderOutRejectItemVO.getOutRejectQuantity()).compareTo(orderOutRejectItemVO.getRejectQuantity().negate()) == -1) {
|
|
|
+// throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORDER_GREATER_THAN_THE_REFUNDABLE_QUANTITY.getmessage());
|
|
|
+// }
|
|
|
+// //出库状态 出库中
|
|
|
+// orderOutRejectItemVO.setOutStatus(Constant.OutStatusConstant.OUT_ORDER_NOT_OUT.getName());
|
|
|
+// //出库中金额
|
|
|
+// orderOutRejectItemVO.setOutGoingAmount(orderOutRejectItemVO.getRejectAmount().abs());
|
|
|
+// //出库中数量
|
|
|
+// orderOutRejectItemVO.setOutGoingQuantity(orderOutRejectItemVO.getRejectQuantity().abs());
|
|
|
+// //出库中时间
|
|
|
+// orderOutRejectItemVO.setOutGoingTime(LocalDateTime.now());
|
|
|
+// //自动出库赋值 已出库数量、已出库金额、最后出库时间
|
|
|
+// if (orderOutRejectVO.getFlgAutoIvt()) {
|
|
|
+// //已出库数量
|
|
|
+// orderOutRejectItemVO.setOutQuantity(orderOutRejectItemVO.getRejectQuantity().abs());
|
|
|
+// //已出库金额
|
|
|
+// orderOutRejectItemVO.setOutAmount(orderOutRejectItemVO.getRejectAmount().abs());
|
|
|
+// //最后出库时间
|
|
|
+// orderOutRejectItemVO.setOutTime(LocalDateTime.now());
|
|
|
+// }
|
|
|
+// //实体转换
|
|
|
+// OrderOutRejectItem orderOutRejectItem = orderOutRejectItemConvert.convertToPo(orderOutRejectItemVO);
|
|
|
+// //明细新建
|
|
|
+// orderOutRejectItemMapper.insert(orderOutRejectItem);
|
|
|
+// orderOutRejectItemVO.setItemId(orderOutRejectItem.getItemId());
|
|
|
+// }
|
|
|
+//
|
|
|
+// return orderOutRejectItemVOList;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ return intoReturnItemVOList;
|
|
|
+ }
|
|
|
|
|
|
- @Autowired
|
|
|
- private IntoReturnMapper intoReturnMapper;
|
|
|
|
|
|
}
|