JiangYouYao
2022-03-18 e1ff283be2a6ca6ed8cead6248b4efa8eb005f6e
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -9,7 +9,6 @@
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.app.dto.OrderListDto;
import com.matrix.system.app.mapper.SysProjUseMapper;
@@ -30,6 +29,7 @@
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.dto.GoodsSealLimitDto;
import com.matrix.system.hive.dto.MoneyCardPayDto;
import com.matrix.system.hive.dto.SysOrderItemDto;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.plugin.util.MoneyUtil;
@@ -68,7 +68,7 @@
    @Autowired
    SysVipInfoDao sysVipInfoDao;
    @Autowired
    SysOutStoreDao sysOutStoreDao;
    SysOutStoreService sysOutStoreService;
    @Autowired
    SysOutStoreItemDao sysOutStoreItemDao;
    @Autowired
@@ -153,7 +153,7 @@
        if (Objects.isNull(sysOrder.getId())) {
            LogUtil.info("新增正向订单");
            return sysOrderServiceHelper.saveOrder(sysOrder);
            return sysOrderServiceHelper.saveOrder(sysOrder,SysOrder.ORDER_TYPE_SEAL);
        } else {
            LogUtil.info("修改订单");
            return sysOrderServiceHelper.modifyOrder(sysOrder);
@@ -197,6 +197,7 @@
        //储值卡退款
        sysOrderServiceHelper.returnMoneyCardPay(order);
        //套餐项目取消
        List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(order.getId());
        for (SysOrderItem orderItem : sysOrderItems) {
            // 充值卡类型退款
@@ -214,24 +215,14 @@
        //删除出库单,恢复库存
        SysOutStore sysOutStore = new SysOutStore();
        sysOutStore.setOrderId(order.getId());
        List<SysOutStore> sysOutStores = sysOutStoreDao.selectByModel(sysOutStore);
        List<SysOutStore> sysOutStores = sysOutStoreService.findByModel(sysOutStore);
        if (sysOutStores.size() == 1) {
            sysOutStore = sysOutStores.get(0);
            List<SysOutStoreItem> outStoreItemList = sysOutStoreItemDao.selectByOrderId(sysOutStore.getId());
            for (SysOutStoreItem item : outStoreItemList) {
                SysStoreInfo sysStoreInfo = storeInfoDao.selectById(item.getStoreId());
                sysStoreInfo.setStoreTotal(sysStoreInfo.getStoreTotal() + item.getAmount());
                //更新库存
                storeInfoDao.update(sysStoreInfo);
            }
            sysOutStoreDao.deleteById(sysOutStore.getId());
            sysOutStoreItemDao.deleteByOrderId(sysOutStore.getId());
            sysOutStoreService.cancelOutStore(sysOutStore.getId());
        }
        // 删除业绩
        AchieveNew achieveNew = new AchieveNew();
        achieveNew.setOrderId(order.getId());
        achieveNewService.removeByModel(achieveNew);
        achieveNewService.removeByOrderId(order.getId());
        // 删除收款记录
        sysOrderFlowDao.deleteByOrderId(order.getId());
@@ -242,6 +233,7 @@
        // 取消订单
        order.setStatu(Dictionary.ORDER_STATU_YQX);
        sysOrderDao.update(order);
        //保存单据日志
        operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(),
                OperationFunctionEnum.ORDER,
@@ -285,16 +277,13 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateReceiptMoney(SysOrder pageOrder) throws GlobleException {
    public void payOrder(SysOrder pageOrder) throws GlobleException {
        //校验订单是否满足收款条件
        checkOrderAblePay(pageOrder);
        // 更新订单主表信息
        updateOrderInfo(pageOrder);
        // 设置用户为成交客户
        sysVipInfoService.updateDealStatus(pageOrder.getVipId(), BooleanEnum.TRUE.getValue());
        payEndUpdateOrderInfo(pageOrder);
        //添加支付流水
        sysOrderServiceHelper.addOrderFlow(pageOrder, false);
@@ -344,7 +333,7 @@
     *
     * @param pageOrder
     */
    private void updateOrderInfo(SysOrder pageOrder) {
    private void payEndUpdateOrderInfo(SysOrder pageOrder) {
        LogUtil.info("付款更新订单信息 id={}", pageOrder.getId());
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        pageOrder.setCashierId(user.getSuId());
@@ -381,8 +370,8 @@
        sysOrderDao.update(pageOrder);
        // 设置用户为成交客户
        sysVipInfoService.updateDealStatus(pageOrder.getVipId(), BooleanEnum.TRUE.getValue());
    }
    /**
@@ -497,91 +486,33 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public SysOrder updateAddCardMoney(CzXkVo czVo) {
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
//        SysVipInfo vip = (SysVipInfo) WebUtil.getSession().getAttribute(SystemConstance.CURRENT_CUSTOMER);
//        czVo.setVipId(vip.getId());
        //更新会员会员卡金额
        MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId());
        cardUser.setRealMoney(MoneyUtil.add(cardUser.getRealMoney(), czVo.getBjmoney()));
        cardUser.setGiftMoney(MoneyUtil.add(cardUser.getGiftMoney(), czVo.getGiftMoney()));
        moneyCardUseDao.update(cardUser);
        // 为会员新增积分
        SysVipInfo vipInfo = sysVipInfoDao.selectById(cardUser.getVipId());
        vipInfo.setPointAll(vipInfo.getPointAll() == null ? 0 : vipInfo.getPointAll() + czVo.getJf());
        sysVipInfoDao.update(vipInfo);
    public SysOrder moneyCardCz(CzXkVo czVo) {
        // 新增一个充值订单
        SysOrder order = new SysOrder();
        order.setArrears(0D);
        order.setTotal(czVo.getBjmoney());
        order.setZkTotal(czVo.getBjmoney());
        order.setCashPay(czVo.getBjmoney());
        order.setShopId(user.getShopId());
        order.setOrderNo(codeService.getOrderCode());
        order.setVipId(czVo.getVipId());
        Date orderTime = new Date();
        if (StringUtils.isNotBlank(czVo.getDateTime())) {
            orderTime = DateUtil.stringToDateNew(czVo.getDateTime(), DateUtil.DATE_FORMAT_DD);
        }
        order.setOrderTime(orderTime);
        order.setPayTime(orderTime);
        order.setRemark(cardUser.getCardName());
        order.setStaffId(user.getSuId());
        order.setIsCross(2 + "");
        order.setOrderType(SysOrder.ORDER_TYPE_SEAL);
        order.setStatu(Dictionary.ORDER_STATU_YFK);
        order.setCompanyId(user.getCompanyId());
        sysOrderDao.insert(order);
        SysOrder order =sysOrderServiceHelper.createCzOrder(czVo);
        SysOrderItem orderItem = new SysOrderItem();
        orderItem.setOrderId(order.getId());
        orderItem.setOrderNo(order.getOrderNo());
        orderItem.setArrears(0D);
        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectVipCzGoods();
        orderItem.setGoodsId(shoppingGoods.getId());
        orderItem.setPayMethod(Dictionary.PAY_TYPE_MOENY);
        orderItem.setCashPay(czVo.getBjmoney());
        orderItem.setZkPrice(czVo.getBjmoney());
        orderItem.setCardPay(0D);
        orderItem.setType(Dictionary.SHOPPING_GOODS_TYPE_CZK);
        orderItem.setCount(1);
        orderItem.setIsFree(Dictionary.FLAG_NO);
        orderItem.setPrice(czVo.getBjmoney());
        orderItem.setStatus(Dictionary.ORDER_STATU_YFK);
        orderItem.setAchieveList(czVo.getAchaeveList());
        orderItem.setShoppingGoods(shoppingGoods);
        orderItemDao.insert(orderItem);
        List<SysOrderItem> items = new ArrayList<>();
        items.add(orderItem);
        order.setItems(items);
        //新增会员卡金额
        MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId());
        MoneyCardPayDto moneyCardPayDto=new MoneyCardPayDto();
        moneyCardPayDto.setRealMoney(MoneyUtil.add(cardUser.getRealMoney(), czVo.getBjmoney()));
        moneyCardPayDto.setGiftMoney(MoneyUtil.add(cardUser.getGiftMoney(), czVo.getGiftMoney()));
        moneyCardPayDto.setCarUseId(cardUser.getId());
        moneyCardPayDto.setOrderId(order.getId());
        moneyCardPayDto.setOrderNo(order.getOrderNo());
        moneyCardPayDto.setType(MoneyCardUseFlow.USE_TYPE_CZ);
        moneyCardUseService.changeMoneyCard(Arrays.asList(moneyCardPayDto));
        // 更新订单主表信息
        payEndUpdateOrderInfo(order);
        //设置卡项使用流水
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        moneyCardUseFlow.setTotal(czVo.getBjmoney());
        moneyCardUseFlow.setGiftMoney(czVo.getGiftMoney());
        moneyCardUseFlow.setCarUseId(czVo.getCardId());
        moneyCardUseFlow.setVipId(czVo.getVipId());
        moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CZ);
        moneyCardUseFlow.setOrderNo(order.getOrderNo());
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(user.getSuId());
        moneyCardUseFlow.setBalance(cardUser.getGiftMoney() + cardUser.getRealMoney());
        moneyCardUseFlow.setCarUseId(cardUser.getId());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
        order.setFlows(czVo.getFlows());
        //添加支付流水
        sysOrderServiceHelper.addOrderFlow(order, false);
        // 添加员工业绩
        // 设置业绩
        achieveNewService.addAchaeveByOrder(order);
        //设置会员积分
        sysOrderServiceHelper.addVipScore(order);
        return order;
@@ -637,7 +568,6 @@
        SysOrder sourceOrder = new SysOrder();
        sourceOrder.setId(sysOrder.getOldOrderId());
        sourceOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_Y);
//        sourceOrder.setStatu(Dictionary.ORDER_STATU_TK);
        sysOrderDao.update(sourceOrder);
        SysOrder oldOrder = sysOrderDao.selectById(sysOrder.getOldOrderId());
@@ -669,8 +599,6 @@
            item.setOrderId(sysOrder.getId());
            orderItemDao.insert(item);
        }
        // 添加订单收款流水
        sysOrderServiceHelper.addOrderFlow(sysOrder, false);
        //退款退套餐退项目
@@ -690,10 +618,6 @@
                sysOrder.getVipId());
    }
    /**
     * 退款退项目,套餐,卡项
     *
@@ -770,9 +694,6 @@
                    moneyCardUseDao.update(moneyCardUse);
                }
            }
            ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId());
            goods.setRealSealCount(goods.getRealSealCount() - item.getCount());
            shoppingGoodsDao.update(goods);