935090232@qq.com
2022-03-18 baa1c7ecdc47c5da14790b422007ce21e0547ffa
重构:订单创建和修改方法
3 files modified
222 ■■■■ changed files
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java 104 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java 116 ●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml 2 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
@@ -19,21 +19,27 @@
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.service.OperationLogService;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.enums.OperationButtonEnum;
import com.matrix.system.enums.OperationFunctionEnum;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.dto.MoneyCardOperationDto;
import com.matrix.system.hive.dto.MoneyCardPayDto;
import com.matrix.system.hive.dto.ProjUseOperationDto;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.plugin.util.MoneyUtil;
import com.matrix.system.hive.service.CodeService;
import com.matrix.system.hive.service.MoneyCardUseService;
import com.matrix.system.hive.service.SysProjUseService;
import com.matrix.system.score.constant.ScoreSettingConstant;
import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -52,6 +58,9 @@
@Component
public class SysOrderServiceHelper {
    @Autowired
    ScoreVipDetailService scoreVipDetailService;
    @Autowired
    SysVipInfoDao sysVipInfoDao;
@@ -74,6 +83,11 @@
    SysOutStoreItemDao sysOutStoreItemDao;
    @Autowired
    private SysOrderDao sysOrderDao;
    @Autowired
    private OperationLogService operationLogService;
    @Autowired
    ShoppingGoodsDao shoppingGoodsDao;
    @Autowired
@@ -88,6 +102,10 @@
    @Autowired
    MoneyCardUseService moneyCardUseService;
    @Autowired
    private SysOrderItemDao orderItemDao;
    /**
     * 创建支付流水
@@ -259,6 +277,7 @@
    /**
     * 新增出库单并更新本店库存
     * jyytodo 继续优化
     *
     * @param order
     */
    public void addOutStore(SysOrder order) {
@@ -373,10 +392,9 @@
    }
    /**
     * 设置会员消费积分
     *
     * @param pageOrder
     */
    public void addVipScore(SysOrder pageOrder) {
@@ -527,8 +545,90 @@
        }
    }
    /**
     * 创建订单信息
     *
     * @param sysOrder
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public SysOrder saveOrder(SysOrder sysOrder) {
        //校验参数 jyytodo
        // 计算订单折扣金额,收款情况下 计算订单总额
        double zkTotal = 0.0;
        // 页面的pageOrder 参数只包含支付金额信息,不带有购买商品
        for (SysOrderItem item : sysOrder.getItems()) {
            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId());
            item.setType(shoppingGoods.getGoodType());
            if (item.getZkPrice() == 0) {
                item.setIsFree(Dictionary.FLAG_YES);
            }
            Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
            zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
            item.setStatus(Dictionary.ORDER_STATU_DFK);
        }
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        sysOrder.setZkTotal(zkTotal);
        sysOrder.setStatu(Dictionary.ORDER_STATU_DFK);
        sysOrder.setStaffId(user.getSuId());
        sysOrder.setCompanyId(user.getCompanyId());
        //新增订单
        sysOrder.setOrderNo(codeService.getOrderCode());
        sysOrderDao.insert(sysOrder);
        //保存单据明细
        sysOrder.getItems().forEach(sysOrderItem -> {
            sysOrderItem.setOrderId(sysOrder.getId());
            orderItemDao.insert(sysOrderItem);
        });
        //保存单据日志
        operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
                OperationFunctionEnum.ORDER,
                OperationButtonEnum.CREATE,
                sysOrder.getId(),
                sysOrder.getOrderNo(),
                sysOrder.getVipId());
        return sysOrder;
    }
    /**
     * 修改订单信息
     *
     * @param sysOrder
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public SysOrder modifyOrder(SysOrder sysOrder) {
        // 计算订单折扣金额,收款情况下 计算订单总额
        double zkTotal = 0.0;
        for (SysOrderItem item : sysOrder.getItems()) {
            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId());
            item.setType(shoppingGoods.getGoodType());
            if (item.getZkPrice() == 0) {
                item.setIsFree(Dictionary.FLAG_YES);
            }
            Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
            zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
        }
        sysOrder.setZkTotal(zkTotal);
        //更新订单
        sysOrderDao.update(sysOrder);
        //删除原有订单明细
        orderItemDao.deleteByOrderId(sysOrder.getId());
        sysOrder.getItems().forEach(sysOrderItem -> {
            sysOrderItem.setOrderId(sysOrder.getId());
            orderItemDao.insert(sysOrderItem);
        });
        return sysOrder;
    }
}
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -37,8 +37,6 @@
import com.matrix.system.hive.pojo.ShoppingCarItem;
import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
import com.matrix.system.hive.service.*;
import com.matrix.system.score.constant.ScoreSettingConstant;
import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting;
import com.matrix.system.wechart.templateMsg.UniformMsgParam;
@@ -145,7 +143,6 @@
    private SysOrderServiceHelper sysOrderServiceHelper;
    @Autowired
    MoneyCardUseService moneyCardUseService;
@@ -156,91 +153,15 @@
    @Transactional(rollbackFor = Exception.class)
    public SysOrder checkAndSaveOrder(SysOrder sysOrder) {
        // 计算订单折扣金额,收款情况下 计算订单总额
        double zkTotal = 0.0;
        // 判断是否为退款
        String orderStatus = Dictionary.ORDER_STATU_DFK;
        if (Dictionary.ORDER_STATU_TK.equals(sysOrder.getStatu())) {
            orderStatus = Dictionary.ORDER_STATU_TK;
        }
        // 页面的pageOrder 参数只包含支付金额信息,不带有购买商品
        for (SysOrderItem item : sysOrder.getItems()) {
            // 若为退款,则先更新原有数量
            if (orderStatus.equals(Dictionary.ORDER_STATU_TK)) {
                SysOrderItem sysOrderItem = new SysOrderItem();
                sysOrderItem.setId(item.getId());
                sysOrderItem.setCount(item.getPreCount() - item.getCount());
                orderItemDao.update(sysOrderItem);
            }
            item.setId(null);
            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId());
            item.setType(shoppingGoods.getGoodType());
            if (item.getZkPrice() == 0) {
                item.setIsFree(Dictionary.FLAG_YES);
            }
            // 订单欠款减去支付金额 设置实际欠款
            Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
            zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
            item.setStatus(orderStatus);
        }
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        sysOrder.setZkTotal(zkTotal);
        sysOrder.setStatu(orderStatus);
        SysOrder source = null;
        if (sysOrder.getId() != null) {
            source = sysOrderDao.selectById(sysOrder.getId());
        }
        sysOrder.setStaffId(source != null ? source.getStaffId() : user.getSuId());
        sysOrder.setCompanyId(source != null ? source.getCompanyId() : user.getCompanyId());
        if (sysOrder.getId() == null) {
            //新增订单
            sysOrder.setOrderNo(codeService.getOrderCode());
            sysOrderDao.insert(sysOrder);
            //保存单据日志
            operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
                    OperationFunctionEnum.ORDER,
                    OperationButtonEnum.CREATE,
                    sysOrder.getId(),
                    sysOrder.getOrderNo(),
                    sysOrder.getVipId());
        if (Objects.isNull(sysOrder.getId())) {
            LogUtil.info("新增正向订单");
            return sysOrderServiceHelper.saveOrder(sysOrder);
        } else {
            //更新订单
            sysOrderDao.update(sysOrder);
            //删除原有订单明细
            orderItemDao.deleteByOrderId(sysOrder.getId());
            //保存单据日志
            operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
                    OperationFunctionEnum.ORDER,
                    OperationButtonEnum.UPDATE,
                    sysOrder.getId(),
                    sysOrder.getOrderNo(),
                    sysOrder.getVipId(),
                    "修改订单内容");
            LogUtil.info("修改订单");
            return sysOrderServiceHelper.modifyOrder(sysOrder);
        }
        sysOrder.getItems().forEach(sysOrderItem -> {
            sysOrderItem.setOrderId(sysOrder.getId());
            if (sysOrder.getStatu().equals(Dictionary.ORDER_STATU_TK)) {
                // 取负数
                sysOrderItem.setCount(-sysOrderItem.getCount());
                orderItemDao.insert(sysOrderItem);
                // 调整回来
                sysOrderItem.setCount(-sysOrderItem.getCount());
            } else {
                orderItemDao.insert(sysOrderItem);
            }
        });
        return sysOrder;
    }
    /**
@@ -485,7 +406,7 @@
        sysVipInfoService.updateDealStatus(pageOrder.getVipId(), BooleanEnum.TRUE.getValue());
        //添加支付流水
        sysOrderServiceHelper.addOrderFlow(pageOrder,false);
        sysOrderServiceHelper.addOrderFlow(pageOrder, false);
        //扣除储值卡余额
        sysOrderServiceHelper.cardPaySk(pageOrder);
@@ -533,7 +454,7 @@
     * @param pageOrder
     */
    private void updateOrderInfo(SysOrder pageOrder) {
        LogUtil.info("付款更新订单信息 id={}",pageOrder.getId());
        LogUtil.info("付款更新订单信息 id={}", pageOrder.getId());
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        pageOrder.setCashierId(user.getSuId());
@@ -594,7 +515,7 @@
        //检查业绩设置
        checkOrderAchieve(pageOrder);
        LogUtil.info("订单满足支付条件 id={}",pageOrder.getId());
        LogUtil.info("订单满足支付条件 id={}", pageOrder.getId());
    }
@@ -631,12 +552,9 @@
    }
    /**
     * 补交
     *
     * @author:姜友瑶
     * @date 2016年9月19日
     */
@@ -646,7 +564,7 @@
        SysOrder sourceOrder = sysOrderDao.selectById(pageOrder.getId());
        //添加支付流水
        sysOrderServiceHelper.addOrderFlow(pageOrder,true);
        sysOrderServiceHelper.addOrderFlow(pageOrder, true);
        //扣除储值卡余额
        sysOrderServiceHelper.cardPaySk(pageOrder);
@@ -667,7 +585,7 @@
        if (refundTotal == pageOrder.getArrears()) {
            sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK);
        }else{
        } else {
            sourceOrder.setStatu(Dictionary.ORDER_STATU_QK);
        }
        sourceOrder.setArrears(sourceOrder.getArrears() - refundTotal);
@@ -675,14 +593,6 @@
        sourceOrder.setCashPay(sourceOrder.getCashPay() == null ? 0 : sourceOrder.getCashPay() + cashPayTotal);
        sysOrderDao.update(sourceOrder);
    }
    /**
@@ -773,7 +683,7 @@
        order.setFlows(czVo.getFlows());
        sysOrderServiceHelper.addOrderFlow(order,false);
        sysOrderServiceHelper.addOrderFlow(order, false);
        // 添加员工业绩
        achieveNewService.addAchaeveByOrder(order);
@@ -867,7 +777,7 @@
        // 添加订单收款流水
        sysOrderServiceHelper.addOrderFlow(sysOrder,false);
        sysOrderServiceHelper.addOrderFlow(sysOrder, false);
        //退款退套餐退项目
        refundProjUse(sysOrder);
        //删除积分
zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
@@ -88,7 +88,6 @@
    <insert id="insert" parameterType="SysOrderItem"
            useGeneratedKeys="true" keyProperty="id">
        INSERT INTO sys_order_item (
        ID,
        ORDER_ID,
        COUNT,
        refundCount,
@@ -106,7 +105,6 @@
        pay_method_detail
        )
        VALUES (
        #{id},
        #{orderId},
        #{count},
        #{refundCount},