935090232@qq.com
2022-03-20 e23c8975e6bb0934cb5db46a94d0f83c9739d9ab
重构:套餐项目
2 files added
2 files deleted
20 files modified
1058 ■■■■■ changed files
zq-erp/src/main/java/com/matrix/core/exception/GlobleExceptionResolver.java 4 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/tools/ServiceUtil.java 2 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/validate/GroupValidateStatusCheckUtil.java 30 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java 10 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java 2 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java 2 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java 74 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardPayDto.java 65 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java 38 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/hievEnum/OrderOperationEnum.java 65 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/hievEnum/PayMethodEnum.java 66 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java 3 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java 1 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java 86 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java 277 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysInstoreInfoServiceImpl.java 12 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java 114 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java 93 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java 83 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java 12 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java 6 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysInstoreInfoDao.xml 2 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml 5 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/orderXq-form.html 6 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/core/exception/GlobleExceptionResolver.java
@@ -53,7 +53,7 @@
        if (ex instanceof GlobleException) {
            // 如果是内部全局异常
            LogUtil.warn("#程序抛出全局异常#", ex);
            LogUtil.error("#程序抛出全局异常#", ex);
            GlobleException globleException = (GlobleException) ex;
            attr.put("status", globleException.getErrorCode());
            attr.put("info", globleException.getMessage());
@@ -61,7 +61,7 @@
        } else {
            // 非内部异常
            LogUtil.error("#程序抛出未捕获异常#", ex);
            LogUtil.error("#程序抛出未捕获异常#");
            attr.put("status", 999999);
            attr.put("info", InternationaUtil.getMesssge(SystemErrorCode.SYSTEM_UNKNOW_ERROR));
            // 发送异常信息到管理群
zq-erp/src/main/java/com/matrix/system/common/tools/ServiceUtil.java
@@ -87,6 +87,8 @@
    public boolean updateCheckRepeatTowColumn(String tableName, String column1, Object value1, String column2,
            Object value2, String idName, Object idValue) {
        HashMap<String, Object> query = excuteTow(tableName, column1, value1, column2, value2);
        return query != null && !query.get(idName).equals(idValue);
    }
zq-erp/src/main/java/com/matrix/system/common/validate/GroupValidateStatusCheckUtil.java
New file
@@ -0,0 +1,30 @@
/**
 * projectName: h3-warehouse
 * fileName: GroupValidateStatusCheckUtil.java
 * packageName: com.hydee.h3.warehouse.util
 * date: 2020-05-22 10:48
 * copyright(c) 2020 http://www.hydee.cn/ Inc. All rights reserved.
 */
package com.matrix.system.common.validate;
import com.alibaba.fastjson.JSON;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.tools.LogUtil;
import org.slf4j.Logger;
/**
 * 参数校验工具
 **/
public class GroupValidateStatusCheckUtil {
    public static void check(Object o, Class group) {
        LogUtil.info("操作:{},参数:{}", "参数校验", JSON.toJSONString(o));
        ParameterValidate.ValidResult acceptanceResult = ParameterValidate.validateBean(o, group);
        if (acceptanceResult.hasErrors()) {
            throw new GlobleException(acceptanceResult.getErrors());
        }
    }
}
zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
@@ -23,6 +23,7 @@
import com.matrix.system.constance.Dictionary;
import com.matrix.system.enums.OperationButtonEnum;
import com.matrix.system.enums.OperationFunctionEnum;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.plugin.util.CollectionUtils;
@@ -218,6 +219,7 @@
        if (!DataAuthUtil.hasAllShopAuth()) {
            sysOrder.setShopId(getMe().getShopId());
        }
        QueryUtil.setQueryLimitCom(sysOrder);
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, orderService.findInPage(sysOrder, pageVo),
                orderService.findTotal(sysOrder));
    }
@@ -478,13 +480,7 @@
            return new AjaxResult(AjaxResult.STATUS_FAIL, "订单不存在!");
        }
        List<SysOrderItem> items = orderItemDao.selectByOrderId(id);
        for (SysOrderItem item : items) {
            List<SysProjServices> sysProjServices = sysProjServicesDao.selectProjServicesByOrderItemId(item.getId());
            if (CollUtil.isNotEmpty(sysProjServices)) {
                return new AjaxResult(AjaxResult.STATUS_FAIL, "订单存在进行中的服务单无法取消/删除");
            }
        }
        orderService.cancelOrder(id);
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java
@@ -17,6 +17,8 @@
    public static final String USE_TYPE_ORDRE_TK = "订单退款";
    public static final String USE_TYPE_GM = "购买充值卡";
    public static final String USE_TYPE_CZ = "会员充值";
    public static final String USE_TYPE_CARD_MODIFY = "会员卡调整";
zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java
@@ -66,4 +66,6 @@
    List<ErpOrderDetailItemVo> selectErpOrderItemByOrderId(String orderId);
    List<SysOrderItem> selectDgd();
    String selectOrderStatusByItemId(Long orderItemId);
}
zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java
@@ -12,6 +12,7 @@
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
 * @version: V1.0
@@ -27,59 +28,112 @@
    /**
     * 储值卡id
     */
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseOrderChange.class,
            MoneyCardUseGroup.moneyCardUseCz.class,})
    private Long carUseId;
    /**
     * 会员id
     */
    @NotNull(groups = Group.ADD.class)
    @NotNull(groups = {
            Group.ADD.class
    })
    private Long vipId;
    /**
     * 来源,购买,转让,赠送
     */
    @NotNull(groups = Group.ADD.class)
    @NotNull(groups = {
            Group.ADD.class})
    private String source;
    /**
     * 订单明细id
     */
    @NotNull(groups = Group.ADD.class)
    @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class)
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
            Group.ADD.class
    })
    private Long orderItemId;
    /**
     * 操作类型
     */
    @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class)
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
                        MoneyCardUseGroup.moneyCardUseOrderChange.class,
            MoneyCardUseGroup.moneyCardUseCz.class,
            Group.ADD.class
    })
    private String type;
    /**
     * 操作人
     */
    @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class)
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
                        MoneyCardUseGroup.moneyCardUseOrderChange.class,
            MoneyCardUseGroup.moneyCardUseCz.class,
            Group.ADD.class
    })
    private Long updateUser;
    /**
     * 订单id
     */
    @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class)
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
                        MoneyCardUseGroup.moneyCardUseOrderChange.class,
            MoneyCardUseGroup.moneyCardUseCz.class,
            Group.ADD.class
    })
    private Long  orderId;
    /**
     * 订单编号
     */
    @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class)
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
                        MoneyCardUseGroup.moneyCardUseOrderChange.class,
            MoneyCardUseGroup.moneyCardUseCz.class,
            Group.ADD.class
    })
    private String orderNo;
    /**
     * 充值卡的id
     * 充值卡的商品
     */
    @NotNull(groups = Group.ADD.class)
    @NotNull(groups = {
            Group.ADD.class})
    private Long goodsId;
    /**
     * 赠送金额扣减
     */
    @NotNull(groups = {
            MoneyCardUseGroup.moneyCardUseCz.class,
                        MoneyCardUseGroup.moneyCardUseOrderChange.class
    })
    private Double giftMoney;
    /**
     * 本金扣减
     */
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
            MoneyCardUseGroup.moneyCardUseCz.class,
                        MoneyCardUseGroup.moneyCardUseOrderChange.class
    })
    private Double realMoney;
    /**
     * 次数
     */
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseOrderChange.class})
    private Integer count;
    /**
     * 备注
     */
    private String remark;
    /**
     * 支付的商品id
     */
    @NotNull(groups = {MoneyCardUseGroup.moneyCardUseOrderChange.class})
    private List<Long> goodsIds;
}
zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardPayDto.java
File was deleted
zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java
@@ -1,5 +1,6 @@
package com.matrix.system.hive.dto;
import com.matrix.system.hive.hievEnum.OrderOperationEnum;
import com.matrix.system.hive.validation.ProjUseGroup;
import lombok.Data;
@@ -14,25 +15,34 @@
    /**
     * 客户id
     */
    @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class })
    @NotNull(groups = {ProjUseGroup.addProject.class,
            ProjUseGroup.addTc.class})
    private Long vipId;
    /**
     * 产品id
     */
    @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class,  ProjUseGroup.projectTk.class})
    @NotNull(groups = {ProjUseGroup.addProject.class,
            ProjUseGroup.addTc.class,
            ProjUseGroup.projectTk.class,
            ProjUseGroup.taocanTk.class
    })
    private Long goodsId;
    /**
     * 添加次数
     */
    @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class,  ProjUseGroup.projectTk.class})
    @NotNull(groups = {ProjUseGroup.addProject.class,
            ProjUseGroup.addTc.class,
            ProjUseGroup.projectTk.class,
            ProjUseGroup.taocanTk.class})
    private Integer count;
    /**
     * 购买支付金额
     */
    @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class})
    @NotNull(groups = {ProjUseGroup.addProject.class,
            ProjUseGroup.addTc.class})
    private Double payMoney;
    /**
@@ -43,14 +53,24 @@
    /**
     * 订单明细id
     */
    @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class,  ProjUseGroup.projectTk.class})
    @NotNull(groups = {ProjUseGroup.addProject.class,
            ProjUseGroup.addTc.class,
            ProjUseGroup.projectTk.class,
            ProjUseGroup.taocanTk.class})
    private Long orderItemId;
    /**
     * 是否为赠送
     */
    @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class})
    @NotNull(groups = {ProjUseGroup.addProject.class,
            ProjUseGroup.addTc.class})
    private boolean isFree;
    /**
     * 操作类型
     */
    private OrderOperationEnum orderOperationType;
    /**
@@ -66,6 +86,12 @@
     * -- 添加套餐下的项目必传
     */
    private Long tcId;
    /**
     * 操作人id
     */
    @NotNull(groups = {ProjUseGroup.addProject.class,
            ProjUseGroup.addTc.class})
    private Long updateUserId;
}
zq-erp/src/main/java/com/matrix/system/hive/hievEnum/OrderOperationEnum.java
New file
@@ -0,0 +1,65 @@
package com.matrix.system.hive.hievEnum;
import com.google.common.collect.Lists;
import com.matrix.core.enums.EnumApiShowAble;
import com.matrix.core.enums.EnumsShowVo;
import com.matrix.core.exception.GlobleException;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 订单操作枚举
 * @author jyy
 */
public enum OrderOperationEnum implements EnumApiShowAble {
    SAVE(1, "订单保存"),
    PAY(2, "订单付款"),
    RETURN(3, "订单退款"),
    CANCEL(4, "订单取消"),
    BJ(5, "订单补交"),
    ;
    private Integer value;
    private String displayName;
    OrderOperationEnum(Integer value, String displayName) {
        this.value = value;
        this.displayName = displayName;
    }
    public static String getByValue(Integer value) {
        for (int i = 0; i < values().length; i++) {
            if (value.equals(values()[i].getValue())) {
                return values()[i].displayName;
            }
        }
        throw new GlobleException("无效枚举值");
    }
    @Override
    public String getEnumCode() {
        return "booleanEnum";
    }
    @Override
    public List<EnumsShowVo> getEnumsShowVos() {
        return Lists.newArrayList(values()).stream().map(item ->
                EnumsShowVo.builder()
                        .displayName(item.getDisplayName())
                        .value(item.value)
                        .build()
        ).collect(Collectors.toList());
    }
    public Integer getValue() {
        return value;
    }
    public String getDisplayName() {
        return displayName;
    }
}
zq-erp/src/main/java/com/matrix/system/hive/hievEnum/PayMethodEnum.java
File was deleted
zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java
@@ -3,7 +3,6 @@
import com.matrix.core.pojo.PaginationVO;
import com.matrix.system.hive.bean.MoneyCardUse;
import com.matrix.system.hive.dto.MoneyCardOperationDto;
import com.matrix.system.hive.dto.MoneyCardPayDto;
import com.matrix.system.hive.plugin.util.BaseServices;
import java.util.List;
@@ -17,7 +16,7 @@
    /**
     * 扣除储值卡余额
     */
    void changeMoneyCard(List<MoneyCardPayDto> moneyCardPayDtoList);
    void changeMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos);
    /**
zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java
@@ -74,6 +74,7 @@
    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/imp/AchieveNewServiceImpl.java
@@ -164,7 +164,7 @@
    @Override
    public void     addAchieveByServiceOrder(SysProjServices projServices) {
    public void addAchieveByServiceOrder(SysProjServices projServices) {
        List<AchieveNew> achieveNewList = new ArrayList<>();
        List<SysBeauticianState> beauticianStateList = sysBeauticianStateDao.selectBySerIds(projServices.getId());
        int size = beauticianStateList.size();
@@ -188,16 +188,16 @@
            // 是否为赠送业绩
            if (Dictionary.TAOCAN_SOURCE_ZS.equals(projUse.getSource())) {
                achieveNew.setFreeConsume(projUse.getPrice()*beauticianState.getCount());
                achieveNew.setFreeConsume(projUse.getPrice() * beauticianState.getCount());
                //计算提成
                achieveNew.setProjPercentage(
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS,achieveNew.getFreeConsume(),beauticianState.getProjId()));
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS, achieveNew.getFreeConsume(), beauticianState.getProjId()));
            } else {
                achieveNew.setHisConsume(new BigDecimal(projUse.getPrice()*beauticianState.getCount()).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue());
                achieveNew.setHisConsume(new BigDecimal(projUse.getPrice() * beauticianState.getCount()).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue());
                //计算提成
                achieveNew.setProjPercentage(
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_BJ,achieveNew.getHisConsume(),beauticianState.getProjId()));
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_BJ, achieveNew.getHisConsume(), beauticianState.getProjId()));
            }
            achieveNew.setT2(projUse.getSource());
            achieveNew.setDatatime(new Date());
@@ -211,14 +211,14 @@
            if (flag) {
//                if (!achieveId.equals(beauticianState.getStaffId())) {
                    AchieveNew saleManAchieve = new AchieveNew();
                    BeanUtils.copyProperties(achieveNew, saleManAchieve);
                    saleManAchieve.setBeaultId(achieveId);
                AchieveNew saleManAchieve = new AchieveNew();
                BeanUtils.copyProperties(achieveNew, saleManAchieve);
                saleManAchieve.setBeaultId(achieveId);
                    saleAchieveNumOfPeople(saleManAchieve);
                    //销售人员不计算项目提成
                    saleManAchieve.setProjPercentage(0D);
                    achieveNewList.add(saleManAchieve);
                saleAchieveNumOfPeople(saleManAchieve);
                //销售人员不计算项目提成
                saleManAchieve.setProjPercentage(0D);
                achieveNewList.add(saleManAchieve);
//                }
            }
@@ -260,34 +260,35 @@
    AchieveRuleDao achieveRuleDao;
    private Double calculationProjPercentage(int type, Double consume, Long goodsId) {
         ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(goodsId);
         if(shoppingGoods.getAchieveRuleId()!=null){
        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(goodsId);
        if (shoppingGoods.getAchieveRuleId() != null) {
             AchieveRule achieveRule = achieveRuleDao.selectById(shoppingGoods.getAchieveRuleId());
             if(achieveRule!=null){
                 List<AchieveRuleItem> achieveRuleItems = JSONUtil.toList(JSONUtil.parseArray(achieveRule.getRules()), AchieveRuleItem.class);
                 double percentage=0D;
                 for(AchieveRuleItem item:achieveRuleItems){
                     if(item.getAchieveType()==type
                        && (item.getLower() == consume
                             || (item.getLower()< consume && consume < item.getUpper() ))){
            AchieveRule achieveRule = achieveRuleDao.selectById(shoppingGoods.getAchieveRuleId());
            if (achieveRule != null) {
                List<AchieveRuleItem> achieveRuleItems = JSONUtil.toList(JSONUtil.parseArray(achieveRule.getRules()), AchieveRuleItem.class);
                double percentage = 0D;
                for (AchieveRuleItem item : achieveRuleItems) {
                    if (item.getAchieveType() == type
                            && (item.getLower() == consume
                            || (item.getLower() < consume && consume < item.getUpper()))) {
                         if(AchieveRuleItem.ACHIEVE_TYPE_FIXED==item.getCalculationType()){
                             percentage=item.getAchieve();
                         }else{
                             percentage= consume * (item.getAchieve()/100);
                         }
                         break;
                     }
                 }
                 return percentage;
             }
         }
                        if (AchieveRuleItem.ACHIEVE_TYPE_FIXED == item.getCalculationType()) {
                            percentage = item.getAchieve();
                        } else {
                            percentage = consume * (item.getAchieve() / 100);
                        }
                        break;
                    }
                }
                return percentage;
            }
        }
        return 0D;
    }
    /**
     * 顾问人头业绩
     *
     * @param achieveNew
     */
    private void saleAchieveNumOfPeople(AchieveNew achieveNew) {
@@ -301,7 +302,6 @@
    }
    /**
     *
     * 合并订单与服务单人头逻辑,即每一个客户对美疗师/顾问来说,每一天同一个客户只算一个人头。
     * 如若A给客户X下订单,并给客户X服务,对A来说只算一个人头
     */
@@ -333,10 +333,9 @@
                if (orderItem != null && CollectionUtils.isNotEmpty(orderItem.getAchieveList())) {
                    for (AchieveNew achieveNew : orderItem.getAchieveList()) {
                        if (achieveNew !=null   && achieveNew.getGoodsCash()!=null) {
                            buildAchieve(pageOrder,  orderItem, achieveNew);
                        if (achieveNew != null && achieveNew.getGoodsCash() != null) {
                            buildAchieve(pageOrder, orderItem, achieveNew);
                            achieveNewList.add(achieveNew);
                            beautyIds.add(achieveNew.getBeaultId());
                        }
                    }
@@ -358,7 +357,7 @@
    BusParameterSettingsDao busParameterSettingsDao;
    private void buildAchieve(SysOrder pageOrder, SysOrderItem orderItem, AchieveNew achieveNew) {
        BusParameterSettings shopManageJjcpasConsume =null;
        BusParameterSettings shopManageJjcpasConsume = null;
        if (Dictionary.ORDER_STATU_TK.equals(pageOrder.getStatu())) {
            achieveNew.setId(null);
            achieveNew.setProjPercentage(0 - achieveNew.getProjPercentage());
@@ -366,7 +365,7 @@
        }
        achieveNew.setVipId(pageOrder.getVipId());
        if(achieveNew.getSaleId()==null){
        if (achieveNew.getSaleId() == null) {
            achieveNew.setSaleId(pageOrder.getStaffId());
        }
@@ -376,11 +375,12 @@
        } else {
            achieveNew.setDatatime(new Date());
        }
        if(Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(orderItem.getShoppingGoods().getGoodType())){
            if(shopManageJjcpasConsume==null){
        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(orderItem.getGoodsId());
        if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(shoppingGoods.getGoodType())) {
            if (shopManageJjcpasConsume == null) {
                shopManageJjcpasConsume = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_JJCPAS_CONSUME, pageOrder.getCompanyId());
            }
            if(AppConstance.IS_Y.equals(shopManageJjcpasConsume.getParamValue())){
            if (AppConstance.IS_Y.equals(shopManageJjcpasConsume.getParamValue())) {
                achieveNew.setHisConsume(achieveNew.getGoodsCash());
            }
@@ -440,7 +440,7 @@
        Date endTime = calendar.getTime();
        switch (type) {
            // 本日
            case 1 :
            case 1:
                break;
            // 昨日
            case 2:
zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
@@ -2,22 +2,25 @@
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.dao.SysUsersDao;
import com.matrix.system.common.validate.GroupValidateStatusCheckUtil;
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.MoneyCardOperationDto;
import com.matrix.system.hive.dto.MoneyCardPayDto;
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.service.SysOrderService;
import com.matrix.system.hive.validation.MoneyCardUseGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -47,6 +50,9 @@
    private SysOrderItemDao orderItemDao;
    @Autowired
    SysOrderService sysOrderService;
    @Autowired
    private SysVipLevelDao viplevelDao;
    @Autowired
@@ -58,6 +64,9 @@
    MoneyCardUseFlowDao moneyCardUseFlowDao;
    @Autowired
    SysUsersDao sysUsersDao;
    @Autowired
    private ShoppingGoodsService shoppingGoodsService;
@@ -65,31 +74,30 @@
    @Transactional(rollbackFor = Exception.class)
    public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) {
        moneyCardOperationDtos.forEach(dto -> {
            //参数校验
            ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(dto, Group.ADD.class);
            if (baseIdResult.hasErrors()) {
                throw new GlobleException(baseIdResult.getErrors());
            }
            ShoppingGoods moneyCar = shoppingGoodsDao.selectById(dto.getGoodsId());
            GroupValidateStatusCheckUtil.check(dto,Group.ADD.class);
            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(dto.getGoodsId());
            MoneyCardUse moneyCardUse = new MoneyCardUse();
            BeanUtil.copyProperties(dto, moneyCardUse);
            moneyCardUse.setVipId(dto.getVipId());
            moneyCardUse.setGiftMoney(moneyCar.getReferencePice());
            moneyCardUse.setRealMoney(moneyCar.getSealPice());
            moneyCardUse.setGoodsId(moneyCar.getId());
            moneyCardUse.setGiftMoney(shoppingGoods.getReferencePice());
            moneyCardUse.setRealMoney(shoppingGoods.getSealPice());
            moneyCardUse.setGoodsId(shoppingGoods.getId());
            moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
            moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N);
            moneyCardUse.setCardName(shoppingGoods.getName());
            //余次处理
            if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) {
            if (shoppingGoods.getCarUseCount() == null || shoppingGoods.getCarUseCount() == 0) {
                moneyCardUse.setUseTotal(999999999);
                moneyCardUse.setLastCount(999999999);
            } else {
                moneyCardUse.setUseTotal(moneyCar.getCarUseCount());
                moneyCardUse.setLastCount(moneyCar.getCarUseCount());
                moneyCardUse.setUseTotal(shoppingGoods.getCarUseCount());
                moneyCardUse.setLastCount(shoppingGoods.getCarUseCount());
            }
            //失效时间处理
            Date invalidTime = shoppingGoodsService.calInvalidTime(moneyCar, 1, null);
            Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 1, null);
            moneyCardUse.setFailTime(invalidTime);
            moneyCardUseDao.insert(moneyCardUse);
@@ -97,82 +105,154 @@
    }
    @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);
        }
    public void deleteByOrderItemId(Long orderItemId) {
        List<MoneyCardUse> moneyCardUseList = getMoneyCardUseListByOrderItemId(orderItemId);
        moneyCardUseList.forEach(moneyCardUse -> {
            MoneyCardUseFlow  moneyCardUseFlow=new MoneyCardUseFlow();
            moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
            int i = moneyCardUseFlowDao.selectTotalRecord(moneyCardUseFlow);
            if(i>0){
                throw new GlobleException(moneyCardUse.getCardName()+"储值卡已经被启用无法删除");
            }else {
                LogUtil.info("根据订单明细id{},删除储值卡:{}", orderItemId,moneyCardUse.getCardName());
                moneyCardUseDao.deleteById(moneyCardUse.getId());
            }
        });
    }
    @Override
    public void moneyCardTk(List<MoneyCardOperationDto> moneyCardOperationDtos) {
        MoneyCardUseFlow  moneyCardUseFlow=new MoneyCardUseFlow();
        moneyCardOperationDtos.forEach(moneyCardOperationDto -> {
            List<MoneyCardUse> moneyCardUseList = list(lambdaQuery().eq(MoneyCardUse::getOrderItemId, moneyCardOperationDto.getOrderItemId()));
            GroupValidateStatusCheckUtil.check(moneyCardOperationDto, MoneyCardUseGroup.moneyCardUseTk.class);
            List<MoneyCardUse> moneyCardUseList = getMoneyCardUseListByOrderItemId(moneyCardOperationDto.getOrderItemId());
            for (MoneyCardUse moneyCardUse : moneyCardUseList) {
                moneyCardUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
                //本金扣款
                if (moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney() >= 0) {
                    double surplus = MoneyUtil.add(moneyCardUse.getRealMoney(), moneyCardOperationDto.getRealMoney());
                    moneyCardUse.setRealMoney(surplus);
                } else {
                    throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
                }
                //余额为0时充值卡变为无效
                if (moneyCardUse.getRealMoney().equals(0D)) {
                    moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
                    moneyCardUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
                }
                moneyCardUse.setGiftMoney(0D);
                moneyCardUseDao.update(moneyCardUse);
                //设置卡项使用流水
                moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
                moneyCardUseFlow.setOrderNo(moneyCardOperationDto.getOrderNo());
                moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
                moneyCardUseFlow.setTimes(moneyCardUse.getLastCount());
                moneyCardUseFlow.setType(moneyCardOperationDto.getType());
                moneyCardUseFlow.setCreateTime(new Date());
                moneyCardUseFlow.setOperationId(moneyCardOperationDto.getUpdateUser());
                moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
                moneyCardUseFlowDao.insert(moneyCardUseFlow);
                saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
            }
        });
    }
    /**
     * 根据订单明细id查询会员卡
     * @param orderItemId
     * @return
     */
    private List<MoneyCardUse> getMoneyCardUseListByOrderItemId(Long orderItemId) {
        LambdaQueryWrapper<MoneyCardUse> lambdaQueryChainWrapper = new LambdaQueryWrapper();
        lambdaQueryChainWrapper.eq(MoneyCardUse::getOrderItemId, orderItemId);
        List<MoneyCardUse> moneyCardUseList = list(lambdaQueryChainWrapper);
        return moneyCardUseList;
    }
    /**
     * 保存储值卡流水
     * @param moneyCardOperationDto
     * @param moneyCardUse
     */
    private  void saveMoneyCardUseFlow(MoneyCardOperationDto moneyCardOperationDto,MoneyCardUse moneyCardUse){
        MoneyCardUseFlow  moneyCardUseFlow=new MoneyCardUseFlow();
        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
        moneyCardUseFlow.setOrderNo(moneyCardOperationDto.getOrderNo());
        moneyCardUseFlow.setVipId(moneyCardUse.getVipId());
        moneyCardUseFlow.setTimes(moneyCardUse.getLastCount());
        moneyCardUseFlow.setType(moneyCardOperationDto.getType());
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(moneyCardOperationDto.getUpdateUser());
        moneyCardUseFlow.setTotal(moneyCardUse.getRealMoney());
        moneyCardUseFlow.setGiftMoney(moneyCardUse.getGiftMoney());
        moneyCardUseFlow.setTotal(moneyCardOperationDto.getRealMoney());
        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
        moneyCardUseFlow.setStaffName(sysUsersDao.selectById(moneyCardOperationDto.getUpdateUser()).getSuName());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void changeMoneyCard(List<MoneyCardPayDto> moneyCardPayDtoList) {
        moneyCardPayDtoList.forEach(moneyCardPayDto -> {
            if (MoneyCardUseFlow.USE_TYPE_CONSUMER.equals(moneyCardPayDto.getType())) {
                //扣减储值卡余额
                deductMoneyCard(moneyCardPayDto);
            } else if (MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL.equals(moneyCardPayDto.getType())) {
    public void changeMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtoList) {
        moneyCardOperationDtoList.forEach(moneyCardOperationDto -> {
            if (MoneyCardUseFlow.USE_TYPE_CONSUMER.equals(moneyCardOperationDto.getType())) {
                //储值卡支付订单 扣减储值卡余额
                GroupValidateStatusCheckUtil.check(moneyCardOperationDto,MoneyCardUseGroup.moneyCardUseOrderChange.class);
                moneyCardPayOrder(moneyCardOperationDto);
            } else if (MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL.equals(moneyCardOperationDto.getType())) {
                //回退储值卡余额
                returnMoneyCard(moneyCardPayDto);
                GroupValidateStatusCheckUtil.check(moneyCardOperationDto,MoneyCardUseGroup.moneyCardUseOrderChange.class);
                returnMoneyCard(moneyCardOperationDto);
            } else if (MoneyCardUseFlow.USE_TYPE_CZ.equals(moneyCardOperationDto.getType())) {
                //回退储值卡余额
                GroupValidateStatusCheckUtil.check(moneyCardOperationDto,MoneyCardUseGroup.moneyCardUseCz.class);
                moneyCardCz(moneyCardOperationDto);
            }
        });
    }
    /**
     * 会员卡充值
     * @param moneyCardOperationDto
     */
    private void moneyCardCz(MoneyCardOperationDto moneyCardOperationDto) {
        LogUtil.info("会员卡充值 {}", JSON.toJSONString(moneyCardOperationDto));
        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId());
        if (Objects.nonNull(moneyCardOperationDto.getGiftMoney())) {
            //jyytodo 余额余次的修改和新增在数据库层面做加减
            moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney());
        }
        if (Objects.nonNull(moneyCardOperationDto.getRealMoney())) {
            moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney());
        }
        moneyCardUseDao.update(moneyCardUse);
        //设置卡项使用流水
        saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
    }
    /**
     * 回退储值卡余额
     *
     * @param moneyCardPayDto
     * @param moneyCardOperationDto
     */
    private void returnMoneyCard(MoneyCardPayDto moneyCardPayDto) {
        LogUtil.info("回退储值卡余额 {}", JSON.toJSONString(moneyCardPayDto));
        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId());
    private void returnMoneyCard(MoneyCardOperationDto moneyCardOperationDto) {
        LogUtil.info("回退储值卡余额 {}", JSON.toJSONString(moneyCardOperationDto));
        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId());
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        if (Objects.nonNull(moneyCardPayDto.getGiftMoney())) {
        if (Objects.nonNull(moneyCardOperationDto.getGiftMoney())) {
            //jyytodo 余额余次的修改和新增在数据库层面做加减
            moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardPayDto.getGiftMoney());
            moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney());
        }
        if (Objects.nonNull(moneyCardPayDto.getRealMoney())) {
            moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardPayDto.getRealMoney());
        if (Objects.nonNull(moneyCardOperationDto.getRealMoney())) {
            moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney());
        }
        moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
        moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
@@ -180,48 +260,42 @@
        //设置卡项使用流水
        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);
        saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
    }
    /**
     * 扣减储值余额
     * 储值卡支付订单 扣减储值卡余额
     *
     * @param moneyCardPayDto
     * @param moneyCardOperationDto
     */
    private void deductMoneyCard(MoneyCardPayDto moneyCardPayDto) {
    private void moneyCardPayOrder(MoneyCardOperationDto moneyCardOperationDto) {
        // 判断商品是否在充值卡的限制购买
        VerificationResult verificationResult = checkIsBangding(moneyCardPayDto.getCarUseId(), moneyCardPayDto.getGoodsIds());
        VerificationResult verificationResult = checkIsBangding(moneyCardOperationDto.getCarUseId(), moneyCardOperationDto.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() + "余额不足");
            }
        LogUtil.info("扣减储值卡余额 {}", JSON.toJSONString(moneyCardOperationDto));
        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId());
        //欠款检查
        checkOrderStatu(moneyCardUse.getOrderItemId());
        //赠送金额扣款
        if (moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney() >= 0) {
            double surplus = MoneyUtil.add(moneyCardUse.getGiftMoney(), moneyCardOperationDto.getGiftMoney());
            moneyCardUse.setGiftMoney(surplus);
        } 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() + "余额不足");
            }
            throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
        }
        //本金扣款
        if (moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney() >= 0) {
            double surplus = MoneyUtil.add(moneyCardUse.getRealMoney(), moneyCardOperationDto.getRealMoney());
            moneyCardUse.setRealMoney(surplus);
        } else {
            throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
        }
        if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
            //余额为0时充值卡变为无效
@@ -237,21 +311,11 @@
            moneyCardUse.setFailTime(invalidTime);
        }
        moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardPayDto.getCount());
        moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardOperationDto.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);
        saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
    }
    /**
@@ -271,7 +335,7 @@
            // 不是默认储值卡判断卡是否可应用于所有产品
            ShoppingGoods cardGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
            if (cardGoods != null) {
                if (Dictionary.FLAG_YES.equals(cardGoods.getGoodType())) {
                if (Dictionary.FLAG_YES.equals(cardGoods.getCarIsAll())) {
                    return VerificationResult.success();
                }
            }
@@ -429,6 +493,7 @@
    @Transactional(rollbackFor = Exception.class)
    public void transfer(MoneyCardUse moneyCardUse, Long vipId2, Double money) {
        Long oldId = moneyCardUse.getId();
        moneyCardUse = moneyCardUseDao.selectById(moneyCardUse.getId());
        if (moneyCardUse.getVipId().equals(vipId2)) {
            throw new GlobleException("转让人不能是该充值卡拥有者!");
@@ -514,10 +579,10 @@
    /**
     * 检测订单条目是否已付款完毕
     */
    public void checkOrderStatu(Long id) {
        SysOrderItem item = orderItemDao.selectById(id);
        if (!Dictionary.ORDER_STATU_YFK.equals(item.getStatus())) {
            throw new GlobleException("该商品还存在欠款!");
    public void checkOrderStatu(Long orderItemId) {
        SysOrder order = sysOrderService.findById(orderItemDao.selectById(orderItemId).getOrderId());
        if (!Dictionary.ORDER_STATU_YFK.equals(order.getStatu())) {
            throw new GlobleException("储值卡购买订单还存在欠款,在补交欠款后才能使用!");
        }
    }
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysInstoreInfoServiceImpl.java
@@ -1,9 +1,11 @@
package com.matrix.system.hive.service.imp;
import com.alibaba.fastjson.JSON;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.constance.Dictionary;
@@ -50,11 +52,7 @@
        sysInstoreInfo.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
        // 设置入库单编号
        sysInstoreInfo.setInstoreId(DateUtil.getTimeMark());
//        SysShopInfo info = shopInfoDao.selectByShopName(Dictionary.SHOP_NAME_ZONGDIAN);
//        // 系统限制入库只能入库到总店,总店不存在则
//        if (info == null) {
//            throw new GlobleException("总店仓库不存在,请添加!");
//        }
        // 插入
        int i = sysInstoreInfoDao.insert(sysInstoreInfo);
        // 设置总金额,并更新
@@ -180,6 +178,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int check(SysInstoreInfo sysInstoreInfo) {
        LogUtil.info("入库单审核:{}", JSON.toJSONString(sysInstoreInfo));
        // 验证权限
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        sysInstoreInfo.setAppmanId(user.getSuId());
@@ -187,9 +186,6 @@
        sysInstoreInfo.setCompanyId(user.getCompanyId());
        SysInstoreInfo checkInStore = sysInstoreInfoDao.selectById(sysInstoreInfo.getId());
//        if (!checkInStore.getAppmanId().equals(user.getSuId())) {
//            throw new GlobleException("无权审核该单据!");
//        }
        if (!checkInStore.getCheckStatus().equals(Dictionary.CHECK_STATUS_DSH)) {
            throw new GlobleException("该单据状态为" + checkInStore.getCheckStatus() + ",不可审核!");
        }
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
@@ -12,6 +12,7 @@
import com.google.common.collect.Lists;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
@@ -26,14 +27,11 @@
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.pojo.CzXkVo;
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.hive.service.*;
import com.matrix.system.score.constant.ScoreSettingConstant;
import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
@@ -42,6 +40,7 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -60,6 +59,12 @@
@Component
public class SysOrderServiceHelper {
    @Autowired
    SysInstoreInfoService sysInstoreInfoService;
    @Autowired
    private SysSupplierInfoDao sysSupplierInfoDao;
    @Autowired
    ScoreVipDetailService scoreVipDetailService;
@@ -173,11 +178,14 @@
                Double zk = sysOrderItem.getZkPrice() / sysOrderItem.getPrice();
                projUseOperationDto.setTcZk(zk);
            }
            SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
            projUseOperationDto.setPayMoney(sysOrderItem.getZkPrice());
            projUseOperationDto.setGoodsId(sysOrderItem.getGoodsId());
            projUseOperationDto.setCount(sysOrderItem.getCount());
            projUseOperationDto.setVipId(order.getVipId());
            projUseOperationDto.setOrderItemId(sysOrderItem.getId());
            projUseOperationDto.setUpdateUserId(sysUsers.getSuId());
            projUseDtoList.add(projUseOperationDto);
        }
        sysProjUseService.addUserProjUse(projUseDtoList);
@@ -215,34 +223,36 @@
        List<SysOrderFlow> flows = pageOrder.getFlows();
        List<Long> goodsIds = pageOrder.getItems().stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
        List<MoneyCardPayDto> moneyCardPayDtoList = Lists.newArrayList();
        List<MoneyCardOperationDto> moneyCardOperationDtos = Lists.newArrayList();
        flows.forEach(flow -> {
            if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                if (flow.getCardId() != null) {
                    MoneyCardPayDto dto = new MoneyCardPayDto();
                    MoneyCardOperationDto dto = new MoneyCardOperationDto();
                    dto.setOrderNo(pageOrder.getOrderNo());
                    dto.setOrderId(pageOrder.getId());
                    dto.setCount(1);
                    dto.setCarUseId(flow.getCardId());
                    dto.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
                    if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
                        dto.setGiftMoney(flow.getAmount().doubleValue());
                        dto.setGiftMoney(-flow.getAmount().doubleValue());
                        dto.setRealMoney(0D);
                    } else {
                        dto.setRealMoney(flow.getAmount().doubleValue());
                        dto.setRealMoney(-flow.getAmount().doubleValue());
                        dto.setGiftMoney(0D);
                    }
                    dto.setUpdateUser(user.getSuId());
                    dto.setGoodsIds(goodsIds);
                    moneyCardPayDtoList.add(dto);
                    moneyCardOperationDtos.add(dto);
                } else {
                    throw new GlobleException("无效的储值卡支付方式");
                }
            }
        });
        if (CollectionUtils.isNotEmpty(moneyCardPayDtoList)) {
            LogUtil.info("扣除储值卡余额{}", JSON.toJSONString(moneyCardPayDtoList));
            moneyCardUseService.changeMoneyCard(moneyCardPayDtoList);
        if (CollectionUtils.isNotEmpty(moneyCardOperationDtos)) {
            LogUtil.info("扣除储值卡余额{}", JSON.toJSONString(moneyCardOperationDtos));
            moneyCardUseService.changeMoneyCard(moneyCardOperationDtos);
        }
    }
@@ -253,14 +263,14 @@
     */
    public void returnMoneyCardPay(SysOrder order) {
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        List<MoneyCardPayDto> moneyCardPayDtoList = Lists.newArrayList();
        List<MoneyCardOperationDto> moneyCardOperationDtos = 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();
                    MoneyCardOperationDto dto = new MoneyCardOperationDto();
                    dto.setOrderNo(order.getOrderNo());
                    dto.setOrderId(order.getId());
                    dto.setCount(1);
@@ -272,16 +282,16 @@
                        dto.setRealMoney(flow.getAmount().doubleValue());
                    }
                    dto.setUpdateUser(user.getSuId());
                    moneyCardPayDtoList.add(dto);
                    moneyCardOperationDtos.add(dto);
                } else {
                    throw new GlobleException("无效的储值卡支付方式");
                }
            }
        }
        if (CollectionUtils.isNotEmpty(moneyCardPayDtoList)) {
            LogUtil.info("退回储值卡余额{}", JSON.toJSONString(moneyCardPayDtoList));
            moneyCardUseService.changeMoneyCard(moneyCardPayDtoList);
        if (CollectionUtils.isNotEmpty(moneyCardOperationDtos)) {
            LogUtil.info("退回储值卡余额{}", JSON.toJSONString(moneyCardOperationDtos));
            moneyCardUseService.changeMoneyCard(moneyCardOperationDtos);
        }
    }
@@ -293,6 +303,7 @@
    public void addMoneyCardUse(SysOrder sourceOrder) {
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        List<MoneyCardOperationDto> moneyCardOperationDtos = Lists.newArrayList();
        List<SysOrderItem> orderItemList = sourceOrder.getItems();
        for (SysOrderItem sysOrderItem : orderItemList) {
@@ -301,15 +312,20 @@
                for (int i = 0; i < sysOrderItem.getCount(); i++) {
                    MoneyCardOperationDto moneyCardOperationDto = new MoneyCardOperationDto();
                    moneyCardOperationDto.setVipId(sourceOrder.getVipId());
                    // 是否为赠送
                    if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) {
                        moneyCardOperationDto.setSource(Dictionary.TAOCAN_SOURCE_ZS);
                    } else {
                        moneyCardOperationDto.setSource(Dictionary.TAOCAN_SOURCE_GM);
                    }
                    moneyCardOperationDto.setType(MoneyCardUseFlow.USE_TYPE_GM);
                    moneyCardOperationDto.setOrderItemId(sysOrderItem.getId());
                    moneyCardOperationDto.setGoodsId(sysOrderItem.getGoodsId());
                    moneyCardOperationDto.setOrderId(sourceOrder.getId());
                    moneyCardOperationDto.setOrderNo(sourceOrder.getOrderNo());
                    moneyCardOperationDto.setVipId(sourceOrder.getVipId());
                    moneyCardOperationDto.setUpdateUser(user.getSuId());
                    moneyCardOperationDtos.add(moneyCardOperationDto);
                }
            }
@@ -743,6 +759,21 @@
        sysOrder.setPayTime(now);
        sysOrder.setOrderNo(codeService.getRefundOrderNo());
        sysOrder.setZkTotal(-sysOrder.getZkTotal());
        double cardPayTotal = 0D;
        double cashPayTotal = 0D;
        for (SysOrderFlow flow : sysOrder.getFlows()) {
            // 若使用储值卡付款
            if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                cardPayTotal += flow.getAmount().doubleValue();
            } else {
                cashPayTotal += flow.getAmount().doubleValue();
            }
        }
        sysOrder.setCardPay(0-( sourceOrder.getCardPay() == null ? 0 : sourceOrder.getCardPay() + cardPayTotal));
        sysOrder.setCashPay(0-(sourceOrder.getCashPay() == null ? 0 : sourceOrder.getCashPay() + cashPayTotal));
        //新增订单
        sysOrderDao.insert(sysOrder);
        //插入明细
@@ -758,6 +789,7 @@
            }
            //插入新的订单明细
            item.setCount(-item.getCount());
            item.setZkPrice(-item.getZkPrice());
            item.setOrderId(sysOrder.getId());
            orderItemDao.insert(item);
        }
@@ -765,4 +797,48 @@
        return sysOrder;
    }
    /**
     * 退款入库
     */
    public void refundInstore(@NotEmpty List<SysOrderItem> items) {
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        SysSupplierInfo supplierInfo = new SysSupplierInfo();
        supplierInfo.setShopId(user.getShopId());
        supplierInfo = sysSupplierInfoDao.selectByModel(supplierInfo).get(0);
        Warehouse warehouse = warehouseDao.findShopWarehouse(user.getShopId()).get(0);
        SysInstoreInfo instoreInfo = new SysInstoreInfo();
        instoreInfo.setInstoreType(SysInstoreInfo.INSTORE_TYPE_RETURN);
        instoreInfo.setInstoreDate(new Date());
        instoreInfo.setSupplierId(supplierInfo.getId().toString());
        instoreInfo.setStoreId(warehouse.getId());
        instoreInfo.setShopId(user.getShopId());
        instoreInfo.setCompanyId(user.getCompanyId());
        Double total = 0.0;
        List<SysInstoreDetail> instoreDetails = new ArrayList<>();
        for (SysOrderItem item : items) {
            ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId());
            SysInstoreDetail sysInstoreDetail = new SysInstoreDetail();
            sysInstoreDetail.setAmount(item.getCount().doubleValue());
            sysInstoreDetail.setPrice(item.getZkPrice());
            sysInstoreDetail.setSkuId(goods.getId());
            total = MoneyUtil.add(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""), sysInstoreDetail.getPrice()), total);
            sysInstoreDetail.setInstoreId(instoreInfo.getId());
            // 设置小计
            sysInstoreDetail.setPriceTotal(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""), sysInstoreDetail.getPrice()));
            instoreDetails.add(sysInstoreDetail);
        }
        instoreInfo.setInstoreDetails(instoreDetails);
        instoreInfo.setSumall(total);
        sysInstoreInfoService.add(instoreInfo);
        //自动审核单据
        sysInstoreInfoService.check(instoreInfo);
    }
}
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -56,14 +56,8 @@
    @Autowired
    private SysOrderItemDao orderItemDao;
    @Autowired
    private SysProjUseDao sysProjUseDao;
    private SysProjUseService sysProjUseService;
    @Autowired
    private SysStoreInfoDao storeInfoDao;
    @Autowired
    private CodeService codeService;
    @Autowired
    SysVipInfoDao sysVipInfoDao;
    @Autowired
@@ -103,26 +97,12 @@
    @Autowired
    private AchieveNewDao achieveNewDao;
    @Autowired
    private WarehouseDao warehouseDao;
    @Autowired
    private ShoppingGoodsService shoppingGoodsService;
    @Autowired
    private SysOrderFlowDao sysOrderFlowDao;
    @Autowired
    private SysSupplierInfoDao sysSupplierInfoDao;
    @Autowired
    private SysInstoreInfoDao sysInstoreInfoDao;
    @Autowired
    private SysInstoreDetailDao sysInstoreDetailDao;
    @Autowired
    private SysInstoreInfoService sysInstoreInfoService;
    @Autowired
    BusParameterSettingsDao parameterSettingsDao;
@@ -495,14 +475,17 @@
        //新增会员卡金额
        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));
        MoneyCardOperationDto moneyCardOperationDto = new MoneyCardOperationDto();
        moneyCardOperationDto.setRealMoney(czVo.getBjmoney());
        moneyCardOperationDto.setGiftMoney(czVo.getGiftMoney());
        moneyCardOperationDto.setCarUseId(cardUser.getId());
        moneyCardOperationDto.setOrderId(order.getId());
        moneyCardOperationDto.setOrderNo(order.getOrderNo());
        moneyCardOperationDto.setType(MoneyCardUseFlow.USE_TYPE_CZ);
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        moneyCardOperationDto.setUpdateUser(user.getSuId());
        moneyCardUseService.changeMoneyCard(Arrays.asList(moneyCardOperationDto));
        // 更新订单主表信息
        payEndUpdateOrderInfo(order);
@@ -566,7 +549,6 @@
    @Override
    public void orderTk(SysOrder sysOrder) {
        SysOrder oldOrder = sysOrderDao.selectById(sysOrder.getOldOrderId());
        //创建并保存退款订单
        sysOrder = sysOrderServiceHelper.createTkOrder(sysOrder);
        // 添加订单收款流水
@@ -574,6 +556,7 @@
        //退款退套餐退项目
        refundProjUse(sysOrder);
        //删除积分
        SysOrder oldOrder = sysOrderDao.selectById(sysOrder.getOldOrderId());
        scoreVipDetailService.removeByBusinessId(oldOrder.getVipId(), oldOrder.getId());
        // 设置业绩
@@ -616,17 +599,20 @@
                    || Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType())) {
                ProjUseOperationDto dto = new ProjUseOperationDto();
                dto.setGoodsId(item.getGoodsId());
                dto.setCount(item.getCount());
                dto.setCount(item.getRefundCount());
                dto.setOrderItemId(item.getOldItemId());
                dto.setUpdateUserId(user.getSuId());
                projUseDtoList.add(dto);
            }else   if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(item.getType())) {
            }else if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(item.getType())) {
                MoneyCardOperationDto moneyCardOperationDto = new MoneyCardOperationDto();
                moneyCardOperationDto.setOrderId(sysOrder.getId());
                moneyCardOperationDto.setOrderNo(sysOrder.getOrderNo());
                moneyCardOperationDto.setOrderItemId(item.getOldItemId());
                moneyCardOperationDto.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL);
                moneyCardOperationDto.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_TK);
                moneyCardOperationDto.setUpdateUser(user.getSuId());
                moneyCardOperationDto.setOrderNo(sysOrder.getOrderNo());
                moneyCardOperationDto.setRealMoney(item.getZkPrice());
                moneyCardOperationDtos.add(moneyCardOperationDto);
            }
        }
@@ -636,7 +622,7 @@
            // 家居产品退库存
            if (CollectionUtils.isNotEmpty(returnGoodsList)) {
                LogUtil.info("订单退款:退产品库存:{}", JSON.toJSONString(returnGoodsList));
                refundInstore(returnGoodsList);
                sysOrderServiceHelper.refundInstore(returnGoodsList);
            }
        }
@@ -651,50 +637,9 @@
        }
    }
    /**
     * 退款入库
     */
    private void refundInstore(@NotEmpty List<SysOrderItem> items) {
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        SysSupplierInfo supplierInfo = new SysSupplierInfo();
        supplierInfo.setShopId(user.getShopId());
        supplierInfo = sysSupplierInfoDao.selectByModel(supplierInfo).get(0);
        Warehouse warehouse = warehouseDao.findShopWarehouse(user.getShopId()).get(0);
        SysInstoreInfo instoreInfo = new SysInstoreInfo();
        instoreInfo.setInstoreType(SysInstoreInfo.INSTORE_TYPE_RETURN);
        instoreInfo.setInstoreDate(new Date());
        instoreInfo.setSupplierId(supplierInfo.getId().toString());
        instoreInfo.setStoreId(warehouse.getId());
        instoreInfo.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
        // 设置入库单编号
        instoreInfo.setInstoreId(DateUtil.getTimeMark());
        instoreInfo.setShopId(user.getShopId());
        instoreInfo.setCompanyId(user.getCompanyId());
        sysInstoreInfoDao.insert(instoreInfo);
        Double total = 0.0;
        List<SysInstoreDetail> instoreDetails = new ArrayList<>();
        for (SysOrderItem item : items) {
            ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId());
            SysInstoreDetail sysInstoreDetail = new SysInstoreDetail();
            sysInstoreDetail.setAmount(item.getCount().doubleValue());
            sysInstoreDetail.setPrice(item.getZkPrice());
            sysInstoreDetail.setSkuId(goods.getId());
            total = MoneyUtil.add(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""), sysInstoreDetail.getPrice()), total);
            sysInstoreDetail.setInstoreId(instoreInfo.getId());
            // 设置小计
            sysInstoreDetail.setPriceTotal(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""), sysInstoreDetail.getPrice()));
            instoreDetails.add(sysInstoreDetail);
        }
        instoreInfo.setSumall(total);
        sysInstoreInfoDao.update(instoreInfo);
        sysInstoreDetailDao.batchInsert(instoreDetails);
        sysInstoreInfoService.check(instoreInfo);
    }
    @Override
    public BigDecimal findVipArrearsByVipId(Long vipId) {
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
@@ -10,11 +10,13 @@
import com.matrix.system.app.mapper.SysProjUseMapper;
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.dao.SysUsersDao;
import com.matrix.system.common.validate.GroupValidateStatusCheckUtil;
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.hievEnum.OrderOperationEnum;
import com.matrix.system.hive.plugin.util.MoneyUtil;
import com.matrix.system.hive.service.ShoppingGoodsService;
import com.matrix.system.hive.service.SysBeauticianStateService;
@@ -67,6 +69,9 @@
    @Autowired
    BusParameterSettingsDao busParameterSettingsDao;
    @Autowired
    SysUsersDao sysUsersDao;
    @Override
    public int add(SysProjUse sysProjUse) {
@@ -356,11 +361,9 @@
        if (Dictionary.TAOCAN_SOURCE_QY.equals(projuse.getSource())) {
            return;
        }
        if (projuse.getPlatformFlag().contains(Dictionary.SHOPPING_GOODS_SALE_PLATFORM_XX)) {
            SysOrderItem orderItem = orderItemDao.selectById(projuse.getOrderItemId());
            if (!Dictionary.ORDER_STATU_YFK.equals(orderItem.getStatus())) {
                throw new GlobleException("该商品存在欠款!");
            }
        String orderStatus = orderItemDao.selectOrderStatusByItemId(projuse.getOrderItemId());
        if (!Dictionary.ORDER_STATU_YFK.equals(orderStatus)) {
            throw new GlobleException(projuse.getProjName()+"的购买订单存在欠款!");
        }
    }
@@ -615,12 +618,8 @@
        projUseDtoList.forEach(projUseOperationDto -> {
            //校验参数
            ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.projectTk.class);
            if (baseIdResult.hasErrors()) {
                throw new GlobleException(baseIdResult.getErrors());
            }
            GroupValidateStatusCheckUtil.check(projUseOperationDto, ProjUseGroup.projectTk.class);
            ShoppingGoods shoppingGoods = shoppingGoodsMap.get(projUseOperationDto.getGoodsId());
            if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(shoppingGoods.getGoodType())) {
@@ -644,32 +643,29 @@
    private void taocanTk(ProjUseOperationDto projUseOperationDto) {
        List<SysProjUse> projUseList = sysProjUseDao.selectByOrderItemId(projUseOperationDto.getOrderItemId());
        List<SysProjUse> tcList = projUseList.stream().filter(item -> Objects.isNull(item.getTaocanId()) && item.getStatus().equals(Dictionary.TAOCAN_STATUS_YX) ).collect(Collectors.toList());
        if (tcList.size() < projUseOperationDto.getCount()) {
            throw new GlobleException("套餐余次不足");
        }
        for (int i = 0; i < tcList.size(); i++) {
        projUseOperationDto.setOrderOperationType(OrderOperationEnum.RETURN);
        for (int i = 0; i < projUseOperationDto.getCount(); i++) {
            SysProjUse sysProjUse = tcList.get(i);
            setInvalid(sysProjUse);
            setTaocanTk(sysProjUse,projUseOperationDto);
            //设置套餐下的项目无效
            projUseList.stream().filter(item->item.getTaocanId().equals(sysProjUse.getId())).collect(Collectors.toList())
                    .forEach(item->setInvalid(item));
            projUseList.stream().filter(item->Objects.equals(sysProjUse.getId(),item.getTaocanId())).collect(Collectors.toList())
                    .forEach(item-> setTaocanTk(item,projUseOperationDto));
        }
    }
    private void setInvalid(SysProjUse sysProjUse) {
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
    private void setTaocanTk(SysProjUse sysProjUse, ProjUseOperationDto projUseOperationDto) {
        sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
        sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
        sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
        sysProjUse.setSurplusCount(0);
        sysProjUseDao.update(sysProjUse);
        SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse);
        sysProjUseFlow.setOptionType("退款修改");
        sysProjUseFlow.setUpdateBy(user.getSuName());
        sysProjUseFlow.setCreateBy(user.getSuName());
        sysProjUseDao.insertFlow(sysProjUseFlow);
        saveProjUseFlow(projUseOperationDto,sysProjUse);
    }
    /**
@@ -678,7 +674,6 @@
     */
    private void doProjectTk(ProjUseOperationDto projUseOperationDto) {
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        List<SysProjUse> projUseList = sysProjUseDao.selectByOrderItemId(projUseOperationDto.getOrderItemId());
        if(projUseList.size()==1){
            SysProjUse sysProjUse = projUseList.get(0);
@@ -687,19 +682,30 @@
                throw new GlobleException("项目余次不足");
            } else if (sub == 0) {
                sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
                sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
                sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
            }
            sysProjUse.setSurplusCount(sub);
            sysProjUseDao.update(sysProjUse);
            SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse);
            sysProjUseFlow.setOptionType("退款修改");
            sysProjUseFlow.setUpdateBy(user.getSuName());
            sysProjUseFlow.setCreateBy(user.getSuName());
            sysProjUseDao.insertFlow(sysProjUseFlow);
            projUseOperationDto.setOrderOperationType(OrderOperationEnum.RETURN);
            //保存操作流水
            saveProjUseFlow(projUseOperationDto,sysProjUse);
        }else{
            throw new GlobleException("查询项目余次异常");
        }
    }
    /**
     * 保存项目操作流水
     * @param projUseOperationDto
     * @param sysProjUse
     */
    private void saveProjUseFlow(ProjUseOperationDto projUseOperationDto, SysProjUse sysProjUse) {
        SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse);
        sysProjUseFlow.setOptionType(projUseOperationDto.getOrderOperationType().getDisplayName());
        SysUsers user = sysUsersDao.selectById(projUseOperationDto.getUpdateUserId());
        sysProjUseFlow.setUpdateBy(user.getSuName());
        sysProjUseFlow.setCreateBy(user.getSuName());
        sysProjUseDao.insertFlow(sysProjUseFlow);
    }
    /**
@@ -719,6 +725,7 @@
        Map<Long, ShoppingGoods> shoppingGoodsMap = shoppingGoodsList.stream().collect(Collectors.toMap(ShoppingGoods::getId, Function.identity()));
        for (ProjUseOperationDto projUseOperationDto : projUseDtoList) {
            ShoppingGoods shoppingGoods = shoppingGoodsMap.get(projUseOperationDto.getGoodsId());
            if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(shoppingGoods.getGoodType())) {
                createProjectUse(projUseOperationDto, shoppingGoods);
@@ -735,19 +742,15 @@
    private void createTaocanProjUse(ProjUseOperationDto projUseOperationDto, ShoppingGoods shoppingGoods) {
        ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.addTc.class);
        if (baseIdResult.hasErrors()) {
            throw new GlobleException(baseIdResult.getErrors());
        }
        GroupValidateStatusCheckUtil.check(projUseOperationDto,ProjUseGroup.addTc.class);
        //新建套餐
        SysProjUse taocanProjUse = new SysProjUse();
        ShoppingGoods taocanShoppingGoods = shoppingGoods;
        Long projId = shoppingGoods.getId();
        taocanProjUse.setProjId(projId);
        taocanProjUse.setIsOver(Dictionary.DELETED_N);
@@ -784,6 +787,7 @@
            projUseDto.setOrderItemId(projUseOperationDto.getOrderItemId());
            projUseDto.setVipId(projUseOperationDto.getVipId());
            projUseDto.setTcId(taocanProjUse.getId());
            projUseDto.setUpdateUserId(projUseOperationDto.getUpdateUserId());
            SysProjUse tempUse = createProjectUse(projUseDto, assemble.getShoppingGoods());
            sumBanance += tempUse.getBalance();
            surplusCount += tempUse.getSurplusCount();
@@ -804,10 +808,7 @@
    private SysProjUse createProjectUse(ProjUseOperationDto projUseOperationDto, ShoppingGoods shoppingGoods) {
        ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.addProject.class);
        if (baseIdResult.hasErrors()) {
            throw new GlobleException(baseIdResult.getErrors());
        }
        GroupValidateStatusCheckUtil.check(projUseOperationDto,ProjUseGroup.addProject.class);
        SysProjUse puse = new SysProjUse();
        puse.setIsOver(Dictionary.DELETED_N);
zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java
@@ -9,4 +9,16 @@
    interface moneyCardUseTk {
    }
    /**
     * 充值
     */
    interface moneyCardUseCz {
    }
    /**
     * 订单修改金额
     */
    interface moneyCardUseOrderChange {
    }
}
zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java
@@ -21,4 +21,10 @@
    interface projectTk {
    }
    /**
     * 套餐退款
     */
    interface taocanTk {
    }
}
zq-erp/src/main/resources/mybatis/mapper/hive/SysInstoreInfoDao.xml
@@ -34,7 +34,6 @@
    <insert id="insert" parameterType="SysInstoreInfo"
            useGeneratedKeys="true" keyProperty="id">
        INSERT INTO sys_instore_info (
            ID,
            INSTORE_DATE,
            INSTORE_TYPE,
            AMMOUNT_ALL,
@@ -52,7 +51,6 @@
            company_id
        )
    VALUES (
            #{id},
            #{instoreDate},
            #{instoreType},
            #{ammountAll},
zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
@@ -565,5 +565,10 @@
                            left join sys_order b on a.ORDER_ID=b.id
        where a.type='家居产品' and DATE_FORMAT(a.create_time,'%Y-%m')='2021-04' and b.company_id=17 and b.STATU='已付款';
    </select>
    <select id="selectOrderStatusByItemId" resultType="java.lang.String">
        select b.statu from sys_order_item a
                                left join sys_order b on a.ORDER_ID=b.id
            where a.id=#{orderItemId}
    </select>
</mapper>
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/orderXq-form.html
@@ -212,8 +212,10 @@
                                    label="单价">
                            </el-table-column>
                            <el-table-column
                                    prop="count"
                                    label="可退数量">
                                <template slot-scope="scope">
                                  {{scope.row.count- scope.row.refundCount}}
                                </template>
                            </el-table-column>
                            <el-table-column label="退款单价">
                                <template slot-scope="scope">
@@ -683,7 +685,7 @@
                                }
                            }
                            item.achaeveList = achieveList;
                            item.achieveList = achieveList;
                        }
                        if (item.returnStore) {
                            item.isReturnStore = 'Y';