|
@@ -8,14 +8,17 @@ import cn.hutool.core.date.DateUtil;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
+import com.gree.mall.miniapp.bean.material.stock.WorkerNormStockBean;
|
|
import com.gree.mall.miniapp.bean.material.stock.WorkerStockDTO;
|
|
import com.gree.mall.miniapp.bean.material.stock.WorkerStockDTO;
|
|
import com.gree.mall.miniapp.bean.order.OrderCount;
|
|
import com.gree.mall.miniapp.bean.order.OrderCount;
|
|
import com.gree.mall.miniapp.bean.order.SettlementOrderDetail;
|
|
import com.gree.mall.miniapp.bean.order.SettlementOrderDetail;
|
|
import com.gree.mall.miniapp.bean.order.WorkerOrderBuy;
|
|
import com.gree.mall.miniapp.bean.order.WorkerOrderBuy;
|
|
import com.gree.mall.miniapp.bean.order.WorkerOrderDetail;
|
|
import com.gree.mall.miniapp.bean.order.WorkerOrderDetail;
|
|
import com.gree.mall.miniapp.bean.user.CurrentCompanyWechat;
|
|
import com.gree.mall.miniapp.bean.user.CurrentCompanyWechat;
|
|
|
|
+import com.gree.mall.miniapp.commonmapper.MaterialMapper;
|
|
import com.gree.mall.miniapp.enums.*;
|
|
import com.gree.mall.miniapp.enums.*;
|
|
import com.gree.mall.miniapp.enums.material.PartsAttrEnum;
|
|
import com.gree.mall.miniapp.enums.material.PartsAttrEnum;
|
|
|
|
+import com.gree.mall.miniapp.enums.material.WebsitGoodsTypeEnum;
|
|
import com.gree.mall.miniapp.exception.RemoteServiceException;
|
|
import com.gree.mall.miniapp.exception.RemoteServiceException;
|
|
import com.gree.mall.miniapp.logic.common.CommonLogic;
|
|
import com.gree.mall.miniapp.logic.common.CommonLogic;
|
|
import com.gree.mall.miniapp.logic.common.outside.WechatLogic;
|
|
import com.gree.mall.miniapp.logic.common.outside.WechatLogic;
|
|
@@ -26,6 +29,7 @@ import com.gree.mall.miniapp.utils.DateUtils;
|
|
import com.gree.mall.miniapp.utils.StringUtil;
|
|
import com.gree.mall.miniapp.utils.StringUtil;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -109,6 +113,9 @@ public class PayOrderLogic {
|
|
@Autowired
|
|
@Autowired
|
|
AdminWebsitService adminWebsitService;
|
|
AdminWebsitService adminWebsitService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ MaterialMapper materialMapper;
|
|
|
|
+
|
|
public Page<WebsitNormCharge> pageCharge(String name, String categoryId, String orderId,Integer pageNum, Integer pageSize) {
|
|
public Page<WebsitNormCharge> pageCharge(String name, String categoryId, String orderId,Integer pageNum, Integer pageSize) {
|
|
CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
|
|
CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
|
|
Page<WebsitNormCharge> list = websitNormChargeService.lambdaQuery()
|
|
Page<WebsitNormCharge> list = websitNormChargeService.lambdaQuery()
|
|
@@ -159,7 +166,7 @@ public class PayOrderLogic {
|
|
CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
|
|
CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
|
|
workerOrderBuy.setCompanyWechatId(currentCompanyWechat.getCompanyWechatId());
|
|
workerOrderBuy.setCompanyWechatId(currentCompanyWechat.getCompanyWechatId());
|
|
workerOrderBuy.setCompanyWechatName(currentCompanyWechat.getCompanyName());
|
|
workerOrderBuy.setCompanyWechatName(currentCompanyWechat.getCompanyName());
|
|
- workerOrderBuy.setWorkerId(currentCompanyWechat.getUser().getUserId());
|
|
|
|
|
|
+ workerOrderBuy.setWorkerId(currentCompanyWechat.getUser().getWorkerNumber());
|
|
workerOrderBuy.setWorkerName(currentCompanyWechat.getUser().getNickName());
|
|
workerOrderBuy.setWorkerName(currentCompanyWechat.getUser().getNickName());
|
|
workerOrderBuy.setWorkerMobile(currentCompanyWechat.getUser().getMobile());
|
|
workerOrderBuy.setWorkerMobile(currentCompanyWechat.getUser().getMobile());
|
|
workerOrderBuy.setCreateBy(currentCompanyWechat.getUser().getNickName());
|
|
workerOrderBuy.setCreateBy(currentCompanyWechat.getUser().getNickName());
|
|
@@ -182,13 +189,14 @@ public class PayOrderLogic {
|
|
|
|
|
|
BigDecimal num = new BigDecimal("0");
|
|
BigDecimal num = new BigDecimal("0");
|
|
|
|
|
|
|
|
+ Map<String, WorkerNormStockBean> workerStockMap = new HashMap<>();
|
|
for (WorkerOrderItem workerOrderItem : workerOrderBuy.getWorkerOrderItems()) {
|
|
for (WorkerOrderItem workerOrderItem : workerOrderBuy.getWorkerOrderItems()) {
|
|
|
|
|
|
workerOrderItem.setOrderId(workerOrderBuy.getOrderId());
|
|
workerOrderItem.setOrderId(workerOrderBuy.getOrderId());
|
|
workerOrderItem.setSettlementType(workerOrderBuy.getSettlementType());
|
|
workerOrderItem.setSettlementType(workerOrderBuy.getSettlementType());
|
|
|
|
|
|
if (StringUtil.isEmpty(workerOrderBuy.getCategoryId()))
|
|
if (StringUtil.isEmpty(workerOrderBuy.getCategoryId()))
|
|
- this.addFuCai(workerOrderItem);
|
|
|
|
|
|
+ this.addFuCai(workerStockMap, workerOrderItem, workerOrderBuy);
|
|
else
|
|
else
|
|
this.addPeiJian(workerOrderItem);
|
|
this.addPeiJian(workerOrderItem);
|
|
|
|
|
|
@@ -201,6 +209,18 @@ public class PayOrderLogic {
|
|
num = num.add(workerOrderItem.getNum());
|
|
num = num.add(workerOrderItem.getNum());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(workerStockMap)) {
|
|
|
|
+ // 检查辅材物料收费类型的库存是否够扣
|
|
|
|
+ for (Map.Entry<String, WorkerNormStockBean> entry : workerStockMap.entrySet()) {
|
|
|
|
+ final WorkerNormStockBean stockBean = entry.getValue();
|
|
|
|
+ if (!stockBean.getIsSmall()
|
|
|
|
+ && (Objects.isNull(stockBean.getStockQty()) || stockBean.getRealQty().compareTo(stockBean.getStockQty()) > 0)) {
|
|
|
|
+ WebsitNormCharge websitNormCharge = websitNormChargeService.getById(stockBean.getNormId());
|
|
|
|
+ throw new RemoteServiceException("”" + websitNormCharge.getNormName() + "“收费标准关联的" + stockBean.getGoodsName() + "库存数量不够使用");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
if (workerProceAmount.doubleValue() > 0.01) {
|
|
if (workerProceAmount.doubleValue() > 0.01) {
|
|
workerOrderBuy.setWorkerProceAmount(workerProceAmount.setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
workerOrderBuy.setWorkerProceAmount(workerProceAmount.setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
@@ -268,8 +288,47 @@ public class PayOrderLogic {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private void addFuCai(WorkerOrderItem workerOrderItem) {
|
|
|
|
|
|
+ private void addFuCai(Map<String, WorkerNormStockBean> workerStockMap, WorkerOrderItem workerOrderItem, WorkerOrderBuy workerOrderBuy) {
|
|
WebsitNormCharge websitNormCharge = websitNormChargeService.getById(workerOrderItem.getGoodsId());
|
|
WebsitNormCharge websitNormCharge = websitNormChargeService.getById(workerOrderItem.getGoodsId());
|
|
|
|
+ if (websitNormCharge.getNormType().equals("M")) {
|
|
|
|
+ // 获取当前关联师傅库存记录
|
|
|
|
+ List<WorkerNormStockBean> stockBeanList = materialMapper.queryWorkerStockQty(workerOrderItem.getGoodsId(), workerOrderBuy.getWorkerId());
|
|
|
|
+ if (CollectionUtil.isNotEmpty(stockBeanList)) {
|
|
|
|
+ // 获取待支付的师傅收费订单
|
|
|
|
+ final List<WorkerOrder> workerOrderList = workerOrderService.lambdaQuery()
|
|
|
|
+ .eq(WorkerOrder::getCompanyWechatId, workerOrderBuy.getCompanyWechatId())
|
|
|
|
+ .eq(WorkerOrder::getWorkerId, workerOrderBuy.getWorkerId())
|
|
|
|
+ .eq(WorkerOrder::getPayStatus, PayStatusEnum.WAIT.getKey())
|
|
|
|
+ .list();
|
|
|
|
+ final List<WorkerOrderItem> orderItemList = workerOrderItemService.lambdaQuery()
|
|
|
|
+ .in(WorkerOrderItem::getOrderId, workerOrderList.stream().map(WorkerOrder::getOrderId).collect(Collectors.toList()))
|
|
|
|
+ .eq(WorkerOrderItem::getGoodsId, workerOrderItem.getGoodsId())
|
|
|
|
+ .list();
|
|
|
|
+
|
|
|
|
+ BigDecimal totalNum = workerOrderItem.getNum();
|
|
|
|
+ if (CollectionUtil.isNotEmpty(orderItemList)) {
|
|
|
|
+ for (WorkerOrderItem orderItem : orderItemList) {
|
|
|
|
+ totalNum = totalNum.add(orderItem.getNum());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (WorkerNormStockBean stockBean : stockBeanList) {
|
|
|
|
+ // 当前订单收费标准扣总数量
|
|
|
|
+ BigDecimal useTotalQty = totalNum.multiply(stockBean.getQty());
|
|
|
|
+ if (!workerStockMap.containsKey(stockBean.getWorkerGoodsId())) {
|
|
|
|
+ WorkerNormStockBean bean = new WorkerNormStockBean();
|
|
|
|
+ BeanUtils.copyProperties(stockBean, bean);
|
|
|
|
+ bean.setRealQty(BigDecimal.ZERO);
|
|
|
|
+ workerStockMap.put(bean.getWorkerGoodsId(), bean);
|
|
|
|
+ }
|
|
|
|
+ WorkerNormStockBean stock = workerStockMap.get(stockBean.getWorkerGoodsId());
|
|
|
|
+ stock.setRealQty(stock.getRealQty().add(useTotalQty));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
workerOrderItem.setTotalAmount(websitNormCharge.getNormAmount().multiply(Convert.toBigDecimal(workerOrderItem.getNum())));
|
|
workerOrderItem.setTotalAmount(websitNormCharge.getNormAmount().multiply(Convert.toBigDecimal(workerOrderItem.getNum())));
|
|
workerOrderItem.setGoodsAmount(websitNormCharge.getNormAmount());
|
|
workerOrderItem.setGoodsAmount(websitNormCharge.getNormAmount());
|
|
workerOrderItem.setGoodsCode(websitNormCharge.getNormCode());
|
|
workerOrderItem.setGoodsCode(websitNormCharge.getNormCode());
|
|
@@ -451,6 +510,22 @@ public class PayOrderLogic {
|
|
log.error(workerOrder.getOrderId() + " 师傅配件扣自有库存失败: ", e);
|
|
log.error(workerOrder.getOrderId() + " 师傅配件扣自有库存失败: ", e);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 辅材扣库存
|
|
|
|
+ try {
|
|
|
|
+ if (workerOrder.getGoodsType().equals(WebsitGoodsTypeEnum.M.toString())) {
|
|
|
|
+ List<WorkerStockDTO> workerStockDTOS = new ArrayList<>();
|
|
|
|
+ this.makeSubStockData(workerOrder, workerOrderItems, workerStockDTOS);
|
|
|
|
+
|
|
|
|
+ if (CollectionUtil.isNotEmpty(workerStockDTOS)) {
|
|
|
|
+ // 开始处理库存
|
|
|
|
+ workerStockLogic.handleWorkerStock(workerStockDTOS);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(workerOrder.getOrderId() + " 师傅辅材扣库存失败: ", e);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
if (payType.equals(PayTypeEnum.WECHAT.getKey())) {
|
|
if (payType.equals(PayTypeEnum.WECHAT.getKey())) {
|
|
String transcationId = wechatLogic.paymentFkm(workerOrder.getOrderId(), workerOrder.getTotalAmount(), authCode, "Y", ip,
|
|
String transcationId = wechatLogic.paymentFkm(workerOrder.getOrderId(), workerOrder.getTotalAmount(), authCode, "Y", ip,
|
|
adminWebsit.getPayWorkerCodeId(),workerOrder.getSource());
|
|
adminWebsit.getPayWorkerCodeId(),workerOrder.getSource());
|
|
@@ -468,6 +543,67 @@ public class PayOrderLogic {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void makeSubStockData(WorkerOrder workerOrder, List<WorkerOrderItem> workerOrderItems, List<WorkerStockDTO> workerStockDTOS) {
|
|
|
|
+ Map<String, WorkerNormStockBean> workerStockMap = new HashMap<>();
|
|
|
|
+ for (WorkerOrderItem item : workerOrderItems) {
|
|
|
|
+ WebsitNormCharge websitNormCharge = websitNormChargeService.getById(item.getGoodsId());
|
|
|
|
+ if (websitNormCharge.getNormType().equals("M")) {
|
|
|
|
+ // 获取当前关联师傅库存记录
|
|
|
|
+ List<WorkerNormStockBean> stockBeanList = materialMapper.queryWorkerStockQty(item.getGoodsId(), workerOrder.getWorkerId());
|
|
|
|
+ if (CollectionUtil.isNotEmpty(stockBeanList)) {
|
|
|
|
+ BigDecimal totalNum = item.getNum();
|
|
|
|
+ for (WorkerNormStockBean stockBean : stockBeanList) {
|
|
|
|
+ // 当前订单收费标准扣总数量
|
|
|
|
+ BigDecimal useTotalQty = totalNum.multiply(stockBean.getQty());
|
|
|
|
+ if (!workerStockMap.containsKey(stockBean.getWorkerGoodsId())) {
|
|
|
|
+ WorkerNormStockBean bean = new WorkerNormStockBean();
|
|
|
|
+ BeanUtils.copyProperties(stockBean, bean);
|
|
|
|
+ bean.setRealQty(BigDecimal.ZERO);
|
|
|
|
+ workerStockMap.put(bean.getWorkerGoodsId() + item.getGoodsAmount(), bean);
|
|
|
|
+ }
|
|
|
|
+ WorkerNormStockBean stock = workerStockMap.get(stockBean.getWorkerGoodsId() + item.getGoodsAmount());
|
|
|
|
+ stock.setRealQty(stock.getRealQty().add(useTotalQty));
|
|
|
|
+ stock.setNormPrice(item.getGoodsAmount());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (Map.Entry<String, WorkerNormStockBean> entry : workerStockMap.entrySet()) {
|
|
|
|
+ final WorkerNormStockBean bean = entry.getValue();
|
|
|
|
+ // 库存减少
|
|
|
|
+ WorkerStockDTO workerStockDTO = new WorkerStockDTO();
|
|
|
|
+ workerStockDTO.setCompanyWechatId(workerOrder.getCompanyWechatId());
|
|
|
|
+ workerStockDTO.setCompanyWechatName(workerOrder.getCompanyWechatName());
|
|
|
|
+ workerStockDTO.setIdentity(workerOrder.getIdentity());
|
|
|
|
+ workerStockDTO.setWorkerId(workerOrder.getWorkerId());
|
|
|
|
+ workerStockDTO.setWorkerName(workerOrder.getWorkerName());
|
|
|
|
+ workerStockDTO.setWebsitId(workerOrder.getWebsitId());
|
|
|
|
+ workerStockDTO.setWebsitName(workerOrder.getWebsitName());
|
|
|
|
+ workerStockDTO.setSdate(workerOrder.getCreateTime());
|
|
|
|
+ workerStockDTO.setWorkerWebsitId(workerOrder.getWebsitId());
|
|
|
|
+ workerStockDTO.setWorkerWebsitName(workerOrder.getWebsitName());
|
|
|
|
+ workerStockDTO.setGoodsId(bean.getWorkerGoodsId());
|
|
|
|
+ workerStockDTO.setGoodsName(bean.getGoodsName());
|
|
|
|
+ workerStockDTO.setGoodsType(WebsitGoodsTypeEnum.M.toString());
|
|
|
|
+ workerStockDTO.setPrice(bean.getNormPrice());
|
|
|
|
+ workerStockDTO.setUnitName(bean.getSalesUnit());
|
|
|
|
+ workerStockDTO.setRef(workerOrder.getOrderId());
|
|
|
|
+ workerStockDTO.setRefType("辅材销售");
|
|
|
|
+ workerStockDTO.setPartsAttr(PartsAttrEnum.NEW.toString());
|
|
|
|
+ workerStockDTO.setChangeQty(bean.getRealQty());
|
|
|
|
+ workerStockDTO.setDirectFlag("SUB");
|
|
|
|
+ workerStockDTO.setFlag("USED");
|
|
|
|
+ workerStockDTO.setObj("客户");
|
|
|
|
+ workerStockDTO.setWorkerOrderNo(workerOrder.getWorkerOrderId());
|
|
|
|
+ workerStockDTO.setRemark(workerOrder.getRemark());
|
|
|
|
+ workerStockDTO.setOperateBy(workerOrder.getWorkerName());
|
|
|
|
+ workerStockDTO.setOperateTime(DateUtil.date());
|
|
|
|
+
|
|
|
|
+ workerStockDTOS.add(workerStockDTO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
private void addSettlementManaulWorker(WorkerOrder workerOrder, List<WorkerOrderItem> workerOrderItems) {
|
|
private void addSettlementManaulWorker(WorkerOrder workerOrder, List<WorkerOrderItem> workerOrderItems) {
|
|
CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
|
|
CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
|
|
WorkerSettlementManual one = workerSettlementManualService.lambdaQuery()
|
|
WorkerSettlementManual one = workerSettlementManualService.lambdaQuery()
|