JiangYouYao
2022-03-18 fbfd01086ad9dc0c710ebc3eee3bdf5499a07091
重构:订单取消逻辑
18 files modified
716 ■■■■ changed files
zq-erp/src/main/java/com/matrix/system/app/action/ApiOrderAction.java 33 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/constance/Dictionary.java 4 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/ShoppingGoodsController.java 7 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java 1 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java 1 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java 2 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java 8 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java 8 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java 11 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java 8 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java 184 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/ShoppingGoodsServiceImpl.java 3 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java 49 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java 350 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java 22 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpShoppingGoodsController.java 6 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderTask.java 11 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml 8 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/app/action/ApiOrderAction.java
@@ -17,10 +17,10 @@
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.ShoppingGoodsCategory;
import com.matrix.system.hive.bean.SysOrder;
import com.matrix.system.hive.bean.SysOrderItem;
import com.matrix.system.hive.bean.SysShopInfo;
import com.matrix.system.hive.dao.SysShopInfoDao;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.pojo.ShoppingCarItem;
import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
import com.matrix.system.hive.service.ShoppingGoodsCategoryService;
import com.matrix.system.hive.service.ShoppingGoodsService;
@@ -109,31 +109,26 @@
    @ApiOperation(value = "创建订单", notes = "创建订单")
    @PostMapping(value = "/createOrder")
    public AjaxResult createOrder(@RequestBody @Validated CreateOrderDto createOrderDto) {
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        SysOrder order=new SysOrder();
        order.setVipId(createOrderDto.getVipId());
        ShoppingCarItemsVo car = new ShoppingCarItemsVo();
        car.setVipId(createOrderDto.getVipId());
        if (CollectionUtils.isNotEmpty(createOrderDto.getItems())) {
            List<ShoppingCarItem> list = new ArrayList<>();
            List<SysOrderItem> list = new ArrayList<>();
            for (CreateOderItemDto item : createOrderDto.getItems()) {
                ShoppingCarItem carItem = new ShoppingCarItem();
                carItem.setCount(item.getCount());
                carItem.setGoodsId(item.getGoodsId());
                carItem.setIsFree(item.getIsFree());
                carItem.setType(item.getGoodsType());
                carItem.setShoppingGoods(shoppingGoodsService.findById(item.getGoodsId()));
                list.add(carItem);
                SysOrderItem orderItem = new SysOrderItem();
                orderItem.setCount(item.getCount());
                orderItem.setGoodsId(item.getGoodsId());
                orderItem.setIsFree(item.getIsFree());
                //jyytodo 这个字段可以不传
                orderItem.setType(item.getGoodsType());
                list.add(orderItem);
            }
            car.setCarItems(list);
            order.setItems(list);
        }
        int i = sysOrderService.createOrder(WebUtil.getSession(), car);
        if (i > 0) {
            return AjaxResult.buildSuccessInstance("下单成功");
        }
        return AjaxResult.buildFailInstance("下单失败");
       sysOrderService.checkAndSaveOrder(order);
       return AjaxResult.buildSuccessInstance("下单成功");
    }
    @ApiOperation(value = "获取订单列表", notes = "获取订单列表")
zq-erp/src/main/java/com/matrix/system/constance/Dictionary.java
@@ -403,10 +403,6 @@
     * 商城商品-充值卡
     */
    String SHOPPING_GOODS_TYPE_CZK = "充值卡";
    /**
     * 商城商品-综合卡
     */
    String SHOPPING_GOODS_TYPE_ZHK = "综合卡";
zq-erp/src/main/java/com/matrix/system/hive/action/ShoppingGoodsController.java
@@ -129,7 +129,6 @@
                shoppingGoods.setAssembleProj(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(shoppingGoods.getId(), ShoppingGoods.SHOPPING_GOODS_TYPE_XM));
            } else if (
                    Dictionary.SHOPPING_GOODS_TYPE_XM.equals(shoppingGoods.getGoodType())
                            || Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(shoppingGoods.getGoodType())
            ) {
                shoppingGoods.setAssembleGoods(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(shoppingGoods.getId(), null));
            } else if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(shoppingGoods.getGoodType())) {
@@ -291,9 +290,6 @@
                shoppingGoods.setAssembleGoods(assembleListGoods);
                List<ShoppingGoodsAssemble> assembleListProj = shoppingGoodsAssembleDao.selectProjByShoppingGoodsId(shoppingGoods.getId());
                shoppingGoods.setAssembleProj(assembleListProj);
            } else if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(shoppingGoods.getGoodType())) {
                List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectAssembleShoppingGoodsByShoppingGoodsId(shoppingGoods.getId());
                shoppingGoods.setZongheCarGoods(assembleList);
            }
@@ -322,9 +318,6 @@
                // 返回充值卡编辑界面
                WebUtil.getRequest().setAttribute("obj", shoppingGoods);
                return "admin/hive/products/money-card-form";
            } else if (shoppingGoods.getGoodType().equals(Dictionary.SHOPPING_GOODS_TYPE_ZHK)) {
                WebUtil.getRequest().setAttribute("obj", shoppingGoods);
                return "admin/hive/products/zonghe-card-form";
            }
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java
@@ -88,6 +88,7 @@
            
    
    /**
     * // jyytodo 可以考虑一个已启用未启用的状态,开卡后如果没有使用过就视为未启用
     * 状态,有效,无效,转让,冻结,退款
     */
    private String  status;
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java
@@ -10,6 +10,7 @@
 */
public class MoneyCardUseFlow implements Serializable{
    //jyytodo 改成枚举
    public static final String USE_TYPE_CONSUMER = "消费扣款";
    public static final String USE_TYPE_ORDRE_CANCEL = "取消订单";
zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java
@@ -136,4 +136,6 @@
    List<SysProjUse> selectTaoCanListWithProj(@Param("record") SysProjUse sysProjUse);
    int selectTaocanCountForCourseAndInfinite(@Param("taocanId") Long taocanId, @Param("vipId") Long vipId);
    int selectUseCountByOrderItemId(Long orderItemId);
}
zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java
@@ -15,7 +15,7 @@
    /**
     * 修改储值卡余额
     * 扣除储值卡余额
     */
    void changeMoneyCard(List<MoneyCardPayDto> moneyCardPayDtoList);
@@ -129,4 +129,10 @@
    public List<MoneyCardUse> findVipCardUse(MoneyCardUse moneyCardUse);
    /**
     * 根据订单id删除充值卡
     * 只有没有被使用过的储值卡可以删除
     * @param id
     */
    void deleteByOrderItemId(Long id);
}
zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java
@@ -1,12 +1,11 @@
package com.matrix.system.hive.service;
import java.util.Date;
import java.util.List;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.system.hive.bean.SysBeauticianState;
import com.matrix.system.hive.plugin.util.BaseServices;
import java.util.Date;
import java.util.List;
/**
 *
@@ -75,7 +74,6 @@
    public List<SysBeauticianState> findByTimeAndStaff(Long id, Date beginTime, Date endTime);
       public List<SysBeauticianState> findBySerId(Long serviceId);
  
}
zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java
@@ -8,10 +8,7 @@
import com.matrix.system.hive.bean.SysOrder;
import com.matrix.system.hive.plugin.util.BaseServices;
import com.matrix.system.hive.pojo.CzXkVo;
import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.util.List;
@@ -87,14 +84,6 @@
    public void refundOrderMoney(SysOrder sysOrder);
    /**
     * 创建订单
     * @param session
     * @param car
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public int createOrder(HttpSession session, ShoppingCarItemsVo car);
    /**
     * 补交
    * @Title: updateAfterMoney 
zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java
@@ -2,7 +2,6 @@
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.system.hive.bean.MoneyCardUse;
import com.matrix.system.hive.bean.SysProjUse;
import com.matrix.system.hive.dto.ProjUseOperationDto;
import com.matrix.system.hive.plugin.util.BaseServices;
@@ -152,4 +151,11 @@
    public List<SysProjUse> findTaocaoProjUseWithProj(SysProjUse sysProjUse);
    int findTaocanCountForCourseAndInfinite(Long taocanId, Long vipId);
    /**
     * 取消订单删除项目
     * 只有没有使用过的才能被删除
     * @param id
     */
    void deleteByOrderItemId(Long id);
}
zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
@@ -1,11 +1,13 @@
package com.matrix.system.hive.service.imp;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.pojo.VerificationResult;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.system.common.validate.ParameterValidate;
import com.matrix.system.common.validate.group.Group;
import com.matrix.system.constance.Dictionary;
@@ -16,7 +18,6 @@
import com.matrix.system.hive.plugin.util.MoneyUtil;
import com.matrix.system.hive.service.MoneyCardUseService;
import com.matrix.system.hive.service.ShoppingGoodsService;
import com.matrix.system.hive.validation.ProjUseGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -63,7 +64,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) {
        moneyCardOperationDtos.forEach(dto->{
        moneyCardOperationDtos.forEach(dto -> {
            //参数校验
            ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(dto, Group.ADD.class);
            if (baseIdResult.hasErrors()) {
@@ -71,7 +72,7 @@
            }
            ShoppingGoods moneyCar = shoppingGoodsDao.selectById(dto.getGoodsId());
            MoneyCardUse moneyCardUse = new MoneyCardUse();
            BeanUtil.copyProperties(dto,moneyCardUse);
            BeanUtil.copyProperties(dto, moneyCardUse);
            moneyCardUse.setVipId(dto.getVipId());
            moneyCardUse.setGiftMoney(moneyCar.getReferencePice());
            moneyCardUse.setRealMoney(moneyCar.getSealPice());
@@ -93,84 +94,137 @@
            moneyCardUseDao.insert(moneyCardUse);
        });
    }
    @Override
    public void deleteByOrderItemId(Long id) {
        MoneyCardUseFlow  moneyCardUseFlow=new MoneyCardUseFlow();
        moneyCardUseFlow.setCarUseId(id);
        int i = moneyCardUseFlowDao.selectTotalRecord(moneyCardUseFlow);
        if(i>0){
            MoneyCardUse one = getOne(lambdaQuery().eq(MoneyCardUse::getOrderItemId,id));
            throw new GlobleException(one.getCardName()+"储值卡已经被启用无法删除");
        }else {
            moneyCardUseDao.deleteByOrderItemId(id);
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void changeMoneyCard(List<MoneyCardPayDto> moneyCardPayDtoList) {
        // 判断商品是否在充值卡的限制购买
        moneyCardPayDtoList.forEach(cardUse -> {
            VerificationResult verificationResult = checkIsBangding(cardUse.getCarUseId(), cardUse.getGoodsIds());
            if (!verificationResult.isJudgeResult()) {
                throw new GlobleException(verificationResult.getMsg());
            }
        });
        moneyCardPayDtoList.forEach(moneyCardPayDto -> {
            MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId());
            MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
            if (Objects.nonNull(moneyCardPayDto.getGiftMoney()) && moneyCardPayDto.getGiftMoney()>0) {
                if (moneyCardUse.getGiftMoney() >= moneyCardPayDto.getGiftMoney()) {
                    double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), moneyCardPayDto.getGiftMoney());
                    moneyCardUse.setGiftMoney(surplus);
                    moneyCardUseFlow.setGiftMoney(0D - moneyCardPayDto.getGiftMoney());
                } else {
                    throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
                }
            } else {
                if (moneyCardUse.getRealMoney() >= moneyCardPayDto.getRealMoney()) {
                    double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(),  moneyCardPayDto.getRealMoney());
                    moneyCardUse.setRealMoney(surplus);
                    moneyCardUseFlow.setTotal(0 -  moneyCardPayDto.getRealMoney());
                } else {
                    throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
                }
            if (MoneyCardUseFlow.USE_TYPE_CONSUMER.equals(moneyCardPayDto.getType())) {
                //扣减储值卡余额
                deductMoneyCard(moneyCardPayDto);
            } else if (MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL.equals(moneyCardPayDto.getType())) {
                //回退储值卡余额
                returnMoneyCard(moneyCardPayDto);
            }
            if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
                //余额为0时充值卡变为无效
                if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
                    moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
                    moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
                }
            }
            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
            if (shoppingGoods != null) {
                Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
                moneyCardUse.setFailTime(invalidTime);
            }
            moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardPayDto.getCount());
            // 更新充值卡信息
            moneyCardUseDao.update(moneyCardUse);
            //设置卡项使用流水
            moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
            moneyCardUseFlow.setOrderNo(moneyCardPayDto.getOrderNo());
            moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
            moneyCardUseFlow.setTimes(-1);
            moneyCardUseFlow.setType(moneyCardPayDto.getType());
            moneyCardUseFlow.setCreateTime(new Date());
            moneyCardUseFlow.setOperationId(moneyCardPayDto.getUpdateUser());
            moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
            moneyCardUseFlowDao.insert(moneyCardUseFlow);
        });
    }
    /**
     * 回退储值卡余额
     *
     * @param moneyCardPayDto
     */
    private void returnMoneyCard(MoneyCardPayDto moneyCardPayDto) {
        LogUtil.info("回退储值卡余额 {}", JSON.toJSONString(moneyCardPayDto));
        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId());
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        if (Objects.nonNull(moneyCardPayDto.getGiftMoney())) {
            //jyytodo 余额余次的修改和新增在数据库层面做加减
            moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardPayDto.getGiftMoney());
        }
        if (Objects.nonNull(moneyCardPayDto.getRealMoney())) {
            moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardPayDto.getRealMoney());
        }
        moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
        moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
        moneyCardUseDao.update(moneyCardUse);
        //设置卡项使用流水
        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
        moneyCardUseFlow.setOrderNo(moneyCardPayDto.getOrderNo());
        moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
        moneyCardUseFlow.setTimes(moneyCardUse.getLastCount());
        moneyCardUseFlow.setType(moneyCardPayDto.getType());
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(moneyCardPayDto.getUpdateUser());
        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
    }
    /**
     * 扣减储值余额
     *
     * @param moneyCardPayDto
     */
    private void deductMoneyCard(MoneyCardPayDto moneyCardPayDto) {
        // 判断商品是否在充值卡的限制购买
        VerificationResult verificationResult = checkIsBangding(moneyCardPayDto.getCarUseId(), moneyCardPayDto.getGoodsIds());
        if (!verificationResult.isJudgeResult()) {
            throw new GlobleException(verificationResult.getMsg());
        }
        LogUtil.info("扣减储值卡余额 {}", JSON.toJSONString(moneyCardPayDto));
        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId());
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        if (Objects.nonNull(moneyCardPayDto.getGiftMoney()) && moneyCardPayDto.getGiftMoney() > 0) {
            if (moneyCardUse.getGiftMoney() >= moneyCardPayDto.getGiftMoney()) {
                double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), moneyCardPayDto.getGiftMoney());
                moneyCardUse.setGiftMoney(surplus);
                moneyCardUseFlow.setGiftMoney(0D - moneyCardPayDto.getGiftMoney());
            } else {
                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
            }
        } else {
            if (moneyCardUse.getRealMoney() >= moneyCardPayDto.getRealMoney()) {
                double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), moneyCardPayDto.getRealMoney());
                moneyCardUse.setRealMoney(surplus);
                moneyCardUseFlow.setTotal(0 - moneyCardPayDto.getRealMoney());
            } else {
                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
            }
        }
        if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
            //余额为0时充值卡变为无效
            if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
                moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
                moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
            }
        }
        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
        if (shoppingGoods != null) {
            Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
            moneyCardUse.setFailTime(invalidTime);
        }
        moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardPayDto.getCount());
        // 更新充值卡信息
        moneyCardUseDao.update(moneyCardUse);
        //设置卡项使用流水
        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
        moneyCardUseFlow.setOrderNo(moneyCardPayDto.getOrderNo());
        moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
        moneyCardUseFlow.setTimes(moneyCardUse.getLastCount());
        moneyCardUseFlow.setType(moneyCardPayDto.getType());
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(moneyCardPayDto.getUpdateUser());
        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
    }
    /**
     * 检查商品是否在储值卡的消费范围内
     *
     * @param moneyCardUseId 储值卡id
     * @param goodsIds  商品id集合
     * @param goodsIds       商品id集合
     * @return
     */
    private VerificationResult checkIsBangding(Long moneyCardUseId, List<Long> goodsIds) {
zq-erp/src/main/java/com/matrix/system/hive/service/imp/ShoppingGoodsServiceImpl.java
@@ -390,9 +390,6 @@
            case Dictionary.SHOPPING_GOODS_TYPE_TC:
                shoppingGoods.setIsAssemble(Dictionary.FLAG_YES);
                break;
            case Dictionary.SHOPPING_GOODS_TYPE_ZHK:
                shoppingGoods.setIsAssemble(Dictionary.FLAG_YES);
                break;
        }
    }
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
@@ -241,6 +241,45 @@
        }
    }
    /**
     * 储值卡退款
     * @param order
     */
    public void returnMoneyCardPay(SysOrder order) {
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        List<MoneyCardPayDto> moneyCardPayDtoList = Lists.newArrayList();
        List<SysOrderFlow> flows = sysOrderFlowDao.selectByOrderId(order.getId());
        // 非现金收款退回扣卡余额
        for (SysOrderFlow flow : flows) {
            if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                if (flow.getCardId() != null) {
                    MoneyCardPayDto dto = new MoneyCardPayDto();
                    dto.setOrderNo(order.getOrderNo());
                    dto.setOrderId(order.getId());
                    dto.setCount(1);
                    dto.setCarUseId(flow.getCardId());
                    dto.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL);
                    if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
                        dto.setGiftMoney(flow.getAmount().doubleValue());
                    } else {
                        dto.setRealMoney(flow.getAmount().doubleValue());
                    }
                    dto.setUpdateUser(user.getSuId());
                    moneyCardPayDtoList.add(dto);
                } else {
                    throw new GlobleException("无效的储值卡支付方式");
                }
            }
        }
        if (CollectionUtils.isNotEmpty(moneyCardPayDtoList)) {
            LogUtil.info("退回储值卡余额{}", JSON.toJSONString(moneyCardPayDtoList));
            moneyCardUseService.changeMoneyCard(moneyCardPayDtoList);
        }
    }
    /**
     * @param sourceOrder 如果购买了充值卡设置会员的充值卡
     * @author:姜友瑶
@@ -629,6 +668,16 @@
            sysOrderItem.setOrderId(sysOrder.getId());
            orderItemDao.insert(sysOrderItem);
        });
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        //保存单据日志
        operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
                OperationFunctionEnum.ORDER,
                OperationButtonEnum.UPDATE,
                sysOrder.getId(),
                sysOrder.getOrderNo(),
                sysOrder.getVipId());
        return sysOrder;
    }
}
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -34,8 +34,6 @@
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.plugin.util.MoneyUtil;
import com.matrix.system.hive.pojo.CzXkVo;
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.service.ScoreVipDetailService;
import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting;
@@ -44,7 +42,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpSession;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.*;
@@ -61,6 +58,7 @@
    private SysOrderItemDao orderItemDao;
    @Autowired
    private SysProjUseDao sysProjUseDao;
    private SysProjUseService sysProjUseService;
    @Autowired
@@ -175,217 +173,110 @@
    public void cancelOrder(Long id) {
        SysOrder order = sysOrderDao.selectById(id);
        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        if (order.getStatu().equals(Dictionary.ORDER_STATU_DFK)) {
            order.setStatu(Dictionary.ORDER_STATU_YQX);
            order.setArrears(0D);
            //发送微信公众号提醒
            UniformMsgParam uniformMsgParam = new UniformMsgParam(order.getCompanyId(), UniformMsgParam.GZH_DDQX);
            uniformMsgParam.put("orderId", order.getId());
            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
            sysOrderDao.update(order);
            //保存单据日志
            operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(),
                    OperationFunctionEnum.ORDER,
                    OperationButtonEnum.CANCEL,
                    order.getId(),
                    order.getOrderNo(),
                    order.getVipId(),
                    "未付款取消订单");
            //待付款订单取消
            cancelDFKOrder(order);
        } else {
            //已付款订单取消
            cancelYFKOrder(order);
        }
    }
            //一个订单只能被取消一次
            if (Dictionary.ORDER_STATU_YQX.equals(order.getStatu())) {
                throw new GlobleException("订单已取消");
            }
            List<SysOrderFlow> flows = sysOrderFlowDao.selectByOrderId(id);
            // 非现金收款退回扣卡余额
            for (SysOrderFlow flow : flows) {
                if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                    MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
                    MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
                    if (moneyCardUse != null) {
                        // 根据订单明细判断是赠送金额购买还是本金购买
                        moneyCardUseFlow.setTotal(flow.getAmount().doubleValue());
                        if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
                            moneyCardUse.setGiftMoney(MoneyUtil.add(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue()));
                        } else {
                            moneyCardUse.setRealMoney(MoneyUtil.add(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue()));
                        }
                        if (!moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)) {
                            if (moneyCardUse.getLastCount() != null) {
                                moneyCardUse.setLastCount(moneyCardUse.getLastCount() + 1);
                                moneyCardUseFlow.setTimes(1);
                            }
                        }
                        moneyCardUseDao.update(moneyCardUse);
                        //插入充值卡变动流水
                        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
                        moneyCardUseFlow.setOrderNo(order.getOrderNo());
                        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
                        moneyCardUseFlow.setVipId(order.getVipId());
                        moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL);
                        moneyCardUseFlow.setCreateTime(new Date());
                        moneyCardUseFlow.setOperationId(user.getSuId());
                        moneyCardUseFlow.setContent(moneyCardUse.getChangeRemark());
                        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
                        moneyCardUseFlowDao.insert(moneyCardUseFlow);
                    }
                }
            }
            List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(id);
            for (SysOrderItem orderItem : sysOrderItems) {
                // 充值卡类型退款
                if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(orderItem.getType())) {
                    ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(orderItem.getGoodsId());
                    //删除购买的充值卡
                    moneyCardUseDao.deleteByOrderItemId(orderItem.getId());
                } else if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(orderItem.getType())
                        || Dictionary.SHOPPING_GOODS_TYPE_TC.equals(orderItem.getType())) {
                    // 项目套餐退款
                    // 删除套餐项目使用情况
                    sysProjUseDao.deleteByOrderItemId(orderItem.getId());
                } else if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(orderItem.getType())) {
                    // 综合卡
                    // 删除套餐项目使用情况
                    sysProjUseDao.deleteByOrderItemId(orderItem.getId());
                    // 删除充值卡
                    moneyCardUseDao.deleteByOrderItemId(orderItem.getId());
                }
            }
            //删除出库单,恢复库存
            SysOutStore sysOutStore = new SysOutStore();
            sysOutStore.setOrderId(order.getId());
            List<SysOutStore> sysOutStores = sysOutStoreDao.selectByModel(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());
            }
            // 删除业绩
            AchieveNew achieveNew = new AchieveNew();
            achieveNew.setOrderId(id);
            achieveNewService.removeByModel(achieveNew);
            // 删除收款记录
            sysOrderFlowDao.deleteByOrderId(id);
            //删除积分
            scoreVipDetailService.removeByBusinessId(order.getVipId(), order.getId());
            // 取消订单
            order.setStatu(Dictionary.ORDER_STATU_YQX);
            sysOrderDao.update(order);
            //保存单据日志
            operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(),
                    OperationFunctionEnum.ORDER,
                    OperationButtonEnum.CANCEL,
                    order.getId(),
                    order.getOrderNo(),
                    order.getVipId(),
                    "已付款取消订单");
    /**
     * 已付款订单取消
     * @param order
     */
    private void cancelYFKOrder(SysOrder order) {
        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        //一个订单只能被取消一次
        if (Dictionary.ORDER_STATU_YQX.equals(order.getStatu())) {
            throw new GlobleException("订单已取消");
        }
        //储值卡退款
        sysOrderServiceHelper.returnMoneyCardPay(order);
        List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(order.getId());
        for (SysOrderItem orderItem : sysOrderItems) {
            // 充值卡类型退款
            if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(orderItem.getType())) {
                //删除购买的充值卡
                moneyCardUseService.deleteByOrderItemId(orderItem.getId());
            } else if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(orderItem.getType())
                    || Dictionary.SHOPPING_GOODS_TYPE_TC.equals(orderItem.getType())) {
                // 项目套餐退款
                // 删除套餐项目使用情况
                sysProjUseService.deleteByOrderItemId(orderItem.getId());
            }
        }
        //删除出库单,恢复库存
        SysOutStore sysOutStore = new SysOutStore();
        sysOutStore.setOrderId(order.getId());
        List<SysOutStore> sysOutStores = sysOutStoreDao.selectByModel(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());
        }
        // 删除业绩
        AchieveNew achieveNew = new AchieveNew();
        achieveNew.setOrderId(order.getId());
        achieveNewService.removeByModel(achieveNew);
        // 删除收款记录
        sysOrderFlowDao.deleteByOrderId(order.getId());
        //删除积分
        scoreVipDetailService.removeByBusinessId(order.getVipId(), order.getId());
        // 取消订单
        order.setStatu(Dictionary.ORDER_STATU_YQX);
        sysOrderDao.update(order);
        //保存单据日志
        operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(),
                OperationFunctionEnum.ORDER,
                OperationButtonEnum.CANCEL,
                order.getId(),
                order.getOrderNo(),
                order.getVipId(),
                "已付款取消订单");
    }
    /**
     * 创建订单 lk
     * 待付款订单取消
     * @param order
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int createOrder(HttpSession session, ShoppingCarItemsVo car) {
    private void cancelDFKOrder(SysOrder order) {
        if (car.getCarItems().size() < 1) {
            throw new GlobleException("没用选择购买产品");
        }
        // 获取会员信息,判断等级 获取相应家居折扣
        SysVipInfo info = sysVipInfoDao.selectById(car.getVipId());
        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        order.setStatu(Dictionary.ORDER_STATU_YQX);
        order.setArrears(0D);
        //获取折扣-----
        Double zk = zk = 1.0;
        //发送微信公众号提醒
        UniformMsgParam uniformMsgParam = new UniformMsgParam(order.getCompanyId(), UniformMsgParam.GZH_DDQX);
        uniformMsgParam.put("orderId", order.getId());
        asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
        SysOrder order = new SysOrder();
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        order.setShopId(user.getShopId());
        order.setOrderNo(codeService.getOrderCode());
        order.setVipId(info.getId());
        order.setOrderTime(new Date());
        order.setRemark(car.getRemark());
        order.setStaffId(user.getSuId());
        order.setIsCross(2 + "");
        order.setChangeId(car.getChangeId());
        order.setStatu(Dictionary.ORDER_STATU_DFK);
        order.setCardPay(0.00);
        order.setCashPay(0.00);
        order.setCompanyId(user.getCompanyId());
        order.setBeatuyId(car.getBeatuyId() + "");
        // 根据美疗师id查询美疗师姓名
        if (car.getBeatuyId() != null) {
            String beatuyName = shopStaffInfoDao.selectById(car.getBeatuyId()).getSuName();
            System.out.println("美疗师:" + beatuyName);
            order.setBeatuyName(beatuyName);
        }
        int i = sysOrderDao.insert(order);
        // 创建订单明细,并计算总价与折扣总价
        // 总价
        double total = 0;
        double zkTotal = 0;
        int count = 0;
        // 设置订单条目
        for (ShoppingCarItem carItem : car.getCarItems()) {
            SysOrderItem orderItem = new SysOrderItem();
            orderItem.setOrderId(order.getId());
            orderItem.setCount(carItem.getCount());
            orderItem.setIsFree(carItem.getIsFree());
            orderItem.setType(carItem.getType());
            orderItem.setStatus(Dictionary.ORDER_STATU_DFK);
            // 新增明细
            // 设置商品id
            orderItem.setGoodsId(carItem.getGoodsId());
            // 设置assembleId
            orderItem.setAssembleId(carItem.getAssembleId());
            // 如果是家居产品的话,要取出组合sku中的价格
            double p = carItem.getShoppingGoods().getSealPice();
            orderItem.setPrice(p);
            if (carItem.getIsFree().equals(Dictionary.FLAG_NO)) {
                orderItem.setZkPrice(MoneyUtil.mul(p, zk));
            } else {
                // 如果是免费,则设置为0.0
                orderItem.setZkPrice(0.0);
            }
            orderItemDao.insert(orderItem);
            total = MoneyUtil.add(total,
                    MoneyUtil.mul(orderItem.getPrice(), Double.parseDouble(carItem.getCount() + "")));
            zkTotal = MoneyUtil.add(zkTotal,
                    MoneyUtil.mul(orderItem.getZkPrice(), Double.parseDouble(carItem.getCount() + "")));
        }
        // 设置订单总价与折后价
        order.setTotal(total);
        order.setZkTotal(zkTotal);
        sysOrderDao.update(order);
        return i;
        //保存单据日志
        operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(),
                OperationFunctionEnum.ORDER,
                OperationButtonEnum.CANCEL,
                order.getId(),
                order.getOrderNo(),
                order.getVipId(),
                "未付款取消订单");
    }
@@ -397,7 +288,7 @@
    public void updateReceiptMoney(SysOrder pageOrder) throws GlobleException {
        //校验订单是否满足收款条件
        checkOrder(pageOrder);
        checkOrderAblePay(pageOrder);
        // 更新订单主表信息
        updateOrderInfo(pageOrder);
@@ -494,7 +385,11 @@
    }
    private void checkOrder(SysOrder pageOrder) {
    /**
     * 检查订单是否满足支付条件
     * @param pageOrder
     */
    private void checkOrderAblePay(SysOrder pageOrder) {
        SysOrder checkOrder = sysOrderDao.selectById(pageOrder.getId());
@@ -797,54 +692,7 @@
    }
    private void refundCard(MoneyCardUse moneyCardUse, SysOrder sourceOrder, SysOrderFlow flow) {
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
            if (moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) {
                double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue());
                moneyCardUse.setGiftMoney(surplus);
                moneyCardUseFlow.setGiftMoney(0D - flow.getAmount().doubleValue());
            } else {
                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
            }
        } else {
            if (moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) {
                double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue());
                moneyCardUse.setRealMoney(surplus);
                moneyCardUseFlow.setTotal(0 - flow.getAmount().doubleValue());
            } else {
                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
            }
        }
        if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
            //余额为0时充值卡变为无效
            if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
                moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
                moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
            }
        }
        ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId());
        if (shoppingGoods != null) {
            Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
            moneyCardUse.setFailTime(invalidTime);
        }
        // 更新充值卡信息
        moneyCardUseDao.update(moneyCardUse);
        //设置卡项使用流水
        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
        moneyCardUseFlow.setOrderNo(sourceOrder.getOrderNo());
        moneyCardUseFlow.setVipId(sourceOrder.getVipId());
        moneyCardUseFlow.setTimes(-1);
        moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(user.getSuId());
        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
    }
    /**
     * 退款退项目,套餐,卡项
@@ -923,10 +771,6 @@
                }
            }
            // TODO 综合卡退款
            if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(item.getType())) {
            }
            ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId());
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
@@ -10,13 +10,13 @@
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.validate.ParameterValidate;
import com.matrix.system.common.validate.group.Group;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.dto.ProjUseOperationDto;
import com.matrix.system.hive.plugin.util.MoneyUtil;
import com.matrix.system.hive.service.ShoppingGoodsService;
import com.matrix.system.hive.service.SysBeauticianStateService;
import com.matrix.system.hive.service.SysProjServicesService;
import com.matrix.system.hive.service.SysProjUseService;
import com.matrix.system.hive.validation.ProjUseGroup;
@@ -41,6 +41,9 @@
    private SysProjUseDao sysProjUseDao;
    @Autowired
    SysProjServicesService projServicesService;
    @Autowired
    SysBeauticianStateService sysBeauticianStateService;
    @Autowired
    private SysProjuseFreezeDao sysProjuseFreezeDao;
@@ -770,4 +773,21 @@
    public int findTaocanCountForCourseAndInfinite(Long taocanId, Long vipId) {
        return sysProjUseDao.selectTaocanCountForCourseAndInfinite(taocanId, vipId);
    }
    @Override
    public void deleteByOrderItemId(Long id) {
        int count=sysProjUseDao.selectUseCountByOrderItemId(id);
        if(count>0){
            SysProjUse query=new SysProjUse();
            query.setOrderItemId(id);
            List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(query);
            if(sysProjUses.size()>1){
                throw new GlobleException(sysProjUses.get(0).getProjName()+"套餐已经被使用无法删除");
            }else {
                throw new GlobleException(sysProjUses.get(0).getProjName()+"项目已经被使用无法删除");
            }
        }else {
            sysProjUseDao.deleteByOrderItemId(id);
        }
    }
}
zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpShoppingGoodsController.java
@@ -101,9 +101,6 @@
                shoppingGoods.setAssembleGoods(assembleListGoods);
                List<ShoppingGoodsAssemble> assembleListProj = shoppingGoodsAssembleDao.selectProjByShoppingGoodsId(shoppingGoods.getId());
                shoppingGoods.setAssembleProj(assembleListProj);
            } else if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(shoppingGoods.getGoodType())) {
                List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectAssembleShoppingGoodsByShoppingGoodsId(shoppingGoods.getId());
                shoppingGoods.setZongheCarGoods(assembleList);
            }
@@ -132,9 +129,6 @@
                // 返回充值卡编辑界面
                WebUtil.getRequest().setAttribute("obj", shoppingGoods);
                return "admin/hive-erp/products/money-card-form";
            } else if (shoppingGoods.getGoodType().equals(Dictionary.SHOPPING_GOODS_TYPE_ZHK)) {
                WebUtil.getRequest().setAttribute("obj", shoppingGoods);
                return "admin/hive-erp/products/zonghe-card-form";
            }
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderTask.java
@@ -185,17 +185,6 @@
                            orderItemDao.insert(orderItem);
                        }
                        break;
                    case Dictionary.SHOPPING_GOODS_TYPE_ZHK:
                        // 新增明细
                        orderItem.setGoodsId(shoppingGoods.getId());
                        // 每一个充值卡都看成一个单独的订单条目
                        count = orderItem.getCount();
                        for (int j = 0; j < count; j++) {
                            orderItem.setCount(1);
                            orderItem.setId(null);
                            orderItemDao.insert(orderItem);
                        }
                        break;
                }
            }
            // 处理收款逻辑
zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml
@@ -948,4 +948,12 @@
        select count(1) from sys_proj_use
        where taocan_id=#{taocanId} and vip_id=#{vipId}
    </select>
    <select id="selectUseCountByOrderItemId" resultType="java.lang.Integer">
        SELECT  count(*)
        from sys_beautician_state a
                 LEFT JOIN sys_proj_use b on a.puse_id=b.ID
                 left join sys_proj_services c on a.SERVICES_ID=c.id
        where b.ORDER_ITEM_ID=#{orderItemId}
          and c.STATE !='预约取消';
    </select>
</mapper>