From e23c8975e6bb0934cb5db46a94d0f83c9739d9ab Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Sun, 20 Mar 2022 16:33:17 +0800
Subject: [PATCH] 重构:套餐项目

---
 zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java             |    3 
 zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java                  |   10 
 zq-erp/src/main/java/com/matrix/core/exception/GlobleExceptionResolver.java              |    4 
 zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java                 |    6 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java     |  277 ++++++++++------
 zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java       |    1 
 zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java                   |    2 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java       |   86 ++--
 zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java                 |   38 +
 zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java                     |    2 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java         |   93 +----
 zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml                        |    5 
 zq-erp/src/main/resources/mybatis/mapper/hive/SysInstoreInfoDao.xml                      |    2 
 /dev/null                                                                                |   66 ---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java       |  114 +++++-
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java       |   83 ++--
 zq-erp/src/main/java/com/matrix/system/hive/hievEnum/OrderOperationEnum.java             |   65 +++
 zq-erp/src/main/java/com/matrix/system/common/tools/ServiceUtil.java                     |    2 
 zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java               |   74 +++
 zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/orderXq-form.html       |    6 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysInstoreInfoServiceImpl.java   |   12 
 zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java            |   12 
 zq-erp/src/main/java/com/matrix/system/common/validate/GroupValidateStatusCheckUtil.java |   30 +
 23 files changed, 605 insertions(+), 388 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/core/exception/GlobleExceptionResolver.java b/zq-erp/src/main/java/com/matrix/core/exception/GlobleExceptionResolver.java
index f8037ae..15592ad 100644
--- a/zq-erp/src/main/java/com/matrix/core/exception/GlobleExceptionResolver.java
+++ b/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));
             // 发送异常信息到管理群
diff --git a/zq-erp/src/main/java/com/matrix/system/common/tools/ServiceUtil.java b/zq-erp/src/main/java/com/matrix/system/common/tools/ServiceUtil.java
index 654f4d8..4f589bf 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/tools/ServiceUtil.java
+++ b/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);
 	}
 
diff --git a/zq-erp/src/main/java/com/matrix/system/common/validate/GroupValidateStatusCheckUtil.java b/zq-erp/src/main/java/com/matrix/system/common/validate/GroupValidateStatusCheckUtil.java
new file mode 100644
index 0000000..ade5b7c
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/validate/GroupValidateStatusCheckUtil.java
@@ -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());
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
index fa7bb7d..d894cc4 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
+++ b/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);
 
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java
index 55d7d89..0ae2601 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java
+++ b/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 = "会员卡调整";
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java
index b8793dc..2c88504 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java
+++ b/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);
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java b/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java
index 6d0040d..9e5f5e0 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java
+++ b/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;
+
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardPayDto.java b/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardPayDto.java
deleted file mode 100644
index 7df89df..0000000
--- a/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardPayDto.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * projectName: zq-erp
- * fileName: MoneyCardChangeDto.java
- * packageName: com.matrix.system.hive.dto
- * date: 2022-03-11 10:24
- * copyright(c) 2022 http://www.hydee.cn/ Inc. All rights reserved.
- */
-package com.matrix.system.hive.dto;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @version: V1.0
- * @author: JiangYouYao
- * @className: MoneyCardChangeDto
- * @packageName: com.matrix.system.hive.dto
- * @description: 储值卡余额支付DTO
- * @data: 2022-03-11 10:24
- **/
-@Data
-public class MoneyCardPayDto {
-
-
-    /**
-     * 储值卡id
-     */
-    private Long carUseId;
-    /**
-     * 订单id
-     */
-    private Long  orderId;
-    /**
-     * 订单编号
-     */
-    private String orderNo;
-    /**
-     * 操作类型
-     */
-    private String type;
-    /**
-     * 赠送金额扣减
-     */
-    private Double giftMoney;
-    /**
-     * 本金扣减
-     */
-    private Double realMoney;
-    /**
-     * 扣减次数
-     */
-    private Integer count;
-    /**
-     * 操作人
-     */
-    private Long updateUser;
-
-    /**
-     * 支付的商品id
-     */
-    private List<Long> goodsIds;
-
-
-}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java b/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java
index ef6e04d..6b284ed 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java
+++ b/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;
 
 
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/hievEnum/OrderOperationEnum.java b/zq-erp/src/main/java/com/matrix/system/hive/hievEnum/OrderOperationEnum.java
new file mode 100644
index 0000000..dfaf7c1
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/hive/hievEnum/OrderOperationEnum.java
@@ -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;
+    }
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/hievEnum/PayMethodEnum.java b/zq-erp/src/main/java/com/matrix/system/hive/hievEnum/PayMethodEnum.java
deleted file mode 100644
index a98aae4..0000000
--- a/zq-erp/src/main/java/com/matrix/system/hive/hievEnum/PayMethodEnum.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.matrix.system.hive.hievEnum;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 支付方式
- * @author jyy
- */
-public enum PayMethodEnum {
-
-    CASH("现金", "现金"),
-    WECHAT("微信", "微信"),
-    ALIPAY("支付宝", "支付宝"),
-    BANK_CARD("银行卡", "银行卡"),
-    BANK_MT("美团", "美团"),
-    VIP_CARD("会员卡", "会员卡");
-
-    private String code;
-    private String name;
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    PayMethodEnum(String code, String name) {
-        this.code = code;
-        this.name = name;
-    }
-
-    public static String getNameByCode(Integer code) {
-        for (PayMethodEnum orderStatusEnum : PayMethodEnum.values()) {
-            if (orderStatusEnum.getCode().equals(code)) {
-                return orderStatusEnum.getName();
-            }
-        }
-        return "";
-    }
-
-    public static List<Map<String, Object>> getSelectValue() {
-        List<Map<String, Object>> resList = new ArrayList<>();
-        for (PayMethodEnum orderStatusEnum : PayMethodEnum.values()) {
-
-            Map<String, Object> orderStatus = new HashMap<>();
-            orderStatus.put("code", orderStatusEnum.getCode());
-            orderStatus.put("name", orderStatusEnum.getName());
-            resList.add(orderStatus);
-        }
-        return resList;
-    }
-
-}
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java
index 2bea8f2..e607196 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java
+++ b/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);
 
 
     /**
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java
index 5759276..4566825 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java
+++ b/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);
 
   
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
index 66890ed..cb1275f 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
+++ b/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:
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
index 0e0cf8b..193c1f5 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
+++ b/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("储值卡购买订单还存在欠款,在补交欠款后才能使用!");
         }
     }
 
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysInstoreInfoServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysInstoreInfoServiceImpl.java
index 6ca75ad..95d1257 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysInstoreInfoServiceImpl.java
+++ b/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() + ",不可审核!");
         }
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
index 2049a70..f2bde3f 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
+++ b/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);
+    }
+
+
+
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
index f6bb406..7489538 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
+++ b/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) {
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
index d5d7b6a..e9416e8 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
+++ b/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);
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java b/zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java
index bb8b3b0..7bfcbc7 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java
@@ -9,4 +9,16 @@
     interface moneyCardUseTk {
     }
 
+    /**
+     * 充值
+     */
+    interface moneyCardUseCz {
+    }
+
+    /**
+     * 订单修改金额
+     */
+    interface moneyCardUseOrderChange {
+    }
+
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java b/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java
index 6f3cf37..c3b90ed 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java
@@ -21,4 +21,10 @@
     interface projectTk {
     }
 
+    /**
+     * 套餐退款
+     */
+    interface taocanTk {
+    }
+
 }
diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/SysInstoreInfoDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/SysInstoreInfoDao.xml
index 1c2d8c7..51b0065 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysInstoreInfoDao.xml
+++ b/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},
diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
index 81ed5fc..93cdba5 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
+++ b/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>
\ No newline at end of file
diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/orderXq-form.html b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/orderXq-form.html
index 2e3cc8b..f496dba 100644
--- a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/orderXq-form.html
+++ b/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';

--
Gitblit v1.9.1