From 8243c06e629d79bba0388e6fb4f0e1ae70281ded Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 25 Mar 2022 12:30:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/feature/订单服务单代码改造' into feature/订单服务单代码改造
---
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html | 13
zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidate.java | 136 +
zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java | 353 +++
zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java | 91
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderOutSotoreTask.java | 9
zq-erp/src/main/java/com/matrix/system/enums/BooleanEnum.java | 63
zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java | 2
zq-erp/src/main/java/com/matrix/system/hive/action/OutStoreController.java | 2
zq-erp/src/main/java/com/matrix/system/common/validate/group/Group.java | 44
zq-erp/src/main/java/com/matrix/system/common/tools/ServiceUtil.java | 2
zq-erp/src/main/java/com/matrix/system/hive/service/imp/ShoppingGoodsServiceImpl.java | 20
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/orderXq-form.html | 6
zq-erp/src/main/java/com/matrix/system/common/validate/GroupValidateStatusCheckUtil.java | 30
zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java | 36
zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java | 29
zq-erp/src/main/java/com/matrix/system/common/validate/beans/ErrorMessage.java | 44
zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java | 30
zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java | 7
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java | 7
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java | 5
zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java | 18
zq-erp/src/main/java/com/matrix/core/tools/ParamCheckUtil.java | 3
zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java | 4
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOutStoreServiceImpl.java | 38
zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java | 2
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java | 317 +++
zq-erp/src/main/java/com/matrix/system/hive/hievEnum/OrderOperationEnum.java | 65
zq-erp/src/main/java/com/matrix/core/pojo/VerificationResult.java | 22
zq-erp/src/main/resources/mybatis/mapper/hive/ShoppingGoodsDao.xml | 2
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysInstoreInfoServiceImpl.java | 12
zq-erp/src/main/java/com/matrix/system/hive/dto/SysOrderItemDto.java | 7
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java | 1
zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java | 3
zq-erp/src/main/java/com/matrix/core/exception/GlobleExceptionResolver.java | 4
zq-erp/src/main/java/com/matrix/system/common/validate/HDValidateResult.java | 213 ++
zq-erp/src/main/java/com/matrix/system/constance/Dictionary.java | 4
zq-erp/src/main/java/com/matrix/system/hive/dao/ShoppingGoodsDao.java | 2
zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java | 97 +
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java | 844 +++++++++
zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java | 139 +
zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-zb-list.html | 10
zq-erp/src/main/java/com/matrix/system/hive/service/SysOutStoreService.java | 16
zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java | 16
zq-erp/src/main/java/com/matrix/system/hive/bean/ShoppingGoods.java | 2
zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidateFailNoFast.java | 134 +
zq-erp/src/main/java/com/matrix/system/app/action/ApiOrderAction.java | 33
zq-erp/src/main/java/com/matrix/system/hive/service/SysBeauticianStateService.java | 9
zq-erp/src/main/java/com/matrix/system/hive/dto/GoodsSealLimitDto.java | 2
zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml | 13
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 2296 +++++-------------------
zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml | 7
zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-md-list.html | 10
zq-erp/src/main/resources/mybatis/mapper/hive/SysInstoreInfoDao.xml | 2
/dev/null | 66
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderTask.java | 27
zq-erp/src/main/java/com/matrix/system/hive/action/ShoppingGoodsController.java | 8
zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpShoppingGoodsController.java | 6
zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java | 1
zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java | 24
59 files changed, 3,339 insertions(+), 2,069 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/core/pojo/VerificationResult.java b/zq-erp/src/main/java/com/matrix/core/pojo/VerificationResult.java
index d4bb932..6bce512 100644
--- a/zq-erp/src/main/java/com/matrix/core/pojo/VerificationResult.java
+++ b/zq-erp/src/main/java/com/matrix/core/pojo/VerificationResult.java
@@ -8,16 +8,38 @@
@Data
public class VerificationResult {
+ /**
+ * 审核结果
+ */
private boolean judgeResult;
private String msg;
private Object info;
+
private VerificationResult(){
}
+ public static VerificationResult success(){
+ return buildVerificationResult(true);
+ }
+
+ public static VerificationResult success(String msg){
+ return buildVerificationResult(true,msg);
+ }
+
+
+ public static VerificationResult fail(){
+ return buildVerificationResult(false);
+ }
+
+ public static VerificationResult fail(String msg){
+ return buildVerificationResult(false,msg);
+ }
+
+
public static VerificationResult buildVerificationResult(boolean judgeResult){
VerificationResult obj=new VerificationResult();
obj.judgeResult =judgeResult;
diff --git a/zq-erp/src/main/java/com/matrix/core/tools/ParamCheckUtil.java b/zq-erp/src/main/java/com/matrix/core/tools/ParamCheckUtil.java
index 49768e8..0d55dba 100644
--- a/zq-erp/src/main/java/com/matrix/core/tools/ParamCheckUtil.java
+++ b/zq-erp/src/main/java/com/matrix/core/tools/ParamCheckUtil.java
@@ -1,8 +1,5 @@
package com.matrix.core.tools;
-import com.matrix.system.hive.dto.OrderItemDto;
-
-import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
diff --git a/zq-erp/src/main/java/com/matrix/system/app/action/ApiOrderAction.java b/zq-erp/src/main/java/com/matrix/system/app/action/ApiOrderAction.java
index 10237fb..d8dc496 100644
--- a/zq-erp/src/main/java/com/matrix/system/app/action/ApiOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/app/action/ApiOrderAction.java
@@ -17,10 +17,10 @@
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.ShoppingGoodsCategory;
import com.matrix.system.hive.bean.SysOrder;
+import com.matrix.system.hive.bean.SysOrderItem;
import com.matrix.system.hive.bean.SysShopInfo;
import com.matrix.system.hive.dao.SysShopInfoDao;
import com.matrix.system.hive.plugin.util.CollectionUtils;
-import com.matrix.system.hive.pojo.ShoppingCarItem;
import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
import com.matrix.system.hive.service.ShoppingGoodsCategoryService;
import com.matrix.system.hive.service.ShoppingGoodsService;
@@ -109,31 +109,26 @@
@ApiOperation(value = "创建订单", notes = "创建订单")
@PostMapping(value = "/createOrder")
public AjaxResult createOrder(@RequestBody @Validated CreateOrderDto createOrderDto) {
- SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
-
+ SysOrder order=new SysOrder();
+ order.setVipId(createOrderDto.getVipId());
ShoppingCarItemsVo car = new ShoppingCarItemsVo();
car.setVipId(createOrderDto.getVipId());
if (CollectionUtils.isNotEmpty(createOrderDto.getItems())) {
- List<ShoppingCarItem> list = new ArrayList<>();
+ List<SysOrderItem> list = new ArrayList<>();
for (CreateOderItemDto item : createOrderDto.getItems()) {
- ShoppingCarItem carItem = new ShoppingCarItem();
- carItem.setCount(item.getCount());
- carItem.setGoodsId(item.getGoodsId());
- carItem.setIsFree(item.getIsFree());
- carItem.setType(item.getGoodsType());
-
- carItem.setShoppingGoods(shoppingGoodsService.findById(item.getGoodsId()));
- list.add(carItem);
+ SysOrderItem orderItem = new SysOrderItem();
+ orderItem.setCount(item.getCount());
+ orderItem.setGoodsId(item.getGoodsId());
+ orderItem.setIsFree(item.getIsFree());
+ //jyytodo 这个字段可以不传
+ orderItem.setType(item.getGoodsType());
+ list.add(orderItem);
}
- car.setCarItems(list);
+ order.setItems(list);
}
- int i = sysOrderService.createOrder(WebUtil.getSession(), car);
- if (i > 0) {
- return AjaxResult.buildSuccessInstance("下单成功");
- }
-
- return AjaxResult.buildFailInstance("下单失败");
+ sysOrderService.checkAndSaveOrder(order);
+ return AjaxResult.buildSuccessInstance("下单成功");
}
@ApiOperation(value = "获取订单列表", notes = "获取订单列表")
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/common/validate/HDValidateResult.java b/zq-erp/src/main/java/com/matrix/system/common/validate/HDValidateResult.java
new file mode 100644
index 0000000..503fb7a
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/validate/HDValidateResult.java
@@ -0,0 +1,213 @@
+/**
+ * projectName: h3-organization
+ * fileName: HDValidateResult.java
+ * packageName: com.hydee.common.validate
+ * date: 2019-06-17 14:46
+ * copyright(c) 2019 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix.system.common.validate;
+
+import org.springframework.beans.PropertyEditorRegistry;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.Errors;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
+
+import java.beans.PropertyEditor;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @version: V1.0
+ * @author: LiHengye
+ * @className: HDValidateResult
+ * @packageName: com.hydee.common.validate
+ * @description: 校验结果
+ * @data: 2019-06-17 14:46
+ **/
+public class HDValidateResult implements BindingResult {
+ @Override
+ public Object getTarget() {
+ return null;
+ }
+
+ @Override
+ public Map<String, Object> getModel() {
+ return null;
+ }
+
+ @Override
+ public Object getRawFieldValue(String s) {
+ return null;
+ }
+
+ @Override
+ public PropertyEditor findEditor(String s, Class<?> aClass) {
+ return null;
+ }
+
+ @Override
+ public PropertyEditorRegistry getPropertyEditorRegistry() {
+ return null;
+ }
+
+ @Override
+ public String[] resolveMessageCodes(String s) {
+ return new String[0];
+ }
+
+ @Override
+ public String[] resolveMessageCodes(String s, String s1) {
+ return new String[0];
+ }
+
+ @Override
+ public void addError(ObjectError objectError) {
+
+ }
+
+ @Override
+ public String getObjectName() {
+ return null;
+ }
+
+ @Override
+ public void setNestedPath(String s) {
+
+ }
+
+ @Override
+ public String getNestedPath() {
+ return null;
+ }
+
+ @Override
+ public void pushNestedPath(String s) {
+
+ }
+
+ @Override
+ public void popNestedPath() throws IllegalStateException {
+
+ }
+
+ @Override
+ public void reject(String s) {
+
+ }
+
+ @Override
+ public void reject(String s, String s1) {
+
+ }
+
+ @Override
+ public void reject(String s, Object[] objects, String s1) {
+
+ }
+
+ @Override
+ public void rejectValue(String s, String s1) {
+
+ }
+
+ @Override
+ public void rejectValue(String s, String s1, String s2) {
+
+ }
+
+ @Override
+ public void rejectValue(String s, String s1, Object[] objects, String s2) {
+
+ }
+
+ @Override
+ public void addAllErrors(Errors errors) {
+
+ }
+
+ @Override
+ public boolean hasErrors() {
+ return false;
+ }
+
+ @Override
+ public int getErrorCount() {
+ return 0;
+ }
+
+ @Override
+ public List<ObjectError> getAllErrors() {
+ return null;
+ }
+
+ @Override
+ public boolean hasGlobalErrors() {
+ return false;
+ }
+
+ @Override
+ public int getGlobalErrorCount() {
+ return 0;
+ }
+
+ @Override
+ public List<ObjectError> getGlobalErrors() {
+ return null;
+ }
+
+ @Override
+ public ObjectError getGlobalError() {
+ return null;
+ }
+
+ @Override
+ public boolean hasFieldErrors() {
+ return false;
+ }
+
+ @Override
+ public int getFieldErrorCount() {
+ return 0;
+ }
+
+ @Override
+ public List<FieldError> getFieldErrors() {
+ return null;
+ }
+
+ @Override
+ public FieldError getFieldError() {
+ return null;
+ }
+
+ @Override
+ public boolean hasFieldErrors(String s) {
+ return false;
+ }
+
+ @Override
+ public int getFieldErrorCount(String s) {
+ return 0;
+ }
+
+ @Override
+ public List<FieldError> getFieldErrors(String s) {
+ return null;
+ }
+
+ @Override
+ public FieldError getFieldError(String s) {
+ return null;
+ }
+
+ @Override
+ public Object getFieldValue(String s) {
+ return null;
+ }
+
+ @Override
+ public Class<?> getFieldType(String s) {
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidate.java b/zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidate.java
new file mode 100644
index 0000000..cbeb8cd
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidate.java
@@ -0,0 +1,136 @@
+/**
+ * projectName: h3-organization
+ * fileName: ParameterValidate.java
+ * packageName: com.hydee.common.validate
+ * date: 2019-06-17 10:48
+ * copyright(c) 2019 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix.system.common.validate;
+
+import com.matrix.system.common.validate.beans.ErrorMessage;
+import com.matrix.system.common.validate.group.Group;
+import org.hibernate.validator.HibernateValidator;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @version: V1.0
+ * @author: LiHengye
+ * @className: ParameterValidate
+ * @packageName: com.hydee.common.validate
+ * @description: 参数验证
+ * @data: 2019-06-17 10:48
+ **/
+public class ParameterValidate {
+
+
+ /**
+ * 开启快速结束模式 failFast (true)
+ */
+ private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
+ /**
+ * 校验对象
+ * @param t bean
+ * @param groups 校验组
+ * @return ValidResult
+ */
+ public static <T> ValidResult validateBean(T t,Class<?>...groups) {
+ ValidResult result = new ValidResult();
+ Set<ConstraintViolation<T>> violationSet = validator.validate(t,groups);
+ boolean hasError = violationSet != null && violationSet.size() > 0;
+ result.setHasErrors(hasError);
+ if (hasError) {
+ for (ConstraintViolation<T> violation : violationSet) {
+ result.addError(violation.getPropertyPath().toString(), violation.getMessageTemplate());
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 校验bean的某一个属性
+ * @param obj bean
+ * @param propertyName 属性名称
+ * @return ValidResult
+ */
+ public static <T> ValidResult validateProperty(T obj, String propertyName) {
+ ValidResult result = new ValidResult();
+ Set<ConstraintViolation<T>> violationSet = validator.validateProperty(obj, propertyName, Group.ADD.class);
+ boolean hasError = violationSet != null && violationSet.size() > 0;
+ result.setHasErrors(hasError);
+ if (hasError) {
+ for (ConstraintViolation<T> violation : violationSet) {
+ result.addError(propertyName, violation.getMessage());
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 校验结果类
+ */
+ public static class ValidResult {
+
+ /**
+ * 是否有错误
+ */
+ private boolean hasErrors;
+
+ /**
+ * 错误信息
+ */
+ private List<ErrorMessage> errors;
+
+ public ValidResult() {
+ this.errors = new ArrayList<>();
+ }
+ public boolean hasErrors() {
+ return hasErrors;
+ }
+
+ public void setHasErrors(boolean hasErrors) {
+ this.hasErrors = hasErrors;
+ }
+
+ /**
+ * 获取所有验证信息
+ * @return 集合形式
+ */
+ public List<ErrorMessage> getAllErrors() {
+ return errors;
+ }
+ /**
+ * 获取所有验证信息
+ * @return 字符串形式
+ */
+ public String getErrors(){
+ StringBuilder sb = new StringBuilder();
+ for (ErrorMessage error : errors) {
+ sb.append(error.getPropertyPath()).append(":不能为空");
+// sb.append(error.getPropertyPath()).append(":").append(error.getMessage()).append(" ");
+ }
+ return sb.toString();
+ }
+
+ public String getAllErrorMessage(){
+ StringBuilder sb = new StringBuilder();
+ for (ErrorMessage error : errors) {
+ if(error.getMessage() == null || error.getMessage().isEmpty()){
+ sb.append(error.getPropertyPath()).append(":不合法!");
+ }else{
+ sb.append(error.getPropertyPath()).append(":").append(error.getMessage()).append(" ");
+ }
+ }
+ return sb.toString();
+ }
+
+ public void addError(String propertyPath, String message) {
+ this.errors.add(new ErrorMessage(propertyPath, message));
+ }
+ }
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidateFailNoFast.java b/zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidateFailNoFast.java
new file mode 100644
index 0000000..d98fd61
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidateFailNoFast.java
@@ -0,0 +1,134 @@
+/**
+ * projectName: common
+ * fileName: ParameterValidateFailNoFast.java
+ * packageName: com.hydee.common.validate
+ * date: 2021-04-22 9:25 上午
+ * copyright(c) 2021 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix.system.common.validate;
+
+import com.matrix.system.common.validate.beans.ErrorMessage;
+import com.matrix.system.common.validate.group.Group;
+import org.hibernate.validator.HibernateValidator;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @version: V1.0
+ * @author: LiHengye
+ * @className: ParameterValidateFailNoFast
+ * @packageName: com.hydee.common.validate
+ * @description: 参数校验遇到错误非立刻返回
+ * @data: 2021-04-22 9:25 上午
+ **/
+public class ParameterValidateFailNoFast {
+
+ /**
+ * 开启快速结束模式 failFast (true)
+ */
+ private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator();
+ /**
+ * 校验对象
+ * @param t bean
+ * @param groups 校验组
+ * @return ValidResult
+ */
+ public static <T> ValidResult validateBean(T t, Class<?>...groups) {
+ ValidResult result = new ValidResult();
+ Set<ConstraintViolation<T>> violationSet = validator.validate(t,groups);
+ boolean hasError = violationSet != null && violationSet.size() > 0;
+ result.setHasErrors(hasError);
+ if (hasError) {
+ for (ConstraintViolation<T> violation : violationSet) {
+ result.addError(violation.getPropertyPath().toString(), violation.getMessageTemplate());
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 校验bean的某一个属性
+ * @param obj bean
+ * @param propertyName 属性名称
+ * @return ValidResult
+ */
+ public static <T> ValidResult validateProperty(T obj, String propertyName) {
+ ValidResult result = new ValidResult();
+ Set<ConstraintViolation<T>> violationSet = validator.validateProperty(obj, propertyName, Group.ADD.class);
+ boolean hasError = violationSet != null && violationSet.size() > 0;
+ result.setHasErrors(hasError);
+ if (hasError) {
+ for (ConstraintViolation<T> violation : violationSet) {
+ result.addError(propertyName, violation.getMessage());
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 校验结果类
+ */
+ public static class ValidResult {
+
+ /**
+ * 是否有错误
+ */
+ private boolean hasErrors;
+
+ /**
+ * 错误信息
+ */
+ private List<ErrorMessage> errors;
+
+ public ValidResult() {
+ this.errors = new ArrayList<>();
+ }
+ public boolean hasErrors() {
+ return hasErrors;
+ }
+
+ public void setHasErrors(boolean hasErrors) {
+ this.hasErrors = hasErrors;
+ }
+
+ /**
+ * 获取所有验证信息
+ * @return 集合形式
+ */
+ public List<ErrorMessage> getAllErrors() {
+ return errors;
+ }
+ /**
+ * 获取所有验证信息
+ * @return 字符串形式
+ */
+ public String getErrors(){
+ StringBuilder sb = new StringBuilder();
+ for (ErrorMessage error : errors) {
+ sb.append(error.getPropertyPath()).append(":").append(error.getMessage()).append(" /");
+ }
+ return sb.toString();
+ }
+
+ public String getAllErrorMessage(){
+ StringBuilder sb = new StringBuilder();
+ for (ErrorMessage error : errors) {
+ if(error.getMessage() == null || error.getMessage().isEmpty()){
+ sb.append(error.getPropertyPath()).append(":不合法!");
+ }else{
+ sb.append(error.getPropertyPath()).append(":").append(error.getMessage()).append(" ");
+ }
+ }
+ return sb.toString();
+ }
+
+ public void addError(String propertyPath, String message) {
+ this.errors.add(new ErrorMessage(propertyPath, message));
+ }
+ }
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/common/validate/beans/ErrorMessage.java b/zq-erp/src/main/java/com/matrix/system/common/validate/beans/ErrorMessage.java
new file mode 100644
index 0000000..63003e2
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/validate/beans/ErrorMessage.java
@@ -0,0 +1,44 @@
+/**
+ * projectName: h3-organization
+ * fileName: ErrorMessage.java
+ * packageName: com.hydee.common.validate.beans
+ * date: 2019-06-17 10:42
+ * copyright(c) 2019 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix.system.common.validate.beans;
+
+/**
+ * @version: V1.0
+ * @author: LiHengye
+ * @className: ErrorMessage
+ * @packageName: com.hydee.common.validate.beans
+ * @description: 错误信息
+ * @data: 2019-06-17 10:42
+ **/
+public class ErrorMessage {
+
+ private String propertyPath;
+
+ private String message;
+
+ public ErrorMessage(String propertyPath, String message) {
+ this.propertyPath = propertyPath;
+ this.message = message;
+ }
+
+ public String getPropertyPath() {
+ return propertyPath;
+ }
+
+ public void setPropertyPath(String propertyPath) {
+ this.propertyPath = propertyPath;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/common/validate/group/Group.java b/zq-erp/src/main/java/com/matrix/system/common/validate/group/Group.java
new file mode 100644
index 0000000..e3e3daf
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/validate/group/Group.java
@@ -0,0 +1,44 @@
+/**
+ * projectName: h3-organization
+ * fileName: Group.java
+ * packageName: group
+ * date: 2019-06-17 10:43
+ * copyright(c) 2019 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix.system.common.validate.group;
+
+/**
+ * @version: V1.0
+ * @author: LiHengye
+ * @className: Group
+ * @packageName: group
+ * @description: 验证信息组
+ * @data: 2019-06-17 10:43
+ **/
+public interface Group {
+
+ /**
+ * 默认分组
+ */
+ static interface Default{}
+
+ /**
+ * 新增分组
+ */
+ static interface ADD{}
+
+ /**
+ * 修改分组
+ */
+ static interface MODIFY{}
+
+ /**
+ * 删除分组
+ */
+ static interface DELETE{}
+
+ /**
+ * 查询分组
+ */
+ static interface SELECT{}
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/constance/Dictionary.java b/zq-erp/src/main/java/com/matrix/system/constance/Dictionary.java
index 37951a2..41d5d7c 100644
--- a/zq-erp/src/main/java/com/matrix/system/constance/Dictionary.java
+++ b/zq-erp/src/main/java/com/matrix/system/constance/Dictionary.java
@@ -403,10 +403,6 @@
* 商城商品-充值卡
*/
String SHOPPING_GOODS_TYPE_CZK = "充值卡";
- /**
- * 商城商品-综合卡
- */
- String SHOPPING_GOODS_TYPE_ZHK = "综合卡";
diff --git a/zq-erp/src/main/java/com/matrix/system/enums/BooleanEnum.java b/zq-erp/src/main/java/com/matrix/system/enums/BooleanEnum.java
new file mode 100644
index 0000000..4adb5d3
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/enums/BooleanEnum.java
@@ -0,0 +1,63 @@
+package com.matrix.system.enums;
+
+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 BooleanEnum implements EnumApiShowAble {
+
+ TRUE(1, "是"),
+ FALSE(2, "否"),
+ DEFAULT(3, ""),
+ ;
+
+ private Integer value;
+
+ private String displayName;
+
+ BooleanEnum(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/action/MoneyCardUseController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java
index 09274b6..d82f7e1 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java
@@ -2,7 +2,6 @@
import com.matrix.component.asyncmessage.AsyncMessageManager;
import com.matrix.core.constance.MatrixConstance;
-import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.WebUtil;
@@ -87,7 +86,7 @@
@RequestMapping(value = "/cz")
public @ResponseBody
AjaxResult cz(@RequestBody CzXkVo czVo) {
- SysOrder order= orderService.updateAddCardMoney(czVo);
+ SysOrder order= orderService.moneyCardCz(czVo);
AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, "充值成功");
//发送微信公众号提醒
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 c31ba85..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;
@@ -149,7 +150,7 @@
sysOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_N);
//校验订单是否满足结算调价,新订单则保存订单,已有订单则删除后更新
sysOrder = orderService.checkAndSaveOrder(sysOrder);
- orderService.updateReceiptMoney(sysOrder);
+ orderService.payOrder(sysOrder);
//发送微信公众号提醒
UniformMsgParam uniformMsgParam = new UniformMsgParam(user.getCompanyId(), UniformMsgParam.GZH_GMCG);
@@ -180,7 +181,7 @@
}
}
}
- orderService.refundOrderMoney(sysOrder);
+ orderService.orderTk(sysOrder);
//处理用户购买的产品
return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单退款成功");
}
@@ -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));
}
@@ -259,7 +261,7 @@
@RequestMapping(value = "/sk")
public @ResponseBody
AjaxResult sk(SysOrder order) throws GlobleException {
- orderService.updateReceiptMoney(order);
+ orderService.payOrder(order);
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "收款成功");
}
@@ -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/action/OutStoreController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/OutStoreController.java
index 5a642fe..2b0dea4 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/action/OutStoreController.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/action/OutStoreController.java
@@ -133,7 +133,7 @@
int i=0;
if (sysOutStore.getId() != null) {
- i=currentService.checkInfo(sysOutStore);
+ i=currentService.effectOutStore(sysOutStore);
}
if(i>0){
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "审核成功!");
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/action/ShoppingGoodsController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/ShoppingGoodsController.java
index 106ecd6..b8a33b6 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/action/ShoppingGoodsController.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/action/ShoppingGoodsController.java
@@ -129,7 +129,6 @@
shoppingGoods.setAssembleProj(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(shoppingGoods.getId(), ShoppingGoods.SHOPPING_GOODS_TYPE_XM));
} else if (
Dictionary.SHOPPING_GOODS_TYPE_XM.equals(shoppingGoods.getGoodType())
- || Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(shoppingGoods.getGoodType())
) {
shoppingGoods.setAssembleGoods(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(shoppingGoods.getId(), null));
} else if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(shoppingGoods.getGoodType())) {
@@ -190,7 +189,6 @@
}
}
shoppingGoods.setIsDel(ShoppingGoods.NORMAL);
- shoppingGoods.setStaus(Dictionary.BUSINESS_STATE_UP);
List<ShoppingGoods> dataList = shoppingGoodsService.findInPage(shoppingGoods, pageVo);
AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, dataList, shoppingGoodsService.findTotal(shoppingGoods));
return result;
@@ -316,9 +314,6 @@
shoppingGoods.setAssembleGoods(assembleListGoods);
List<ShoppingGoodsAssemble> assembleListProj = shoppingGoodsAssembleDao.selectProjByShoppingGoodsId(shoppingGoods.getId());
shoppingGoods.setAssembleProj(assembleListProj);
- } else if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(shoppingGoods.getGoodType())) {
- List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectAssembleShoppingGoodsByShoppingGoodsId(shoppingGoods.getId());
- shoppingGoods.setZongheCarGoods(assembleList);
}
@@ -347,9 +342,6 @@
// 返回充值卡编辑界面
WebUtil.getRequest().setAttribute("obj", shoppingGoods);
return "admin/hive/products/money-card-form";
- } else if (shoppingGoods.getGoodType().equals(Dictionary.SHOPPING_GOODS_TYPE_ZHK)) {
- WebUtil.getRequest().setAttribute("obj", shoppingGoods);
- return "admin/hive/products/zonghe-card-form";
}
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java
index 0787c91..606777c 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java
@@ -88,6 +88,7 @@
/**
+ * // jyytodo 可以考虑一个已启用未启用的状态,开卡后如果没有使用过就视为未启用
* 状态,有效,无效,转让,冻结,退款
*/
private String status;
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 8e4359e..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
@@ -10,10 +10,15 @@
*/
public class MoneyCardUseFlow implements Serializable{
+ //jyytodo 改成枚举
public static final String USE_TYPE_CONSUMER = "消费扣款";
public static final String USE_TYPE_ORDRE_CANCEL = "取消订单";
+ 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/bean/ShoppingGoods.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/ShoppingGoods.java
index 7eae13c..f379302 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/bean/ShoppingGoods.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/ShoppingGoods.java
@@ -243,7 +243,7 @@
private Integer carMaxSaleCount;
/**
- * 是一卡通吗
+ * 充值卡使用范围 是否所有产品
*/
private String carIsAll;
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java
index 62d0769..b61dbf9 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java
@@ -26,6 +26,8 @@
*/
public static final int ORDER_TYPE_REFUND= 2;
+
+
/**
* 序号
*/
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dao/ShoppingGoodsDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/ShoppingGoodsDao.java
index cc06823..4116c43 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dao/ShoppingGoodsDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dao/ShoppingGoodsDao.java
@@ -90,7 +90,7 @@
int selectShopppingGoodsAipTotal(@Param("record") ShoppingGoodsListDto shoppingGoodsListDto);
- public List<ShoppingGoods> selectByIds(@Param("ids")List<Integer> ids);
+ public List<ShoppingGoods> selectByIds(@Param("ids")List<Long> ids);
int updateInvalidProduct();
}
\ No newline at end of file
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/dao/SysProjUseDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java
index cd19d3d..21df84b 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java
@@ -136,4 +136,8 @@
List<SysProjUse> selectTaoCanListWithProj(@Param("record") SysProjUse sysProjUse);
int selectTaocanCountForCourseAndInfinite(@Param("taocanId") Long taocanId, @Param("vipId") Long vipId);
+
+ int selectUseCountByOrderItemId(Long orderItemId);
+
+ List<SysProjUse> selectByOrderItemId(Long orderItemId);
}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dto/GoodsSealLimitDto.java b/zq-erp/src/main/java/com/matrix/system/hive/dto/GoodsSealLimitDto.java
index 1926c1d..c066038 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dto/GoodsSealLimitDto.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dto/GoodsSealLimitDto.java
@@ -20,6 +20,6 @@
/**
* 销售明细
*/
- private List<OrderItemDto> orderItemDtoList;
+ private List<SysOrderItemDto> sysOrderItemDtoList;
}
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
new file mode 100644
index 0000000..9e5f5e0
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java
@@ -0,0 +1,139 @@
+/**
+ * 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 com.matrix.system.common.validate.group.Group;
+import com.matrix.system.hive.validation.MoneyCardUseGroup;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+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 MoneyCardOperationDto {
+
+ /**
+ * 储值卡id
+ */
+ @NotNull(groups = {MoneyCardUseGroup.moneyCardUseOrderChange.class,
+ MoneyCardUseGroup.moneyCardUseCz.class,})
+ private Long carUseId;
+ /**
+ * 会员id
+ */
+ @NotNull(groups = {
+ Group.ADD.class
+ })
+ private Long vipId;
+
+ /**
+ * 来源,购买,转让,赠送
+ */
+ @NotNull(groups = {
+ Group.ADD.class})
+ private String source;
+
+ /**
+ * 订单明细id
+ */
+ @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
+ Group.ADD.class
+ })
+ private Long orderItemId;
+
+
+ /**
+ * 操作类型
+ */
+ @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
+ MoneyCardUseGroup.moneyCardUseOrderChange.class,
+ MoneyCardUseGroup.moneyCardUseCz.class,
+ Group.ADD.class
+
+ })
+ private String type;
+ /**
+ * 操作人
+ */
+ @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
+ MoneyCardUseGroup.moneyCardUseOrderChange.class,
+ MoneyCardUseGroup.moneyCardUseCz.class,
+ Group.ADD.class
+ })
+ private Long updateUser;
+ /**
+ * 订单id
+ */
+ @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
+ MoneyCardUseGroup.moneyCardUseOrderChange.class,
+ MoneyCardUseGroup.moneyCardUseCz.class,
+ Group.ADD.class
+ })
+ private Long orderId;
+ /**
+ * 订单编号
+ */
+ @NotNull(groups = {MoneyCardUseGroup.moneyCardUseTk.class,
+ MoneyCardUseGroup.moneyCardUseOrderChange.class,
+ MoneyCardUseGroup.moneyCardUseCz.class,
+ Group.ADD.class
+ })
+ private String orderNo;
+
+ /**
+ * 充值卡的商品
+ */
+ @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/ProjUseOperationDto.java b/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java
new file mode 100644
index 0000000..6b284ed
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java
@@ -0,0 +1,97 @@
+package com.matrix.system.hive.dto;
+
+import com.matrix.system.hive.hievEnum.OrderOperationEnum;
+import com.matrix.system.hive.validation.ProjUseGroup;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 项目操作对象
+ */
+@Data
+public class ProjUseOperationDto {
+
+ /**
+ * 客户id
+ */
+ @NotNull(groups = {ProjUseGroup.addProject.class,
+ ProjUseGroup.addTc.class})
+ private Long vipId;
+
+ /**
+ * 产品id
+ */
+ @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,
+ ProjUseGroup.taocanTk.class})
+ private Integer count;
+
+ /**
+ * 购买支付金额
+ */
+ @NotNull(groups = {ProjUseGroup.addProject.class,
+ ProjUseGroup.addTc.class})
+ private Double payMoney;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 订单明细id
+ */
+ @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})
+ private boolean isFree;
+
+
+ /**
+ * 操作类型
+ */
+ private OrderOperationEnum orderOperationType;
+
+
+ /**
+ * 套餐折扣
+ * 设置折扣后,套餐下绑定的项目消耗金额会对应打折
+ * -- 套餐类型必传
+ */
+ @NotNull(groups = {ProjUseGroup.addTc.class})
+ private Double tcZk;
+
+ /**
+ * 所属套餐id
+ * -- 添加套餐下的项目必传
+ */
+ 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/dto/OrderItemDto.java b/zq-erp/src/main/java/com/matrix/system/hive/dto/SysOrderItemDto.java
similarity index 81%
rename from zq-erp/src/main/java/com/matrix/system/hive/dto/OrderItemDto.java
rename to zq-erp/src/main/java/com/matrix/system/hive/dto/SysOrderItemDto.java
index bc927fa..2f57177 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dto/OrderItemDto.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dto/SysOrderItemDto.java
@@ -1,16 +1,15 @@
package com.matrix.system.hive.dto;
-import lombok.Builder;
import lombok.Data;
import lombok.ToString;
/**
* 订单明细DTO
+ * @author jyy
*/
-@Data
@ToString
-@Builder
-public class OrderItemDto {
+@Data
+public class SysOrderItemDto {
/**
* 商城 商品id
*/
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/AchieveNewService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java
index 0698dac..2de24d1 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java
@@ -121,4 +121,5 @@
List<DailyBeautyListVo> findDailyBeautyList(AchieveNew achieveNew, PaginationVO pageVo);
int findDailyBeautyListTotal(AchieveNew achieveNew);
+ void removeByOrderId(Long id);
}
\ No newline at end of file
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 c677c7b..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
@@ -1,20 +1,35 @@
package com.matrix.system.hive.service;
-import java.util.List;
-
-
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.plugin.util.BaseServices;
+
+import java.util.List;
/**
* @date 2016-09-17 10:17
*/
public interface MoneyCardUseService extends BaseServices<MoneyCardUse> {
+
/**
- * 新增MoneyCardUse
+ * 扣除储值卡余额
*/
+ void changeMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos);
+
+
+ /**
+ * 新增用户储值卡
+ * @param moneyCardOperationDtos
+ */
+ public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) ;
+
+
+
+ /**
+ * 新增MoneyCardUse
+ */
public int add(MoneyCardUse moneyCardUse);
/**
@@ -113,4 +128,17 @@
public List<MoneyCardUse> findVipCardUse(MoneyCardUse moneyCardUse);
+ /**
+ * 根据订单id删除充值卡
+ * 只有没有被使用过的储值卡可以删除
+ * @param id
+ */
+ void deleteByOrderItemId(Long id);
+
+
+ /**
+ * 储值卡退款
+ * @param id
+ */
+ void moneyCardTk(List<MoneyCardOperationDto> moneyCardOperationDtos);
}
\ No newline at end of file
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 5904b62..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
@@ -1,12 +1,11 @@
package com.matrix.system.hive.service;
-import java.util.Date;
-import java.util.List;
-
-
import com.matrix.core.pojo.PaginationVO;
import com.matrix.system.hive.bean.SysBeauticianState;
import com.matrix.system.hive.plugin.util.BaseServices;
+
+import java.util.Date;
+import java.util.List;
/**
*
@@ -75,7 +74,7 @@
public List<SysBeauticianState> findByTimeAndStaff(Long id, Date beginTime, Date endTime);
- public List<SysBeauticianState> findBySerId(Long serviceId);
+ 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/SysOrderService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java
index 5f21562..3b8db13 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java
@@ -8,10 +8,7 @@
import com.matrix.system.hive.bean.SysOrder;
import com.matrix.system.hive.plugin.util.BaseServices;
import com.matrix.system.hive.pojo.CzXkVo;
-import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
-import org.springframework.transaction.annotation.Transactional;
-import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.util.List;
@@ -83,19 +80,9 @@
* @date 2016年7月18日 上午11:14:07
* @throws
*/
- public void updateReceiptMoney(SysOrder sysOrder) throws GlobleException;
+ public void payOrder(SysOrder sysOrder) throws GlobleException;
- public void refundOrderMoney(SysOrder sysOrder);
-
- /**
- * 创建订单
- * @param session
- * @param car
- * @return
- */
- @Transactional(rollbackFor = Exception.class)
- public int createOrder(HttpSession session, ShoppingCarItemsVo car);
-
+ public void orderTk(SysOrder sysOrder);
/**
* 补交
@@ -113,17 +100,7 @@
* @date 2016年9月20日 下午12:07:21
* @throws
*/
- public SysOrder updateAddCardMoney(CzXkVo czVo);
-
-
- public void addMoneyCardUse(SysOrder sourceOrder);
-
- public void addOutStore(SysOrder sourceOrder);
-
- public void addTaocanProj(SysOrder sourceOrder);
-
- public void setShopSelCount(SysOrder sourceOrder);
-
+ public SysOrder moneyCardCz(CzXkVo czVo);
/**
* 校验订单是否满足结算条件
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysOutStoreService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysOutStoreService.java
index dd538f2..cd13e5f 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysOutStoreService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysOutStoreService.java
@@ -14,6 +14,7 @@
/**
* 新增SysOutStore
+ * 立即出库
*
*/
public int add(SysOutStore sysOutStore);
@@ -60,7 +61,20 @@
*/
public SysOutStore findById(Long id);
- public int checkInfo(SysOutStore sysOutStore);
+
+ /**
+ * 删除出库单,恢复库存
+ * @param id
+ */
+ public void cancelOutStore(Long id);
+
+
+ /**
+ * 出库单审核通过,并扣减库存
+ * @param sysOutStore
+ * @return
+ */
+ public int effectOutStore(SysOutStore sysOutStore);
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java
index ed21be0..c90e46d 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java
@@ -2,8 +2,8 @@
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.PaginationVO;
-import com.matrix.system.hive.bean.MoneyCardUse;
import com.matrix.system.hive.bean.SysProjUse;
+import com.matrix.system.hive.dto.ProjUseOperationDto;
import com.matrix.system.hive.plugin.util.BaseServices;
import java.util.List;
@@ -135,7 +135,16 @@
*/
public AjaxResult activeProj(SysProjUse proj);
+ /**
+ * 添加用户套餐和项目
+ *
+ * @param projUseDtoList
+ * @return
+ */
+ public void addUserProjUse(List<ProjUseOperationDto> projUseDtoList) ;
+
+ public void projectTk(List<ProjUseOperationDto> projUseDtoList);
public int updateProjUseTck(SysProjUse projUse);
@@ -145,4 +154,11 @@
public List<SysProjUse> findTaocaoProjUseWithProj(SysProjUse sysProjUse);
int findTaocanCountForCourseAndInfinite(Long taocanId, Long vipId);
+
+ /**
+ * 取消订单删除项目
+ * 只有没有使用过的才能被删除
+ * @param id
+ */
+ void deleteByOrderItemId(Long id);
}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java
index cd93e2d..a31f4d0 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java
@@ -22,6 +22,13 @@
*/
public interface SysVipInfoService extends BaseServices<SysVipInfo>{
+ /**
+ * 更新用户成交状态
+ * @param vipId
+ * @param isDeal
+ */
+ void updateDealStatus(Long vipId, int isDeal);
+
public MoneyCardUse addVipDefaultCard(Long vipId);
/**
* 新增SysVipInfo
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 f32259e..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:
@@ -489,4 +489,9 @@
public int findDailyBeautyListTotal(AchieveNew achieveNew) {
return achieveNewDao.selectDailyBeautyListTotal(achieveNew);
}
+
+ @Override
+ public void removeByOrderId(Long orderId) {
+ achieveNewDao.deleteByOrderId(orderId);
+ }
}
\ No newline at end of file
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 5eb09f1..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
@@ -1,29 +1,40 @@
package com.matrix.system.hive.service.imp;
+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.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.MoneyCardUse;
-import com.matrix.system.hive.bean.MoneyCardUseFreeze;
-import com.matrix.system.hive.bean.SysOrderItem;
-import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
+import com.matrix.system.hive.dto.MoneyCardOperationDto;
+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;
import java.util.Date;
import java.util.List;
+import java.util.Objects;
/**
* @date 2016-09-17 10:17
*/
@Service("moneyCardUseService")
-public class MoneyCardUseServiceImpl extends ServiceImpl<MoneyCardUseDao,MoneyCardUse> implements MoneyCardUseService {
+public class MoneyCardUseServiceImpl extends ServiceImpl<MoneyCardUseDao, MoneyCardUse> implements MoneyCardUseService {
@Autowired
@@ -39,11 +50,333 @@
private SysOrderItemDao orderItemDao;
@Autowired
+ SysOrderService sysOrderService;
+
+ @Autowired
private SysVipLevelDao viplevelDao;
+ @Autowired
+ ShoppingGoodsDao shoppingGoodsDao;
+
+ @Autowired
+ MoneyCardAssembleDao moneyCardAssembleDao;
+ @Autowired
+ MoneyCardUseFlowDao moneyCardUseFlowDao;
+
+ @Autowired
+ SysUsersDao sysUsersDao;
+
+ @Autowired
+ private ShoppingGoodsService shoppingGoodsService;
+
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) {
+ moneyCardOperationDtos.forEach(dto -> {
+
+ //参数校验
+ GroupValidateStatusCheckUtil.check(dto,Group.ADD.class);
+
+ ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(dto.getGoodsId());
+ MoneyCardUse moneyCardUse = new MoneyCardUse();
+ BeanUtil.copyProperties(dto, moneyCardUse);
+ 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 (shoppingGoods.getCarUseCount() == null || shoppingGoods.getCarUseCount() == 0) {
+ moneyCardUse.setUseTotal(999999999);
+ moneyCardUse.setLastCount(999999999);
+ } else {
+ moneyCardUse.setUseTotal(shoppingGoods.getCarUseCount());
+ moneyCardUse.setLastCount(shoppingGoods.getCarUseCount());
+ }
+ //失效时间处理
+ Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 1, null);
+ moneyCardUse.setFailTime(invalidTime);
+ moneyCardUseDao.insert(moneyCardUse);
+
+ });
+ }
+
+ @Override
+ 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) {
+
+ moneyCardOperationDtos.forEach(moneyCardOperationDto -> {
+
+ GroupValidateStatusCheckUtil.check(moneyCardOperationDto, MoneyCardUseGroup.moneyCardUseTk.class);
+
+ List<MoneyCardUse> moneyCardUseList = getMoneyCardUseListByOrderItemId(moneyCardOperationDto.getOrderItemId());
+ for (MoneyCardUse moneyCardUse : moneyCardUseList) {
+ //本金扣款
+ 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);
+ 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<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())) {
+ //回退储值卡余额
+ 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 moneyCardOperationDto
+ */
+ private void returnMoneyCard(MoneyCardOperationDto moneyCardOperationDto) {
+ LogUtil.info("回退储值卡余额 {}", JSON.toJSONString(moneyCardOperationDto));
+ MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardOperationDto.getCarUseId());
+ MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
+
+ if (Objects.nonNull(moneyCardOperationDto.getGiftMoney())) {
+ //jyytodo 余额余次的修改和新增在数据库层面做加减
+ moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney() + moneyCardOperationDto.getGiftMoney());
+ }
+ if (Objects.nonNull(moneyCardOperationDto.getRealMoney())) {
+ moneyCardUse.setRealMoney(moneyCardUse.getRealMoney() + moneyCardOperationDto.getRealMoney());
+ }
+ moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
+ moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
+ moneyCardUseDao.update(moneyCardUse);
+
+
+ //设置卡项使用流水
+ saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
+ }
+
+ /**
+ * 储值卡支付订单 扣减储值卡余额
+ *
+ * @param moneyCardOperationDto
+ */
+ private void moneyCardPayOrder(MoneyCardOperationDto moneyCardOperationDto) {
+ // 判断商品是否在充值卡的限制购买
+ VerificationResult verificationResult = checkIsBangding(moneyCardOperationDto.getCarUseId(), moneyCardOperationDto.getGoodsIds());
+ if (!verificationResult.isJudgeResult()) {
+ throw new GlobleException(verificationResult.getMsg());
+ }
+
+ 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 {
+ 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时充值卡变为无效
+ if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
+ moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
+ moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
+ }
+ }
+
+ ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
+ if (shoppingGoods != null) {
+ Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
+ moneyCardUse.setFailTime(invalidTime);
+ }
+
+ moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardOperationDto.getCount());
+ // 更新充值卡信息
+ moneyCardUseDao.update(moneyCardUse);
+ //设置卡项使用流水
+ saveMoneyCardUseFlow(moneyCardOperationDto,moneyCardUse);
+ }
+
+ /**
+ * 检查商品是否在储值卡的消费范围内
+ *
+ * @param moneyCardUseId 储值卡id
+ * @param goodsIds 商品id集合
+ * @return
+ */
+ private VerificationResult checkIsBangding(Long moneyCardUseId, List<Long> goodsIds) {
+ // 如果是一卡通则肯定在绑定范围内
+ MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardUseId);
+ //默认储值卡可以购买所有产品
+ if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)) {
+ return VerificationResult.success();
+ } else {
+ // 不是默认储值卡判断卡是否可应用于所有产品
+ ShoppingGoods cardGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
+ if (cardGoods != null) {
+ if (Dictionary.FLAG_YES.equals(cardGoods.getCarIsAll())) {
+ return VerificationResult.success();
+ }
+ }
+ // 比较分类
+ MoneyCardAssemble moneyCardAssemble = new MoneyCardAssemble();
+ moneyCardAssemble.setCardId(moneyCardUse.getGoodsId());
+ List<MoneyCardAssemble> cardAssembleList = moneyCardAssembleDao.selectByModel(moneyCardAssemble);
+ List<ShoppingGoods> yhGoods = shoppingGoodsDao.selectByIds(goodsIds);
+
+ StringBuilder msgBuilder = new StringBuilder();
+
+ for (ShoppingGoods goods : yhGoods) {
+ boolean isMatch = false;
+ for (MoneyCardAssemble cardAssemble : cardAssembleList) {
+ // 比较类型
+ if (cardAssemble.getType().equals(Dictionary.CZK_ASSEMBLE_FL)) {
+
+ if (goods.getCateId().equals(cardAssemble.getCateId())) {
+ isMatch = true;
+ break;
+ }
+ } else {
+ // 比较绑定
+ if (goods.getId().equals(cardAssemble.getGoodsId())) {
+ isMatch = true;
+ break;
+ }
+ }
+ }
+ if (!isMatch) {
+ msgBuilder.append(goods.getName() + "不在" + moneyCardUse.getCardName() + "优惠中 ");
+ }
+ }
+ if (msgBuilder.length() > 0) {
+ return VerificationResult.fail(msgBuilder.toString());
+ } else {
+ return VerificationResult.success();
+ }
+
+ }
+ }
@Override
public int add(MoneyCardUse moneyCardUse) {
@@ -160,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("转让人不能是该充值卡拥有者!");
@@ -217,7 +551,6 @@
}
-
//设置为有效
@Override
public void active(MoneyCardUse proj) {
@@ -246,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/ShoppingGoodsServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/ShoppingGoodsServiceImpl.java
index 7c8ddf9..287a6a9 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/ShoppingGoodsServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/ShoppingGoodsServiceImpl.java
@@ -18,7 +18,7 @@
import com.matrix.system.hive.bean.SysShopInfo;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.dto.GoodsSealLimitDto;
-import com.matrix.system.hive.dto.OrderItemDto;
+import com.matrix.system.hive.dto.SysOrderItemDto;
import com.matrix.system.hive.service.ShoppingGoodsService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -64,17 +64,17 @@
//校验参数不能为空
checkGoodsSelLimtParam(goodsSealLimitDto);
- goodsSealLimitDto.getOrderItemDtoList().forEach(item -> {
+ goodsSealLimitDto.getSysOrderItemDtoList().forEach(item -> {
ShoppingGoods shopGoods = shoppingGoodsDao.selectById(item.getGoodsId());
//最大销售次数检测
Integer maxNum = shopGoods.getCarMaxSaleCount();
if (maxNum != null && maxNum != 0) {
Integer buyNum = orderItemDao.selectByGoodsId(shopGoods.getId(), null);
- if ((buyNum + item.getCount()) == maxNum) {
+ if (buyNum.equals(maxNum)) {
if (!shopGoods.getStaus().equals(Dictionary.BUSINESS_STATE_DOWN)) {
shopGoods.setStaus(Dictionary.BUSINESS_STATE_DOWN);
shoppingGoodsDao.update(shopGoods);
- LogUtil.info("{}商品达到最大销售数量自动下架",shopGoods.getName());
+ LogUtil.info("商品达到最大销售数量自动下架:{}", shopGoods.getName());
}
} else if ((buyNum + item.getCount()) > maxNum) {
throw new GlobleException(shopGoods.getName() + "已超过最大销售数量");
@@ -92,17 +92,14 @@
}
-
-
-
private void checkGoodsSelLimtParam(GoodsSealLimitDto goodsSealLimitDto) {
ParamCheckUtil.requireNonNulls(goodsSealLimitDto,
goodsSealLimitDto.getVipId(),
- goodsSealLimitDto.getOrderItemDtoList());
+ goodsSealLimitDto.getSysOrderItemDtoList());
- ParamCheckUtil.requireListElementNonNull(goodsSealLimitDto.getOrderItemDtoList(),
- Arrays.asList(OrderItemDto::getCount, OrderItemDto::getGoodsId));
+ ParamCheckUtil.requireListElementNonNull(goodsSealLimitDto.getSysOrderItemDtoList(),
+ Arrays.asList(SysOrderItemDto::getCount, SysOrderItemDto::getGoodsId));
}
@@ -391,9 +388,6 @@
shoppingGoods.setIsAssemble(Dictionary.FLAG_NO);
break;
case Dictionary.SHOPPING_GOODS_TYPE_TC:
- shoppingGoods.setIsAssemble(Dictionary.FLAG_YES);
- break;
- case Dictionary.SHOPPING_GOODS_TYPE_ZHK:
shoppingGoods.setIsAssemble(Dictionary.FLAG_YES);
break;
}
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
new file mode 100644
index 0000000..f2bde3f
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
@@ -0,0 +1,844 @@
+/**
+ * projectName: zq-erp
+ * fileName: SysOrderServiceHelper.java
+ * packageName: com.matrix.system.hive.service.imp
+ * date: 2022-03-11 9:33
+ * copyright(c) 2022 http://www.hydee.cn/ Inc. All rights reserved.
+ */
+package com.matrix.system.hive.service.imp;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+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;
+import com.matrix.system.common.bean.BusParameterSettings;
+import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.service.OperationLogService;
+import com.matrix.system.constance.Dictionary;
+import com.matrix.system.enums.OperationButtonEnum;
+import com.matrix.system.enums.OperationFunctionEnum;
+import com.matrix.system.hive.bean.*;
+import com.matrix.system.hive.dao.*;
+import com.matrix.system.hive.dto.MoneyCardOperationDto;
+import com.matrix.system.hive.dto.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.*;
+import com.matrix.system.score.constant.ScoreSettingConstant;
+import com.matrix.system.score.entity.ScoreVipDetail;
+import com.matrix.system.score.service.ScoreVipDetailService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.validation.constraints.NotEmpty;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @version: V1.0
+ * @author: JiangYouYao
+ * @className: SysOrderServiceHelper
+ * @packageName: com.matrix.system.hive.service.imp
+ * @description: 订单服务助手
+ * @data: 2022-03-11 9:33
+ **/
+@Component
+public class SysOrderServiceHelper {
+
+
+ @Autowired
+ SysInstoreInfoService sysInstoreInfoService;
+
+ @Autowired
+ private SysSupplierInfoDao sysSupplierInfoDao;
+
+ @Autowired
+ ScoreVipDetailService scoreVipDetailService;
+
+ @Autowired
+ SysVipInfoDao sysVipInfoDao;
+
+ @Autowired
+ private SysStoreInfoDao storeInfoDao;
+
+ @Autowired
+ private SysProjUseService sysProjUseService;
+
+ @Autowired
+ SysOutStoreDao sysOutStoreDao;
+ @Autowired
+ private CodeService codeService;
+
+ @Autowired
+ ShoppingGoodsAssembleDao shoppingGoodsAssembleDao;
+
+ @Autowired
+ SysOutStoreItemDao sysOutStoreItemDao;
+
+ @Autowired
+ private SysOrderDao sysOrderDao;
+
+ @Autowired
+ private OperationLogService operationLogService;
+ @Autowired
+ ShoppingGoodsDao shoppingGoodsDao;
+
+ @Autowired
+ private SysOrderFlowDao sysOrderFlowDao;
+
+ @Autowired
+ BusParameterSettingsDao busParameterSettingsDao;
+
+ @Autowired
+ private WarehouseDao warehouseDao;
+
+ @Autowired
+ MoneyCardUseService moneyCardUseService;
+
+ @Autowired
+ private SysOrderItemDao orderItemDao;
+
+
+ @Autowired
+ MoneyCardUseDao moneyCardUseDao;
+
+ /**
+ * 创建支付流水
+ *
+ * @author:姜友瑶
+ */
+ public void addOrderFlow(SysOrder sourceOrder, boolean isBj) {
+
+ LogUtil.info("创建支付流水 id={}", sourceOrder.getId());
+ //处理支付流水
+ int flowCount = 1;
+ for (SysOrderFlow flow : sourceOrder.getFlows()) {
+ flow.setFlowNo(codeService.getFlowCode() + "-" + flowCount);
+ flow.setVipId(sourceOrder.getVipId());
+ flow.setShopId(sourceOrder.getShopId());
+ flow.setCompanyId(sourceOrder.getCompanyId());
+ //支付内容摘要设置
+ Long goodsId = sourceOrder.getItems().get(0).getGoodsId();
+ ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
+ flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品");
+ // 若是退款,则取负数
+ if (SysOrder.ORDER_TYPE_REFUND == sourceOrder.getOrderType()) {
+ flow.setFlowType(SysOrderFlow.FLOW_TYPE_REFUND);
+ flow.setAmount(flow.getAmount().negate());
+ flow.setOrderId(sourceOrder.getOldOrderId());
+ } else {
+ if (isBj) {//jyytodo 优化不能根据isbj来判断流水类型
+ flow.setFlowType(SysOrderFlow.FLOW_TYPE_REPAY);
+ } else {
+ flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY);
+ }
+
+ flow.setOrderId(sourceOrder.getId());
+ }
+ sysOrderFlowDao.insert(flow);
+ flowCount++;
+ }
+ }
+
+
+ /**
+ * 新增项目和套餐的余次
+ *
+ * @author:姜友瑶
+ * @date 2016年9月2日
+ */
+ public void addTaocanProj(SysOrder order) {
+ List<SysOrderItem> itemList = order.getItems();
+ List<ProjUseOperationDto> projUseDtoList = Lists.newArrayList();
+ for (SysOrderItem sysOrderItem : itemList) {
+ // 折扣 项目的实际购买除以项目原价,来计算项目的消耗价格
+ // 赠送 计算全额的消耗业绩
+ ProjUseOperationDto projUseOperationDto = new ProjUseOperationDto();
+ if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0 && !isGiftMoneyPay(order)) {
+ projUseOperationDto.setFree(false);
+ } else {
+ projUseOperationDto.setFree(true);
+ }
+ if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_TC)) {
+ //计算折扣
+ 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);
+ }
+
+ /**
+ * 全是赠送金额,且配置了赠送金额购买计算为赠送
+ *
+ * @param order
+ * @return
+ */
+ private boolean isGiftMoneyPay(SysOrder order) {
+ BusParameterSettings giftiIsfree = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_GIFTISFREE, order.getCompanyId());
+ if (giftiIsfree.getParamValue().equals("是")) {
+ return order.getFlows().stream().allMatch(item -> SysOrderFlow.IS_GIFT_Y.equals(item.getIsGift())
+ && item.getAmount().doubleValue() > 0D);
+ } else {
+ return false;
+ }
+
+
+ }
+
+
+ /**
+ * 使用充值卡付款操作
+ *
+ * @param pageOrder
+ */
+ public void cardPaySk(SysOrder pageOrder) {
+
+
+
+ SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
+ List<SysOrderFlow> flows = pageOrder.getFlows();
+ List<Long> goodsIds = pageOrder.getItems().stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
+
+ List<MoneyCardOperationDto> moneyCardOperationDtos = Lists.newArrayList();
+
+ flows.forEach(flow -> {
+ if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
+ if (flow.getCardId() != null) {
+ 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.setRealMoney(0D);
+ } else {
+ dto.setRealMoney(-flow.getAmount().doubleValue());
+ dto.setGiftMoney(0D);
+ }
+ dto.setUpdateUser(user.getSuId());
+ dto.setGoodsIds(goodsIds);
+ moneyCardOperationDtos.add(dto);
+ } else {
+ throw new GlobleException("无效的储值卡支付方式");
+ }
+ }
+ });
+
+ if (CollectionUtils.isNotEmpty(moneyCardOperationDtos)) {
+ LogUtil.info("扣除储值卡余额{}", JSON.toJSONString(moneyCardOperationDtos));
+ moneyCardUseService.changeMoneyCard(moneyCardOperationDtos);
+ }
+ }
+
+
+ /**
+ * 储值卡退款
+ * @param order
+ */
+ public void returnMoneyCardPay(SysOrder order) {
+ SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
+ 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) {
+ MoneyCardOperationDto dto = new MoneyCardOperationDto();
+ dto.setOrderNo(order.getOrderNo());
+ dto.setOrderId(order.getId());
+ dto.setCount(1);
+ dto.setCarUseId(flow.getCardId());
+ dto.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL);
+ if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
+ dto.setGiftMoney(flow.getAmount().doubleValue());
+ } else {
+ dto.setRealMoney(flow.getAmount().doubleValue());
+ }
+ dto.setUpdateUser(user.getSuId());
+ moneyCardOperationDtos.add(dto);
+ } else {
+ throw new GlobleException("无效的储值卡支付方式");
+ }
+ }
+ }
+
+ if (CollectionUtils.isNotEmpty(moneyCardOperationDtos)) {
+ LogUtil.info("退回储值卡余额{}", JSON.toJSONString(moneyCardOperationDtos));
+ moneyCardUseService.changeMoneyCard(moneyCardOperationDtos);
+ }
+ }
+
+ /**
+ * @param sourceOrder 如果购买了充值卡设置会员的充值卡
+ * @author:姜友瑶
+ * @date 2016年9月19日
+ */
+ 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) {
+ // 如果购买的是充值卡
+ if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_CZK)) {
+ for (int i = 0; i < sysOrderItem.getCount(); i++) {
+
+ MoneyCardOperationDto moneyCardOperationDto = new MoneyCardOperationDto();
+ // 是否为赠送
+ 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);
+ }
+ }
+ }
+ if (CollUtil.isNotEmpty(moneyCardOperationDtos)) {
+ moneyCardUseService.addVipMoneyCard(moneyCardOperationDtos);
+ }
+
+ }
+
+ /**
+ * 新增出库单并更新本店库存
+ * jyytodo 继续优化
+ *
+ * @param order
+ */
+ public void addOutStore(SysOrder order) {
+
+ BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, order.getCompanyId());
+ if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) {
+
+ List<SysOutStoreItem> storeItemList = new ArrayList<>();
+
+ for (SysOrderItem sysOrderItem : order.getItems()) {
+
+ if (ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP.equals(sysOrderItem.getType())) {
+
+ SysOutStoreItem storeItem = new SysOutStoreItem();
+ storeItem.setSkuId(sysOrderItem.getGoodsId());
+ storeItem.setAmount(Double.valueOf(sysOrderItem.getCount()));
+ storeItemList.add(storeItem);
+
+ } else if (ShoppingGoods.SHOPPING_GOODS_TYPE_TC.equals(sysOrderItem.getType())
+
+ || ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
+
+ List<ShoppingGoodsAssemble> goodsList = new ArrayList<>();
+
+ goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
+
+ if (ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
+ //综合卡处理,中的套餐,中的家居产品
+ List<ShoppingGoodsAssemble> zhkAssemble = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_TC);
+ zhkAssemble.forEach(item -> {
+ goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getAssembleGoodId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
+ });
+ }
+
+ goodsList.forEach(item -> {
+ SysOutStoreItem storeItem = new SysOutStoreItem();
+ storeItem.setSkuId(item.getAssembleGoodId());
+ storeItem.setAmount(Double.valueOf(item.getTotal()));
+ storeItemList.add(storeItem);
+ });
+ }
+ }
+
+ if (CollectionUtils.isNotEmpty(storeItemList)) {
+ Long warehouseId = warehouseDao.findShopWarehouse(order.getShopId()).get(0).getId();
+ SysOutStore outStore = new SysOutStore();
+ outStore.setOutStoreNo(codeService.getOutStoreCode());
+ outStore.setOrderId(order.getId());
+ outStore.setShopId(order.getShopId());
+ outStore.setShopId(order.getShopId());
+ outStore.setStaffId(order.getStaffId());
+ outStore.setType(Dictionary.OUT_STORE_JJCPCK);
+ outStore.setServiceNo(order.getOrderNo());
+ outStore.setTime(new Date());
+ outStore.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
+ outStore.setCompanyId(order.getCompanyId());
+ sysOutStoreDao.insert(outStore);
+
+ //出库明细,根据批次维度定义
+ List<SysOutStoreItem> realOutStoreItemList = new ArrayList<>();
+
+ storeItemList.forEach(outStoreItem -> {
+
+ //设置出库主键
+ outStoreItem.setOutStoreId(outStore.getId());
+
+ //计算库存总数是否满足本次扣减的需求
+ List<SysStoreInfo> stores = storeInfoDao.selectStoInfoBySku(outStoreItem.getSkuId(), warehouseId);
+ double sum = stores.stream().mapToDouble(item -> item.getStoreTotal()).sum();
+ if (sum < outStoreItem.getAmount()) {
+ ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId());
+ if (sysGoods != null) {
+ throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】");
+
+ } else {
+ throw new GlobleException("出库失败没有找到出库产品");
+ }
+ }
+
+ //循环获取所有批次产品,并扣减库存
+ Double number = outStoreItem.getAmount();
+ for (SysStoreInfo storeInfo : stores) {
+ Double oldStoreTotal = storeInfo.getStoreTotal();
+ Double surplus = storeInfo.getStoreTotal() - number;
+ //更新库存
+ storeInfo.setStoreTotal(surplus < 0 ? 0 : surplus);
+
+ //每次扣减库存都创建一个出库记录
+ SysOutStoreItem sysOutStoreItem = new SysOutStoreItem();
+ BeanUtils.copyProperties(outStoreItem, sysOutStoreItem);
+ sysOutStoreItem.setStoreId(storeInfo.getId());
+ sysOutStoreItem.setAmount(oldStoreTotal - storeInfo.getStoreTotal());
+ realOutStoreItemList.add(sysOutStoreItem);
+
+ storeInfoDao.update(storeInfo);
+ //扣除后剩余库存大于0则跳出扣除,否则剩余数量的负数的绝对值就是再次扣减的数量
+ if (surplus > 0) {
+ break;
+ } else {
+ number = Math.abs(surplus);
+ }
+ }
+ });
+ sysOutStoreItemDao.batchInsert(realOutStoreItemList);
+ }
+
+ } else {
+ LogUtil.debug("不管理库存");
+ }
+
+
+ }
+
+
+ /**
+ * 设置会员消费积分
+ *
+ * @param pageOrder
+ */
+ public void addVipScore(SysOrder pageOrder) {
+
+ SysVipInfo vipInfo = sysVipInfoDao.selectById(pageOrder.getVipId());
+
+ List<SysOrderFlow> flows = pageOrder.getFlows();
+ int[] cashScore = {0, 0, 0};
+ //现金支付金额
+ BigDecimal cashPayAmount = flows.stream()
+ .filter(item -> (!item.getPayMethod().equals("储值卡")) && (!item.getPayMethod().equals("欠款")))
+ .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BusParameterSettings cashConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.CASH_CONSUMPTION, vipInfo.getCompanyId());
+ if (cashPayAmount != null
+ && cashPayAmount.compareTo(BigDecimal.ZERO) > 0
+ && StringUtils.isNotBlank(cashConsumption.getParamValue())) {
+
+ BigDecimal scoreSetting0 = new BigDecimal(cashConsumption.getParamValue());
+ if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
+ cashScore[0] = cashPayAmount.divide(scoreSetting0).intValue();
+ }
+
+ if (StringUtils.isNotBlank(cashConsumption.getParamValue1())) {
+ BigDecimal scoreSetting1 = new BigDecimal(cashConsumption.getParamValue1());
+ if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
+ cashScore[1] = cashPayAmount.divide(scoreSetting1).intValue();
+ }
+
+ }
+
+ if (StringUtils.isNotBlank(cashConsumption.getParamValue2())) {
+ BigDecimal scoreSetting2 = new BigDecimal(cashConsumption.getParamValue2());
+ if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
+ cashScore[2] = cashPayAmount.divide(scoreSetting2).intValue();
+ }
+
+ }
+ }
+
+ int[] cardScore = {0, 0, 0};
+ //储值卡本金支付金额
+ BigDecimal cardPayAmount = flows.stream()
+ .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("N"))
+ .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ BusParameterSettings principalBalanceConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.PRINCIPAL_BALANCE_CONSUMPTION, vipInfo.getCompanyId());
+ if (cardPayAmount != null
+ && cardPayAmount.compareTo(BigDecimal.ZERO) > 0
+ && StringUtils.isNotBlank(principalBalanceConsumption.getParamValue())) {
+
+ BigDecimal scoreSetting0 = new BigDecimal(principalBalanceConsumption.getParamValue());
+ if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
+ cardScore[0] = cardPayAmount.divide(scoreSetting0).intValue();
+ }
+
+ if (StringUtils.isNotBlank(principalBalanceConsumption.getParamValue1())) {
+ BigDecimal scoreSetting1 = new BigDecimal(principalBalanceConsumption.getParamValue1());
+ if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
+ cardScore[1] = cardPayAmount.divide(scoreSetting1).intValue();
+ }
+ }
+
+ if (StringUtils.isNotBlank(principalBalanceConsumption.getParamValue2())) {
+ BigDecimal scoreSetting2 = new BigDecimal(principalBalanceConsumption.getParamValue2());
+ if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
+ cardScore[2] = cardPayAmount.divide(scoreSetting2).intValue();
+ }
+ }
+ }
+
+ int[] giftScore = {0, 0, 0};
+ //储值卡本赠送付金额
+ BigDecimal giftPayAmount = flows.stream()
+ .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("Y"))
+ .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BusParameterSettings bonusBalanceConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.BONUS_BALANCE_CONSUMPTION, vipInfo.getCompanyId());
+ if (giftPayAmount != null
+ && giftPayAmount.compareTo(BigDecimal.ZERO) > 0
+ && StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue())) {
+
+ BigDecimal scoreSetting0 = new BigDecimal(bonusBalanceConsumption.getParamValue());
+ if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
+ giftScore[0] = giftPayAmount.divide(scoreSetting0).intValue();
+ }
+
+ if (StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue1())) {
+ BigDecimal scoreSetting1 = new BigDecimal(bonusBalanceConsumption.getParamValue1());
+ if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
+ giftScore[1] = giftPayAmount.divide(scoreSetting1).intValue();
+ }
+ }
+
+ if (StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue2())) {
+ BigDecimal scoreSetting2 = new BigDecimal(bonusBalanceConsumption.getParamValue2());
+ if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
+ giftScore[2] = giftPayAmount.divide(scoreSetting2).intValue();
+ }
+ }
+ }
+
+ int selfScore = cashScore[0] + cardScore[0] + giftScore[0];
+ int parentScore = cashScore[1] + cardScore[1] + giftScore[1];
+ int topParentScore = cashScore[2] + cardScore[2] + giftScore[2];
+
+
+ //添加自己的积分
+ if (selfScore > 0) {
+ scoreVipDetailService.addScore(
+ vipInfo.getId(),
+ pageOrder.getStaffId(),
+ pageOrder.getShopId(),
+ selfScore,
+ pageOrder.getId(),
+ ScoreVipDetail.SCORE_VIP_TYPE_CASH,
+ "消费奖励"
+ );
+ }
+
+ if (vipInfo.getRecommendId() != null) {
+ //推荐注册老带新积分奖励
+ SysVipInfo referrerVip = sysVipInfoDao.selectById(vipInfo.getRecommendId());
+ if (parentScore > 0) {
+ scoreVipDetailService.addScore(
+ referrerVip.getId(),
+ pageOrder.getStaffId(),
+ pageOrder.getShopId(),
+ parentScore,
+ pageOrder.getId(),
+ ScoreVipDetail.SCORE_VIP_TYPE_CASH,
+ "推荐消费奖励"
+ );
+ }
+ //推荐注册二级带新积分奖励
+ if (referrerVip.getRecommendId() != null) {
+ SysVipInfo topVipInfo = sysVipInfoDao.selectById(referrerVip.getRecommendId());
+ if (topParentScore > 0) {
+ scoreVipDetailService.addScore(
+ topVipInfo.getId(),
+ pageOrder.getStaffId(),
+ pageOrder.getShopId(),
+ topParentScore,
+ pageOrder.getId(),
+ ScoreVipDetail.SCORE_VIP_TYPE_CASH,
+ "推荐消费奖励"
+ );
+ }
+ }
+ }
+ }
+
+ /**
+ * 创建订单信息
+ *
+ * @param sysOrder
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public SysOrder saveOrder(SysOrder sysOrder) {
+
+ //校验参数 jyytodo
+
+ // 计算订单折扣金额,收款情况下 计算订单总额
+ double zkTotal = 0.0;
+ // 页面的pageOrder 参数只包含支付金额信息,不带有购买商品
+ for (SysOrderItem item : sysOrder.getItems()) {
+ ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId());
+ item.setType(shoppingGoods.getGoodType());
+ if (item.getZkPrice() == 0) {
+ item.setIsFree(Dictionary.FLAG_YES);
+ }
+ Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
+ zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
+ item.setStatus(Dictionary.ORDER_STATU_DFK);
+ item.setRefundCount(0);
+ }
+
+ SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
+ sysOrder.setZkTotal(zkTotal);
+ sysOrder.setStatu(Dictionary.ORDER_STATU_DFK);
+ sysOrder.setShopId(user.getShopId());
+ sysOrder.setStaffId(user.getSuId());
+ sysOrder.setCompanyId(user.getCompanyId());
+ sysOrder.setOrderTime(new Date());
+ sysOrder.setOrderType(SysOrder.ORDER_TYPE_SEAL);
+
+
+ //新增订单
+ sysOrder.setOrderNo(codeService.getOrderCode());
+ sysOrderDao.insert(sysOrder);
+
+ //保存单据明细
+ sysOrder.getItems().forEach(sysOrderItem -> {
+ sysOrderItem.setOrderId(sysOrder.getId());
+ orderItemDao.insert(sysOrderItem);
+ });
+
+ //保存单据日志
+ operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
+ OperationFunctionEnum.ORDER,
+ OperationButtonEnum.CREATE,
+ sysOrder.getId(),
+ sysOrder.getOrderNo(),
+ sysOrder.getVipId());
+
+ return sysOrder;
+ }
+
+
+
+
+ /**
+ * 修改订单信息
+ *
+ * @param sysOrder
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public SysOrder modifyOrder(SysOrder sysOrder) {
+ // 计算订单折扣金额,收款情况下 计算订单总额
+ double zkTotal = 0.0;
+ for (SysOrderItem item : sysOrder.getItems()) {
+ ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId());
+ item.setType(shoppingGoods.getGoodType());
+ if (item.getZkPrice() == 0) {
+ item.setIsFree(Dictionary.FLAG_YES);
+ }
+ Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
+ zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
+ }
+ sysOrder.setZkTotal(zkTotal);
+ //更新订单
+ sysOrderDao.update(sysOrder);
+ //删除原有订单明细
+ orderItemDao.deleteByOrderId(sysOrder.getId());
+ sysOrder.getItems().forEach(sysOrderItem -> {
+ sysOrderItem.setOrderId(sysOrder.getId());
+ orderItemDao.insert(sysOrderItem);
+ });
+
+ SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
+ //保存单据日志
+ operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
+ OperationFunctionEnum.ORDER,
+ OperationButtonEnum.UPDATE,
+ sysOrder.getId(),
+ sysOrder.getOrderNo(),
+ sysOrder.getVipId());
+
+ return sysOrder;
+ }
+
+ /**
+ * 创建充值订单
+ * @param czVo
+ * @return
+ */
+ public SysOrder createCzOrder(CzXkVo czVo){
+
+ MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId());
+
+ SysOrder order= new SysOrder();
+ order.setFlows(czVo.getFlows());
+ order.setVipId(czVo.getVipId());
+ order.setRemark(cardUser.getCardName());
+
+ SysOrderItem orderItem = new SysOrderItem();
+ ShoppingGoods shoppingGoods = shoppingGoodsDao.selectVipCzGoods();
+ orderItem.setGoodsId(shoppingGoods.getId());
+ orderItem.setType(Dictionary.SHOPPING_GOODS_TYPE_CZK);
+ orderItem.setCount(1);
+ orderItem.setIsFree(Dictionary.FLAG_NO);
+ orderItem.setZkPrice(czVo.getBjmoney());
+ orderItem.setAchieveList(czVo.getAchaeveList());
+ order.setItems(Arrays.asList(orderItem));
+ saveOrder(order);
+ return order;
+ }
+
+ /**
+ * 创建退款订单
+ * @return
+ */
+ public SysOrder createTkOrder(SysOrder sysOrder){
+ SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+
+ //原订单设置为退款状态
+ SysOrder sourceOrder = new SysOrder();
+ sourceOrder.setId(sysOrder.getOldOrderId());
+ sourceOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_Y);
+ sysOrderDao.update(sourceOrder);
+
+ sysOrder.setId(null);
+ sysOrder.setStaffId(user.getSuId());
+ sysOrder.setCompanyId(user.getCompanyId());
+ sysOrder.setShopId(user.getShopId());
+ sysOrder.setOrderType(SysOrder.ORDER_TYPE_REFUND);
+ sysOrder.setStatu(Dictionary.ORDER_STATU_YFK);
+ Date now = new Date();
+ sysOrder.setOrderTime(now);
+ 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);
+ //插入明细
+ for (SysOrderItem item : sysOrder.getItems()) {
+
+ //更新原订单明细的可退数量
+ SysOrderItem oldItem = orderItemDao.selectById(item.getId());
+ if((oldItem.getRefundCount()+item.getCount()) <= oldItem.getCount()){
+ oldItem.setRefundCount(oldItem.getRefundCount()+item.getCount());
+ orderItemDao.update(oldItem);
+ }else{
+ throw new GlobleException("退款数量大于购买数量");
+ }
+ //插入新的订单明细
+ item.setCount(-item.getCount());
+ item.setZkPrice(-item.getZkPrice());
+ item.setOrderId(sysOrder.getId());
+ orderItemDao.insert(item);
+ }
+ LogUtil.info("创建退款订单:{} " , JSON.toJSONString(sysOrder) ) ;
+ 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 2619287..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
@@ -1,7 +1,9 @@
package com.matrix.system.hive.service.imp;
import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.matrix.component.asyncmessage.AsyncMessageManager;
import com.matrix.core.constance.MatrixConstance;
@@ -9,10 +11,8 @@
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
-import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.app.dto.OrderListDto;
-import com.matrix.system.app.mapper.SysProjUseMapper;
import com.matrix.system.app.vo.OrderDetailAchieveItemVo;
import com.matrix.system.app.vo.OrderDetailItemVo;
import com.matrix.system.app.vo.OrderDetailVo;
@@ -24,29 +24,23 @@
import com.matrix.system.common.dao.SysUsersDao;
import com.matrix.system.common.service.OperationLogService;
import com.matrix.system.constance.Dictionary;
+import com.matrix.system.enums.BooleanEnum;
import com.matrix.system.enums.OperationButtonEnum;
import com.matrix.system.enums.OperationFunctionEnum;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
-import com.matrix.system.hive.dto.GoodsSealLimitDto;
-import com.matrix.system.hive.dto.OrderItemDto;
+import com.matrix.system.hive.dto.*;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.plugin.util.MoneyUtil;
import com.matrix.system.hive.pojo.CzXkVo;
-import com.matrix.system.hive.pojo.ShoppingCarItem;
-import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
import com.matrix.system.hive.service.*;
-import com.matrix.system.score.constant.ScoreSettingConstant;
-import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting;
import com.matrix.system.wechart.templateMsg.UniformMsgParam;
-import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import javax.servlet.http.HttpSession;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.*;
@@ -62,15 +56,12 @@
@Autowired
private SysOrderItemDao orderItemDao;
@Autowired
- private SysProjUseDao sysProjUseDao;
- @Autowired
- private SysStoreInfoDao storeInfoDao;
- @Autowired
- private CodeService codeService;
+ private SysProjUseService sysProjUseService;
+
@Autowired
SysVipInfoDao sysVipInfoDao;
@Autowired
- SysOutStoreDao sysOutStoreDao;
+ SysOutStoreService sysOutStoreService;
@Autowired
SysOutStoreItemDao sysOutStoreItemDao;
@Autowired
@@ -106,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;
@@ -135,6 +112,542 @@
@Autowired
private OperationLogService operationLogService;
+
+ @Autowired
+ private SysVipInfoService sysVipInfoService;
+
+ @Autowired
+ private SysOrderServiceHelper sysOrderServiceHelper;
+
+
+ @Autowired
+ MoneyCardUseService moneyCardUseService;
+
+
+ //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓业务代码区↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public SysOrder checkAndSaveOrder(SysOrder sysOrder) {
+
+ if (Objects.isNull(sysOrder.getId())) {
+ LogUtil.info("新增正向订单");
+ return sysOrderServiceHelper.saveOrder(sysOrder);
+ } else {
+ LogUtil.info("修改订单");
+ return sysOrderServiceHelper.modifyOrder(sysOrder);
+ }
+
+
+ }
+
+ /**
+ * 取消订单
+ *
+ * @param id
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void cancelOrder(Long id) {
+
+ SysOrder order = sysOrderDao.selectById(id);
+
+ if (order.getStatu().equals(Dictionary.ORDER_STATU_DFK)) {
+ //待付款订单取消
+ cancelDFKOrder(order);
+ } else {
+ //已付款订单取消
+ cancelYFKOrder(order);
+ }
+ }
+
+ /**
+ * 已付款订单取消
+ *
+ * @param order
+ */
+ private void cancelYFKOrder(SysOrder order) {
+ SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+ //一个订单只能被取消一次
+ if (Dictionary.ORDER_STATU_YQX.equals(order.getStatu())) {
+ throw new GlobleException("订单已取消");
+ }
+
+ //储值卡退款
+ sysOrderServiceHelper.returnMoneyCardPay(order);
+
+ //套餐项目取消
+ List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(order.getId());
+ for (SysOrderItem orderItem : sysOrderItems) {
+ // 充值卡类型退款
+ if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(orderItem.getType())) {
+ //删除购买的充值卡
+ moneyCardUseService.deleteByOrderItemId(orderItem.getId());
+ } else if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(orderItem.getType())
+ || Dictionary.SHOPPING_GOODS_TYPE_TC.equals(orderItem.getType())) {
+ // 项目套餐退款
+ // 删除套餐项目使用情况
+ sysProjUseService.deleteByOrderItemId(orderItem.getId());
+ }
+ }
+
+ //删除出库单,恢复库存
+ SysOutStore sysOutStore = new SysOutStore();
+ sysOutStore.setOrderId(order.getId());
+ List<SysOutStore> sysOutStores = sysOutStoreService.findByModel(sysOutStore);
+ if (sysOutStores.size() == 1) {
+ sysOutStore = sysOutStores.get(0);
+ sysOutStoreService.cancelOutStore(sysOutStore.getId());
+ }
+
+ // 删除业绩
+ achieveNewService.removeByOrderId(order.getId());
+
+ // 删除收款记录
+ sysOrderFlowDao.deleteByOrderId(order.getId());
+
+ //删除积分
+ scoreVipDetailService.removeByBusinessId(order.getVipId(), order.getId());
+
+ // 取消订单
+ order.setStatu(Dictionary.ORDER_STATU_YQX);
+ sysOrderDao.update(order);
+
+ //保存单据日志
+ operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(),
+ OperationFunctionEnum.ORDER,
+ OperationButtonEnum.CANCEL,
+ order.getId(),
+ order.getOrderNo(),
+ order.getVipId(),
+ "已付款取消订单");
+
+ }
+
+ /**
+ * 待付款订单取消
+ *
+ * @param order
+ */
+ private void cancelDFKOrder(SysOrder order) {
+
+ SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+ order.setStatu(Dictionary.ORDER_STATU_YQX);
+ order.setArrears(0D);
+
+ //发送微信公众号提醒
+ UniformMsgParam uniformMsgParam = new UniformMsgParam(order.getCompanyId(), UniformMsgParam.GZH_DDQX);
+ uniformMsgParam.put("orderId", order.getId());
+ asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
+
+ sysOrderDao.update(order);
+ //保存单据日志
+ operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(),
+ OperationFunctionEnum.ORDER,
+ OperationButtonEnum.CANCEL,
+ order.getId(),
+ order.getOrderNo(),
+ order.getVipId(),
+ "未付款取消订单");
+ }
+
+
+ /**
+ * jyy 收款
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void payOrder(SysOrder pageOrder) throws GlobleException {
+
+ //校验订单是否满足收款条件
+ checkOrderAblePay(pageOrder);
+
+ // 更新订单主表信息
+ payEndUpdateOrderInfo(pageOrder);
+
+ //添加支付流水
+ sysOrderServiceHelper.addOrderFlow(pageOrder, false);
+
+ //扣除储值卡余额
+ sysOrderServiceHelper.cardPaySk(pageOrder);
+
+ // 设置会员充值卡使用情况
+ sysOrderServiceHelper.addMoneyCardUse(pageOrder);
+
+ // 改变客户项目套餐使用情况
+ sysOrderServiceHelper.addTaocanProj(pageOrder);
+
+ // 新增出库单
+ sysOrderServiceHelper.addOutStore(pageOrder);
+
+ // 设置业绩
+ achieveNewService.addAchaeveByOrder(pageOrder);
+
+ //设置会员积分
+ sysOrderServiceHelper.addVipScore(pageOrder);
+
+ //保存订单收款日志
+ saveOrderSkLog(pageOrder);
+
+ }
+
+
+ /**
+ * 保存订单收款日志
+ *
+ * @param pageOrder
+ */
+ private void saveOrderSkLog(SysOrder pageOrder) {
+ SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+ operationLogService.saveOperation(pageOrder.getCompanyId(), pageOrder.getShopId(), user.getSuId(),
+ OperationFunctionEnum.ORDER,
+ OperationButtonEnum.ORDER_SK,
+ pageOrder.getId(),
+ pageOrder.getOrderNo(),
+ pageOrder.getVipId());
+ }
+
+
+ /**
+ * 付款后更新订单信息
+ *
+ * @param pageOrder
+ */
+ private void payEndUpdateOrderInfo(SysOrder pageOrder) {
+ LogUtil.info("付款更新订单信息 id={}", pageOrder.getId());
+ SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
+ pageOrder.setCashierId(user.getSuId());
+
+ pageOrder.setPayTime(new Date());
+
+ pageOrder.setStatu(Dictionary.ORDER_STATU_YFK);
+ List<SysOrderFlow> flows = pageOrder.getFlows();
+
+ BigDecimal cashPayAmount = flows.stream()
+ .filter(item -> (!item.getPayMethod().equals("储值卡")) && (!item.getPayMethod().equals("欠款")))
+ .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ BigDecimal cardPayAmount = flows.stream()
+ .filter(item -> item.getPayMethod().equals("储值卡"))
+ .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ pageOrder.setCardPay(cardPayAmount.doubleValue());
+ pageOrder.setCashPay(cashPayAmount.doubleValue());
+
+ for (SysOrderFlow flow : pageOrder.getFlows()) {
+ //欠款处理
+ if (SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod())) {
+ pageOrder.setStatu(Dictionary.ORDER_STATU_QK);
+ pageOrder.setArrears(flow.getAmount().doubleValue());
+ }
+ }
+
+ double sum = flows.stream().mapToDouble(item -> item.getAmount().doubleValue()).sum();
+
+ if (sum > 0 && cardPayAmount.doubleValue() == 0 && cashPayAmount.doubleValue() == 0) {
+ throw new GlobleException("订单更新失败,支付金额计算错误,请联系管理员");
+ }
+
+
+ sysOrderDao.update(pageOrder);
+ // 设置用户为成交客户
+ sysVipInfoService.updateDealStatus(pageOrder.getVipId(), BooleanEnum.TRUE.getValue());
+ }
+
+ /**
+ * 检查订单是否满足支付条件
+ *
+ * @param pageOrder
+ */
+ private void checkOrderAblePay(SysOrder pageOrder) {
+
+ SysOrder checkOrder = sysOrderDao.selectById(pageOrder.getId());
+
+ //状态校验
+ if (!Dictionary.ORDER_STATU_DFK.equals(checkOrder.getStatu())) {
+ throw new GlobleException("该订单已经收过款,请刷新页面再试!");
+ }
+
+ //检查交易限制调整
+ GoodsSealLimitDto goodsSealLimitDto = new GoodsSealLimitDto();
+ goodsSealLimitDto.setVipId(pageOrder.getVipId());
+ goodsSealLimitDto.setSysOrderItemDtoList(Lists.newArrayList());
+ pageOrder.getItems().forEach(e -> {
+ goodsSealLimitDto.getSysOrderItemDtoList().add(BeanUtil.copyProperties(e, SysOrderItemDto.class));
+ });
+ shoppingGoodsService.checkGoodsSealLimit(goodsSealLimitDto);
+
+ //检查业绩设置
+ checkOrderAchieve(pageOrder);
+
+ LogUtil.info("订单满足支付条件 id={}", pageOrder.getId());
+
+ }
+
+
+ /**
+ * 检查业绩设置是否合理
+ * 1、每个订单明细都要有至少一个对应的业绩
+ * 2、每个订单明细的同类型业绩金额之和不能大于明细支付金额
+ *
+ * @param pageOrder
+ */
+ private void checkOrderAchieve(SysOrder pageOrder) {
+
+ pageOrder.getItems().forEach(item -> {
+
+ if (CollectionUtil.isEmpty(item.getAchieveList())) {
+ ShoppingGoods shopGoods = shoppingGoodsDao.selectById(item.getGoodsId());
+ throw GlobleException.instance(shopGoods.getName() + "缺少设置业绩");
+ }
+
+ //按业绩类型分组后比较支付金额与业绩金额是否相等
+ Map<String, List<AchieveNew>> achieveTypeMap = item.getAchieveList().stream().collect(Collectors.groupingBy(AchieveNew::getAchieveType));
+ Set<Map.Entry<String, List<AchieveNew>>> entries = achieveTypeMap.entrySet();
+ entries.forEach(entrie -> {
+ double sum = entrie.getValue().stream().mapToDouble(AchieveNew::getGoodsCash).sum();
+ //todo 目前使用js计算金额可能存在精度的误差展示用0.1屏蔽
+ if (Math.abs(sum - (item.getZkPrice() * item.getCount())) > 0.1) {
+ ShoppingGoods shopGoods = shoppingGoodsDao.selectById(item.getGoodsId());
+ throw GlobleException.instance(shopGoods.getName() + "," + entrie.getKey() + "业绩金额与收款金额不一致");
+ }
+ });
+ });
+
+ }
+
+
+ /**
+ * 补交
+ *
+ * @author:姜友瑶
+ * @date 2016年9月19日
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void updateAfterMoney(SysOrder pageOrder) {
+ SysOrder sourceOrder = sysOrderDao.selectById(pageOrder.getId());
+
+ //添加支付流水
+ sysOrderServiceHelper.addOrderFlow(pageOrder, true);
+
+ //扣除储值卡余额
+ sysOrderServiceHelper.cardPaySk(pageOrder);
+
+
+ double refundTotal = 0D;
+ double cardPayTotal = 0D;
+ double cashPayTotal = 0D;
+ for (SysOrderFlow flow : pageOrder.getFlows()) {
+ // 若使用储值卡付款
+ if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
+ cardPayTotal += flow.getAmount().doubleValue();
+ } else {
+ cashPayTotal += flow.getAmount().doubleValue();
+ }
+ refundTotal += flow.getAmount().doubleValue();
+ }
+
+ if (refundTotal == pageOrder.getArrears()) {
+ sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK);
+ } else {
+ sourceOrder.setStatu(Dictionary.ORDER_STATU_QK);
+ }
+ sourceOrder.setArrears(sourceOrder.getArrears() - refundTotal);
+ sourceOrder.setCardPay(sourceOrder.getCardPay() == null ? 0 : sourceOrder.getCardPay() + cardPayTotal);
+ sourceOrder.setCashPay(sourceOrder.getCashPay() == null ? 0 : sourceOrder.getCashPay() + cashPayTotal);
+ sysOrderDao.update(sourceOrder);
+ }
+
+
+ /**
+ * 会员卡充值
+ *
+ * @param czVo
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public SysOrder moneyCardCz(CzXkVo czVo) {
+
+ // 新增一个充值订单
+ SysOrder order = sysOrderServiceHelper.createCzOrder(czVo);
+
+ //新增会员卡金额
+ MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId());
+ 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);
+
+ //添加支付流水
+ sysOrderServiceHelper.addOrderFlow(order, false);
+
+ // 设置业绩
+ achieveNewService.addAchaeveByOrder(order);
+
+ //设置会员积分
+ sysOrderServiceHelper.addVipScore(order);
+
+ return order;
+
+ }
+
+
+ @Override
+ public SysOrder findSysOrderTjByVipId(Long vipId) {
+ return sysOrderDao.selectVipOrderInfoTotal(vipId);
+ }
+
+ @Override
+ public List<OrderDetailVo> findApiOrderListInPage(OrderListDto orderListDto, PaginationVO pageVo) {
+ return sysOrderDao.selectApiOrderListInPage(orderListDto, pageVo);
+ }
+
+ @Override
+ public int findApiOrderListTotal(OrderListDto orderListDto) {
+ return sysOrderDao.selectApiOrderListTotal(orderListDto);
+ }
+
+ @Override
+ public OrderDetailVo findApiOrderDetailByOrderId(Long orderId) {
+ OrderDetailVo orderDetail = sysOrderDao.selectApiOrderDetailById(orderId);
+
+ if (orderDetail == null) {
+ throw new GlobleException("该订单不存在");
+ }
+
+ List<OrderDetailItemVo> items = orderItemDao.selectApiOrderDetailItemsByOrderId(orderId);
+ if (CollectionUtils.isNotEmpty(items)) {
+ for (OrderDetailItemVo item : items) {
+ List<OrderDetailAchieveItemVo> achieveItems = achieveNewDao.selectApiOrderItemAchieve(item.getId());
+ item.setAchieves(achieveItems);
+ }
+ }
+
+ orderDetail.setItems(items);
+ return orderDetail;
+ }
+
+ @Override
+ public List<RankingVo> findApiShopAchieveRanking(SysOrder sysOrder) {
+ return sysOrderDao.selectShopAchieveRanking(sysOrder);
+ }
+
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void orderTk(SysOrder sysOrder) {
+
+ //创建并保存退款订单
+ sysOrder = sysOrderServiceHelper.createTkOrder(sysOrder);
+ // 添加订单收款流水
+ sysOrderServiceHelper.addOrderFlow(sysOrder, false);
+ //退款退套餐退项目
+ refundProjUse(sysOrder);
+ //删除积分
+ SysOrder oldOrder = sysOrderDao.selectById(sysOrder.getOldOrderId());
+ scoreVipDetailService.removeByBusinessId(oldOrder.getVipId(), oldOrder.getId());
+
+ // 设置业绩
+ achieveNewService.addAchaeveByOrder(sysOrder);
+
+ SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+ //保存单据日志
+ operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
+ OperationFunctionEnum.ORDER,
+ OperationButtonEnum.ORDER_TK,
+ sysOrder.getId(),
+ sysOrder.getOrderNo(),
+ sysOrder.getVipId());
+
+ }
+
+ /**
+ * 退款退项目,套餐,卡项
+ *
+ * @param sysOrder
+ */
+ private void refundProjUse(SysOrder sysOrder) {
+
+ SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+
+ //记录需要退库存的产品
+ List<SysOrderItem> returnGoodsList = new ArrayList<>();
+ //需要退的套餐和项目
+ List<ProjUseOperationDto> projUseDtoList = Lists.newArrayList();
+ //需要退的储值卡
+ List<MoneyCardOperationDto> moneyCardOperationDtos = Lists.newArrayList();
+
+ for (SysOrderItem item : sysOrder.getItems()) {
+
+ if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType()) && Dictionary.FLAG_YES_Y.equals(item.getIsReturnStore())) {
+
+ returnGoodsList.add(item);
+
+ } else if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(item.getType())
+ || Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType())) {
+ ProjUseOperationDto dto = new ProjUseOperationDto();
+ dto.setGoodsId(item.getGoodsId());
+ 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())) {
+ MoneyCardOperationDto moneyCardOperationDto = new MoneyCardOperationDto();
+ moneyCardOperationDto.setOrderId(sysOrder.getId());
+ moneyCardOperationDto.setOrderNo(sysOrder.getOrderNo());
+ moneyCardOperationDto.setOrderItemId(item.getOldItemId());
+ moneyCardOperationDto.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_TK);
+ moneyCardOperationDto.setUpdateUser(user.getSuId());
+ moneyCardOperationDto.setOrderNo(sysOrder.getOrderNo());
+ moneyCardOperationDto.setRealMoney(item.getZkPrice());
+ moneyCardOperationDtos.add(moneyCardOperationDto);
+ }
+ }
+
+ BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, sysOrder.getCompanyId());
+ if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) {
+ // 家居产品退库存
+ if (CollectionUtils.isNotEmpty(returnGoodsList)) {
+ LogUtil.info("订单退款:退产品库存:{}", JSON.toJSONString(returnGoodsList));
+ sysOrderServiceHelper.refundInstore(returnGoodsList);
+ }
+ }
+
+ if(CollUtil.isNotEmpty(projUseDtoList)){
+ LogUtil.info("订单退款:退套餐项目:{}", JSON.toJSONString(projUseDtoList));
+ sysProjUseService.projectTk(projUseDtoList);
+ }
+
+ if(CollUtil.isNotEmpty(moneyCardOperationDtos)){
+ LogUtil.info("订单退款:储值卡:{}", JSON.toJSONString(moneyCardOperationDtos));
+ moneyCardUseService.moneyCardTk(moneyCardOperationDtos);
+ }
+ }
+
+
+
+
+
+ @Override
+ public BigDecimal findVipArrearsByVipId(Long vipId) {
+ return sysOrderDao.selectArrearsByVipId(vipId);
+ }
+
+
+ //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓===增删改查代码区↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
@Override
@@ -190,1728 +703,5 @@
public SysOrder findById(Long id) {
return sysOrderDao.selectById(id);
- }
-
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public SysOrder checkAndSaveOrder(SysOrder sysOrder) {
-
- // 计算订单折扣金额,收款情况下 计算订单总额
- double zkTotal = 0.0;
-
- // 判断是否为退款
- String orderStatus = Dictionary.ORDER_STATU_DFK;
- if (Dictionary.ORDER_STATU_TK.equals(sysOrder.getStatu())) {
- orderStatus = Dictionary.ORDER_STATU_TK;
- }
-
- // 页面的pageOrder 参数只包含支付金额信息,不带有购买商品
- for (SysOrderItem item : sysOrder.getItems()) {
- // 若为退款,则先更新原有数量
- if (orderStatus.equals(Dictionary.ORDER_STATU_TK)) {
- SysOrderItem sysOrderItem = new SysOrderItem();
- sysOrderItem.setId(item.getId());
- sysOrderItem.setCount(item.getPreCount() - item.getCount());
- orderItemDao.update(sysOrderItem);
- }
- item.setId(null);
-
- ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId());
- item.setType(shoppingGoods.getGoodType());
- if (item.getZkPrice() == 0) {
- item.setIsFree(Dictionary.FLAG_YES);
- }
-
- // 订单欠款减去支付金额 设置实际欠款
- Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
- zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
- item.setStatus(orderStatus);
- }
-
- SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
- sysOrder.setZkTotal(zkTotal);
- sysOrder.setStatu(orderStatus);
- SysOrder source = null;
- if (sysOrder.getId() != null) {
- source = sysOrderDao.selectById(sysOrder.getId());
- }
- sysOrder.setStaffId(source != null ? source.getStaffId() : user.getSuId());
- sysOrder.setCompanyId(source != null ? source.getCompanyId() : user.getCompanyId());
-
-
- if (sysOrder.getId() == null) {
- //新增订单
- sysOrder.setOrderNo(codeService.getOrderCode());
- sysOrderDao.insert(sysOrder);
- //保存单据日志
- operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
- OperationFunctionEnum.ORDER,
- OperationButtonEnum.CREATE,
- sysOrder.getId(),
- sysOrder.getOrderNo(),
- sysOrder.getVipId());
-
- } else {
- //更新订单
- sysOrderDao.update(sysOrder);
- //删除原有订单明细
- orderItemDao.deleteByOrderId(sysOrder.getId());
- //保存单据日志
- operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
- OperationFunctionEnum.ORDER,
- OperationButtonEnum.UPDATE,
- sysOrder.getId(),
- sysOrder.getOrderNo(),
- sysOrder.getVipId(),
- "修改订单内容");
- }
-
- sysOrder.getItems().forEach(sysOrderItem -> {
- sysOrderItem.setOrderId(sysOrder.getId());
- if (sysOrder.getStatu().equals(Dictionary.ORDER_STATU_TK)) {
- // 取负数
- sysOrderItem.setCount(-sysOrderItem.getCount());
- orderItemDao.insert(sysOrderItem);
- // 调整回来
- sysOrderItem.setCount(-sysOrderItem.getCount());
- } else {
- orderItemDao.insert(sysOrderItem);
- }
-
- });
-
- return sysOrder;
- }
-
- /**
- * 取消订单
- *
- * @param id
- * @return
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void cancelOrder(Long id) {
-
- SysOrder order = sysOrderDao.selectById(id);
- SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- if (order.getStatu().equals(Dictionary.ORDER_STATU_DFK)) {
-
- order.setStatu(Dictionary.ORDER_STATU_YQX);
- order.setArrears(0D);
-
- //发送微信公众号提醒
- UniformMsgParam uniformMsgParam = new UniformMsgParam(order.getCompanyId(), UniformMsgParam.GZH_DDQX);
- uniformMsgParam.put("orderId", order.getId());
- asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
-
- sysOrderDao.update(order);
- //保存单据日志
- operationLogService.saveOperation(order.getCompanyId(), order.getShopId(),sysUsers.getSuId(),
- OperationFunctionEnum.ORDER,
- OperationButtonEnum.CANCEL,
- order.getId(),
- order.getOrderNo(),
- order.getVipId(),
- "未付款取消订单");
- } else {
-
- //一个订单只能被取消一次
- if (Dictionary.ORDER_STATU_YQX.equals(order.getStatu())) {
- throw new GlobleException("订单已取消");
- }
-
- List<SysOrderFlow> flows = sysOrderFlowDao.selectByOrderId(id);
- // 非现金收款退回扣卡余额
- for (SysOrderFlow flow : flows) {
- if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
-
- MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
- MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
-
- if (moneyCardUse != null) {
- // 根据订单明细判断是赠送金额购买还是本金购买
- moneyCardUseFlow.setTotal(flow.getAmount().doubleValue());
- if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
- moneyCardUse.setGiftMoney(MoneyUtil.add(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue()));
- } else {
- moneyCardUse.setRealMoney(MoneyUtil.add(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue()));
- }
-
- if (!moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)) {
- if (moneyCardUse.getLastCount() != null) {
- moneyCardUse.setLastCount(moneyCardUse.getLastCount() + 1);
- moneyCardUseFlow.setTimes(1);
- }
- }
- moneyCardUseDao.update(moneyCardUse);
- //插入充值卡变动流水
- SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- moneyCardUseFlow.setOrderNo(order.getOrderNo());
- moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
- moneyCardUseFlow.setVipId(order.getVipId());
- moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL);
- moneyCardUseFlow.setCreateTime(new Date());
- moneyCardUseFlow.setOperationId(user.getSuId());
- moneyCardUseFlow.setContent(moneyCardUse.getChangeRemark());
- moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
- moneyCardUseFlowDao.insert(moneyCardUseFlow);
- }
- }
- }
-
- List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(id);
- for (SysOrderItem orderItem : sysOrderItems) {
- // 充值卡类型退款
- if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(orderItem.getType())) {
- ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(orderItem.getGoodsId());
- //删除购买的充值卡
- moneyCardUseDao.deleteByOrderItemId(orderItem.getId());
- } else if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(orderItem.getType())
- || Dictionary.SHOPPING_GOODS_TYPE_TC.equals(orderItem.getType())) {
- // 项目套餐退款
- // 删除套餐项目使用情况
- sysProjUseDao.deleteByOrderItemId(orderItem.getId());
- } else if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(orderItem.getType())) {
- // 综合卡
- // 删除套餐项目使用情况
- sysProjUseDao.deleteByOrderItemId(orderItem.getId());
- // 删除充值卡
- moneyCardUseDao.deleteByOrderItemId(orderItem.getId());
- }
- }
-
- //删除出库单,恢复库存
- SysOutStore sysOutStore = new SysOutStore();
- sysOutStore.setOrderId(order.getId());
- List<SysOutStore> sysOutStores = sysOutStoreDao.selectByModel(sysOutStore);
- if (sysOutStores.size() == 1) {
- sysOutStore = sysOutStores.get(0);
- List<SysOutStoreItem> outStoreItemList = sysOutStoreItemDao.selectByOrderId(sysOutStore.getId());
- for (SysOutStoreItem item : outStoreItemList) {
- SysStoreInfo sysStoreInfo = storeInfoDao.selectById(item.getStoreId());
- sysStoreInfo.setStoreTotal(sysStoreInfo.getStoreTotal() + item.getAmount());
- //更新库存
- storeInfoDao.update(sysStoreInfo);
- }
- sysOutStoreDao.deleteById(sysOutStore.getId());
- sysOutStoreItemDao.deleteByOrderId(sysOutStore.getId());
- }
- // 删除业绩
- AchieveNew achieveNew = new AchieveNew();
- achieveNew.setOrderId(id);
- achieveNewService.removeByModel(achieveNew);
-
- // 删除收款记录
- sysOrderFlowDao.deleteByOrderId(id);
-
- //删除积分
- scoreVipDetailService.removeByBusinessId(order.getVipId(), order.getId());
-
- // 取消订单
- order.setStatu(Dictionary.ORDER_STATU_YQX);
- sysOrderDao.update(order);
- //保存单据日志
- operationLogService.saveOperation(order.getCompanyId(), order.getShopId(),sysUsers.getSuId(),
- OperationFunctionEnum.ORDER,
- OperationButtonEnum.CANCEL,
- order.getId(),
- order.getOrderNo(),
- order.getVipId(),
- "已付款取消订单");
- }
-
-
-
- }
-
-
- /**
- * 创建订单 lk
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int createOrder(HttpSession session, ShoppingCarItemsVo car) {
-
- if (car.getCarItems().size() < 1) {
- throw new GlobleException("没用选择购买产品");
- }
- // 获取会员信息,判断等级 获取相应家居折扣
- SysVipInfo info = sysVipInfoDao.selectById(car.getVipId());
-
- //获取折扣-----
- Double zk = zk = 1.0;
-
- SysOrder order = new SysOrder();
- SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
- order.setShopId(user.getShopId());
- order.setOrderNo(codeService.getOrderCode());
- order.setVipId(info.getId());
- order.setOrderTime(new Date());
- order.setRemark(car.getRemark());
- order.setStaffId(user.getSuId());
- order.setIsCross(2 + "");
- order.setChangeId(car.getChangeId());
- order.setStatu(Dictionary.ORDER_STATU_DFK);
- order.setCardPay(0.00);
- order.setCashPay(0.00);
- order.setCompanyId(user.getCompanyId());
- order.setBeatuyId(car.getBeatuyId() + "");
- // 根据美疗师id查询美疗师姓名
- if (car.getBeatuyId() != null) {
- String beatuyName = shopStaffInfoDao.selectById(car.getBeatuyId()).getSuName();
- System.out.println("美疗师:" + beatuyName);
- order.setBeatuyName(beatuyName);
- }
- int i = sysOrderDao.insert(order);
- // 创建订单明细,并计算总价与折扣总价
- // 总价
- double total = 0;
- double zkTotal = 0;
- int count = 0;
- // 设置订单条目
- for (ShoppingCarItem carItem : car.getCarItems()) {
-
- SysOrderItem orderItem = new SysOrderItem();
- orderItem.setOrderId(order.getId());
- orderItem.setCount(carItem.getCount());
- orderItem.setIsFree(carItem.getIsFree());
- orderItem.setType(carItem.getType());
- orderItem.setStatus(Dictionary.ORDER_STATU_DFK);
- // 新增明细
- // 设置商品id
- orderItem.setGoodsId(carItem.getGoodsId());
- // 设置assembleId
- orderItem.setAssembleId(carItem.getAssembleId());
- // 如果是家居产品的话,要取出组合sku中的价格
- double p = carItem.getShoppingGoods().getSealPice();
- orderItem.setPrice(p);
- if (carItem.getIsFree().equals(Dictionary.FLAG_NO)) {
- orderItem.setZkPrice(MoneyUtil.mul(p, zk));
- } else {
- // 如果是免费,则设置为0.0
- orderItem.setZkPrice(0.0);
- }
-
-
- orderItemDao.insert(orderItem);
- total = MoneyUtil.add(total,
- MoneyUtil.mul(orderItem.getPrice(), Double.parseDouble(carItem.getCount() + "")));
- zkTotal = MoneyUtil.add(zkTotal,
- MoneyUtil.mul(orderItem.getZkPrice(), Double.parseDouble(carItem.getCount() + "")));
- }
-
- // 设置订单总价与折后价
- order.setTotal(total);
- order.setZkTotal(zkTotal);
- sysOrderDao.update(order);
- return i;
- }
-
-
- /**
- * jyy 收款
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void updateReceiptMoney(SysOrder pageOrder) throws GlobleException {
-
- if (!Dictionary.ORDER_STATU_DFK.equals(pageOrder.getStatu())) {
- throw new GlobleException("该订单已经收过款,请刷新页面再试!");
- }
-
-
- checkOrder(pageOrder);
-
-
- // 更新收款时间
- updateOrderInfo(pageOrder);
-
- // 获取用户信息
- SysVipInfo vipInfo = sysVipInfoDao.selectById(pageOrder.getVipId());
- if (SysVipInfo.UNDEAL_VIP == vipInfo.getIsDeal()) {
- //非成交客户下单更新客户为成交客户
- vipInfo.setIsDeal(SysVipInfo.DEAL_VIP);
- sysVipInfoDao.update(vipInfo);
- }
-
- //添加支付流水
- addOrderFlow(pageOrder);
-
- // 设置会员充值卡使用情况
- addMoneyCardUse(pageOrder);
-
- // 改变客户项目套餐使用情况
- addTaocanProj(pageOrder);
-
- // 新增出库单
- addOutStore(pageOrder);
-
- // 设置业绩
- achieveNewService.addAchaeveByOrder(pageOrder);
-
- setShopSelCount(pageOrder);
-
- //设置会员积分
- addVipScore(pageOrder);
-
-
-
-
- }
-
- /**
- * 付款后更新订单信息
- *
- * @param pageOrder
- */
- private void updateOrderInfo(SysOrder pageOrder) {
-
- SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
- pageOrder.setCashierId(user.getSuId());
-
- pageOrder.setPayTime(new Date());
-
- pageOrder.setStatu(Dictionary.ORDER_STATU_YFK);
- List<SysOrderFlow> flows = pageOrder.getFlows();
-
- BigDecimal cashPayAmount = flows.stream()
- .filter(item -> (!item.getPayMethod().equals("储值卡")) && (!item.getPayMethod().equals("欠款")))
- .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-
- BigDecimal cardPayAmount = flows.stream()
- .filter(item -> item.getPayMethod().equals("储值卡"))
- .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-
- pageOrder.setCardPay(cardPayAmount.doubleValue());
- pageOrder.setCashPay(cashPayAmount.doubleValue());
- //欠款金额在流水处理中处理了
-
- double sum = flows.stream().mapToDouble(item -> item.getAmount().doubleValue()).sum();
-
- if (sum > 0 && cardPayAmount.doubleValue() == 0 && cashPayAmount.doubleValue() == 0) {
- throw new GlobleException("订单更新失败,支付金额计算错误,请联系管理员");
- }
-
-
- sysOrderDao.update(pageOrder);
-
- //保存单据日志
- operationLogService.saveOperation(pageOrder.getCompanyId(), pageOrder.getShopId(), user.getSuId(),
- OperationFunctionEnum.ORDER,
- OperationButtonEnum.ORDER_SK,
- pageOrder.getId(),
- pageOrder.getOrderNo(),
- pageOrder.getVipId());
- }
-
- private void checkOrder(SysOrder pageOrder) {
- //检查交易限制调整 jyytodo 测试一下
- GoodsSealLimitDto goodsSealLimitDto = new GoodsSealLimitDto();
- goodsSealLimitDto.setVipId(pageOrder.getVipId());
- goodsSealLimitDto.setOrderItemDtoList(Lists.newArrayList());
- pageOrder.getItems().forEach(e->{
- goodsSealLimitDto.getOrderItemDtoList().add(BeanUtil.copyProperties(e, OrderItemDto.class));
- });
- shoppingGoodsService.checkGoodsSealLimit(goodsSealLimitDto);
-
- //检查业绩设置
- checkOrderAchieve(pageOrder);
- }
-
-
-
-
-
- /**
- * 检查业绩设置是否合理
- * 1、每个订单明细都要有至少一个对应的业绩
- * 2、每个订单明细的同类型业绩金额之和不能大于明细支付金额
- *
- * @param pageOrder
- */
- private void checkOrderAchieve(SysOrder pageOrder) {
-
- pageOrder.getItems().forEach(item -> {
-
- if (CollectionUtil.isEmpty(item.getAchieveList())) {
- ShoppingGoods shopGoods = shoppingGoodsDao.selectById(item.getGoodsId());
- throw GlobleException.instance(shopGoods.getName() + "缺少设置业绩");
- }
-
- //按业绩类型分组后比较支付金额与业绩金额是否相等
- Map<String, List<AchieveNew>> achieveTypeMap = item.getAchieveList().stream().collect(Collectors.groupingBy(AchieveNew::getAchieveType));
- Set<Map.Entry<String, List<AchieveNew>>> entries = achieveTypeMap.entrySet();
- entries.forEach(entrie -> {
- double sum = entrie.getValue().stream().mapToDouble(AchieveNew::getGoodsCash).sum();
- //todo 目前使用js计算金额可能存在精度的误差展示用0.1屏蔽
- if (Math.abs(sum - (item.getZkPrice() * item.getCount())) > 0.1) {
- ShoppingGoods shopGoods = shoppingGoodsDao.selectById(item.getGoodsId());
- throw GlobleException.instance(shopGoods.getName() + "," + entrie.getKey() + "业绩金额与收款金额不一致");
- }
- });
- });
-
- }
-
-
-
-
- /**
- * 设置会员消费积分
- *
- * @param pageOrder
- */
- private void addVipScore(SysOrder pageOrder) {
-
- SysVipInfo vipInfo = sysVipInfoDao.selectById(pageOrder.getVipId());
-
- List<SysOrderFlow> flows = pageOrder.getFlows();
- int[] cashScore = {0, 0, 0};
- //现金支付金额
- BigDecimal cashPayAmount = flows.stream()
- .filter(item -> (!item.getPayMethod().equals("储值卡")) && (!item.getPayMethod().equals("欠款")))
- .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
- BusParameterSettings cashConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.CASH_CONSUMPTION, vipInfo.getCompanyId());
- if (cashPayAmount != null
- && cashPayAmount.compareTo(BigDecimal.ZERO) > 0
- && StringUtils.isNotBlank(cashConsumption.getParamValue())) {
-
- BigDecimal scoreSetting0 = new BigDecimal(cashConsumption.getParamValue());
- if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
- cashScore[0] = cashPayAmount.divide(scoreSetting0).intValue();
- }
-
- if (StringUtils.isNotBlank(cashConsumption.getParamValue1())) {
- BigDecimal scoreSetting1 = new BigDecimal(cashConsumption.getParamValue1());
- if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
- cashScore[1] = cashPayAmount.divide(scoreSetting1).intValue();
- }
-
- }
-
- if (StringUtils.isNotBlank(cashConsumption.getParamValue2())) {
- BigDecimal scoreSetting2 = new BigDecimal(cashConsumption.getParamValue2());
- if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
- cashScore[2] = cashPayAmount.divide(scoreSetting2).intValue();
- }
-
- }
- }
-
- int[] cardScore = {0, 0, 0};
- //储值卡本金支付金额
- BigDecimal cardPayAmount = flows.stream()
- .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("N"))
- .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-
- BusParameterSettings principalBalanceConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.PRINCIPAL_BALANCE_CONSUMPTION, vipInfo.getCompanyId());
- if (cardPayAmount != null
- && cardPayAmount.compareTo(BigDecimal.ZERO) > 0
- && StringUtils.isNotBlank(principalBalanceConsumption.getParamValue())) {
-
- BigDecimal scoreSetting0 = new BigDecimal(principalBalanceConsumption.getParamValue());
- if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
- cardScore[0] = cardPayAmount.divide(scoreSetting0).intValue();
- }
-
- if (StringUtils.isNotBlank(principalBalanceConsumption.getParamValue1())) {
- BigDecimal scoreSetting1 = new BigDecimal(principalBalanceConsumption.getParamValue1());
- if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
- cardScore[1] = cardPayAmount.divide(scoreSetting1).intValue();
- }
- }
-
- if (StringUtils.isNotBlank(principalBalanceConsumption.getParamValue2())) {
- BigDecimal scoreSetting2 = new BigDecimal(principalBalanceConsumption.getParamValue2());
- if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
- cardScore[2] = cardPayAmount.divide(scoreSetting2).intValue();
- }
- }
- }
-
- int[] giftScore = {0, 0, 0};
- //储值卡本赠送付金额
- BigDecimal giftPayAmount = flows.stream()
- .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("Y"))
- .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
- BusParameterSettings bonusBalanceConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.BONUS_BALANCE_CONSUMPTION, vipInfo.getCompanyId());
- if (giftPayAmount != null
- && giftPayAmount.compareTo(BigDecimal.ZERO) > 0
- && StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue())) {
-
- BigDecimal scoreSetting0 = new BigDecimal(bonusBalanceConsumption.getParamValue());
- if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
- giftScore[0] = giftPayAmount.divide(scoreSetting0).intValue();
- }
-
- if (StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue1())) {
- BigDecimal scoreSetting1 = new BigDecimal(bonusBalanceConsumption.getParamValue1());
- if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
- giftScore[1] = giftPayAmount.divide(scoreSetting1).intValue();
- }
- }
-
- if (StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue2())) {
- BigDecimal scoreSetting2 = new BigDecimal(bonusBalanceConsumption.getParamValue2());
- if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
- giftScore[2] = giftPayAmount.divide(scoreSetting2).intValue();
- }
- }
- }
-
- int selfScore = cashScore[0] + cardScore[0] + giftScore[0];
- int parentScore = cashScore[1] + cardScore[1] + giftScore[1];
- int topParentScore = cashScore[2] + cardScore[2] + giftScore[2];
-
-
- //添加自己的积分
- if (selfScore > 0) {
- scoreVipDetailService.addScore(
- vipInfo.getId(),
- pageOrder.getStaffId(),
- pageOrder.getShopId(),
- selfScore,
- pageOrder.getId(),
- ScoreVipDetail.SCORE_VIP_TYPE_CASH,
- "消费奖励"
- );
- }
-
- if (vipInfo.getRecommendId() != null) {
- //推荐注册老带新积分奖励
- SysVipInfo referrerVip = sysVipInfoDao.selectById(vipInfo.getRecommendId());
- if (parentScore > 0) {
- scoreVipDetailService.addScore(
- referrerVip.getId(),
- pageOrder.getStaffId(),
- pageOrder.getShopId(),
- parentScore,
- pageOrder.getId(),
- ScoreVipDetail.SCORE_VIP_TYPE_CASH,
- "推荐消费奖励"
- );
- }
- //推荐注册二级带新积分奖励
- if (referrerVip.getRecommendId() != null) {
- SysVipInfo topVipInfo = sysVipInfoDao.selectById(referrerVip.getRecommendId());
- if (topParentScore > 0) {
- scoreVipDetailService.addScore(
- topVipInfo.getId(),
- pageOrder.getStaffId(),
- pageOrder.getShopId(),
- topParentScore,
- pageOrder.getId(),
- ScoreVipDetail.SCORE_VIP_TYPE_CASH,
- "推荐消费奖励"
- );
- }
- }
- }
- }
-
- /**
- * 创建支付流水
- *
- * @author:姜友瑶
- */
- private void addOrderFlow(SysOrder sourceOrder) {
-
-
- //处理支付流水
- int flowCount = 1;
- for (SysOrderFlow flow : sourceOrder.getFlows()) {
- //支付内容摘要设置
- Long goodsId = sourceOrder.getItems().get(0).getGoodsId();
- ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
- flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品");
- // 若是退款,则取负数
- if (SysOrder.ORDER_TYPE_REFUND == sourceOrder.getOrderType()) {
- flow.setFlowType(SysOrderFlow.FLOW_TYPE_REFUND);
- flow.setAmount(flow.getAmount().negate());
- flow.setOrderId(sourceOrder.getOldOrderId());
- } else {
- flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY);
- flow.setOrderId(sourceOrder.getId());
- }
-
- //欠款处理
- if (SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod())) {
- sourceOrder.setStatu(Dictionary.ORDER_STATU_QK);
- sourceOrder.setArrears(flow.getAmount().doubleValue());
- sysOrderDao.update(sourceOrder);
- }
-
- //统计储值卡支付
- if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
- if (flow.getCardId() != null) {
- MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
- //修改储值卡余额
- cardPaySk(moneyCardUse, sourceOrder, flow);
- } else {
- throw new GlobleException("无效的储值卡支付方式");
- }
- }
-
- flow.setFlowNo(codeService.getFlowCode() + "-" + flowCount);
- flow.setVipId(sourceOrder.getVipId());
- flow.setShopId(sourceOrder.getShopId());
- flow.setCompanyId(sourceOrder.getCompanyId());
- sysOrderFlowDao.insert(flow);
- flowCount++;
- }
-
-
- }
-
-
- /**
- * 验证商品是否达到最大发卡限制
- *
- * @author jiangyouyao
- */
- private void checkIsArrivedMax(ShoppingCarItem carItem) {
- // 获取该商品的最大购买数量
- ShoppingGoods shopGoods = shoppingGoodsDao.selectById(carItem.getGoodsId());
- Integer maxNum = shopGoods.getCarMaxSaleCount();
- // 最大发卡数量为0代表不做限制
- if (maxNum != null && maxNum != 0) {
- // 查询该商品已经被购买的次数
- Integer buyNum = orderItemDao.selectByGoodsId(shopGoods.getId(), null);
- buyNum = (buyNum == null ? 0 : buyNum);
- if ((buyNum + carItem.getCount()) > maxNum) {
- throw new GlobleException(shopGoods.getName() + "已超过最大销售数量");
- }
- if ((buyNum + carItem.getCount()) == maxNum) {
- if (!shopGoods.getStaus().equals(Dictionary.BUSINESS_STATE_DOWN)) {
- shopGoods.setStaus(Dictionary.BUSINESS_STATE_DOWN);
- shoppingGoodsDao.update(shopGoods);
- }
- }
-
- }
- }
-
-
- /**
- * 使用充值卡付款操作
- *
- * @param sourceOrder
- * @param moneyCardUse
- * @param flow
- */
- private void cardPaySk(MoneyCardUse moneyCardUse, SysOrder sourceOrder, SysOrderFlow flow) {
- // 判断商品是否在充值卡的限制购买,判断分类
- sourceOrder.getItems().forEach(item -> {
- if (!isInBangding(moneyCardUse, item.getGoodsId())) {
- throw new GlobleException(shoppingGoodsDao.selectById(item.getGoodsId()).getName() + "不在" + moneyCardUse.getCardName() + "优惠中");
- }
- });
-
- SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
-
- MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
- if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
- if (moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) {
- double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue());
- moneyCardUse.setGiftMoney(surplus);
- moneyCardUseFlow.setGiftMoney(0D - flow.getAmount().doubleValue());
- } else {
- throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
- }
- } else {
- if (moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) {
- double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue());
- moneyCardUse.setRealMoney(surplus);
- moneyCardUseFlow.setTotal(0 - flow.getAmount().doubleValue());
- } else {
- throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
- }
- }
-
- if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
- //余额为0时充值卡变为无效
- if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
- moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
- moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
- }
- }
-
- ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId());
- if (shoppingGoods != null) {
- Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
- moneyCardUse.setFailTime(invalidTime);
- }
- // 更新充值卡信息
- moneyCardUseDao.update(moneyCardUse);
- //设置卡项使用流水
- moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
- moneyCardUseFlow.setOrderNo(sourceOrder.getOrderNo());
- moneyCardUseFlow.setVipId(sourceOrder.getVipId());
- moneyCardUseFlow.setTimes(-1);
- moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
- moneyCardUseFlow.setCreateTime(new Date());
- moneyCardUseFlow.setOperationId(user.getSuId());
- moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
- moneyCardUseFlowDao.insert(moneyCardUseFlow);
- }
-
- /**
- * @param moneyCardUse
- * @param goodsId
- * @return 返回类型 boolean
- * 判断商品是否在充值卡的优惠中
- * @author:姜友瑶
- * @date 2016年9月19日
- */
- private boolean isInBangding(MoneyCardUse moneyCardUse, Long goodsId) {
- // 如果是一卡通则肯定在绑定范围内
-
- if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)) {
- return true;
- } else {
- // 不是一卡通,
- // 判断卡是否可应用于所有产品
- ShoppingGoods cardGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId());
- if (cardGoods != null) {
- if (Dictionary.FLAG_YES.equals(cardGoods.getCarIsAll())) {
- return true;
- }
- }
-
- // 比较分类
- MoneyCardAssemble moneyCardAssemble = new MoneyCardAssemble();
- moneyCardAssemble.setCardId(moneyCardUse.getGoodsId());
- List<MoneyCardAssemble> cardAssembleList = moneyCardAssembleDao.selectByModel(moneyCardAssemble);
- ShoppingGoods yhGoods = shoppingGoodsDao.selectById(goodsId);
- boolean flag = false;
- for (MoneyCardAssemble cardAssemble : cardAssembleList) {
- // 比较类型
- if (cardAssemble.getType().equals(Dictionary.CZK_ASSEMBLE_FL)) {
- if (yhGoods.getCateId().equals(cardAssemble.getCateId())) {
- flag = true;
- break;
- }
- } else {
- // 比较绑定
- if (yhGoods.getId().equals(cardAssemble.getGoodsId())) {
- flag = true;
- break;
- }
- }
- }
- return flag;
- }
- }
-
- /**
- * 设置销量
- *
- * @param sourceOrder
- */
- public void setShopSelCount(SysOrder sourceOrder) {
- for (SysOrderItem item : sourceOrder.getItems()) {
- // 正真实销量
- ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId());
- if (goods.getRealSealCount() == null) {
- goods.setRealSealCount(item.getCount());
- } else {
- goods.setRealSealCount(goods.getRealSealCount() + item.getCount());
- }
- shoppingGoodsDao.update(goods);
- }
- }
-
- /**
- * @param sourceOrder 如果购买了充值卡设置会员的充值卡
- * @author:姜友瑶
- * @date 2016年9月19日
- */
- public void addMoneyCardUse(SysOrder sourceOrder) {
- SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- List<SysOrderItem> orderItemList = sourceOrder.getItems();
- for (SysOrderItem sysOrderItem : orderItemList) {
- // 如果购买的是充值卡
- if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_CZK)) {
-
- for (int i = 0; i < sysOrderItem.getCount(); i++) {
- ShoppingGoods moneyCar = shoppingGoodsDao.selectById(sysOrderItem.getGoodsId());
- MoneyCardUse moneyCardUse = new MoneyCardUse();
- moneyCardUse.setVipId(sourceOrder.getVipId());
- moneyCardUse.setGiftMoney(moneyCar.getReferencePice());
- moneyCardUse.setRealMoney(moneyCar.getSealPice());
- moneyCardUse.setGoodsId(moneyCar.getId());
- moneyCardUse.setOrderItemId(sysOrderItem.getId());
- moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
- moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
- moneyCardUse.setCardName(moneyCar.getName());
- moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N);
- moneyCardUse.setVipId(sourceOrder.getVipId());
-
- // 是否为赠送
- if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) {
- moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
- } else {
- moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
- }
- //余次处理
- if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) {
- moneyCardUse.setUseTotal(999999999);
- moneyCardUse.setLastCount(999999999);
- } else {
- moneyCardUse.setUseTotal(moneyCar.getCarUseCount());
- moneyCardUse.setLastCount(moneyCar.getCarUseCount());
- }
- //失效时间处理
- Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null);
- moneyCardUse.setFailTime(invalidTime);
-
- moneyCardUseDao.insert(moneyCardUse);
-
- }
- }
- }
- }
-
- /**
- * @author:姜友瑶
- * @date 2016年9月19日
- */
- @Transactional(rollbackFor = Exception.class)
- @Override
- public void updateAfterMoney(SysOrder pageOrder) {
- SysOrder sourceOrder = sysOrderDao.selectById(pageOrder.getId());
-
- int i = 1;
- double refundTotal = 0D;
- double cardPayTotal = 0D;
- double cashPayTotal = 0D;
- for (SysOrderFlow flow : pageOrder.getFlows()) {
- flow.setFlowNo(codeService.getFlowCode() + "-" + i);
- Long goodsId = pageOrder.getItems().get(0).getGoodsId();
- ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
- flow.setFlowContent(goods.getName() + "等" + pageOrder.getItems().size() + "件产品");
-
- flow.setOrderId(pageOrder.getId());
- flow.setVipId(pageOrder.getVipId());
- flow.setFlowType(SysOrderFlow.FLOW_TYPE_REPAY);
- // 若使用储值卡付款
- if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
- if (flow.getCardId() != null) {
- cardPayTotal += flow.getAmount().doubleValue();
- MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
- cardPaySk(moneyCardUse, pageOrder, flow);
- }
- } else {
- cashPayTotal += flow.getAmount().doubleValue();
- }
-
- refundTotal += flow.getAmount().doubleValue();
- flow.setShopId(sourceOrder.getShopId());
- flow.setCompanyId(sourceOrder.getCompanyId());
- sysOrderFlowDao.insert(flow);
- i++;
- }
-
- boolean haQk = false;
-
- if (refundTotal == pageOrder.getArrears()) {
- haQk = true;
- }
-
- //更新收款状态
- if (haQk) {
- sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK);
- } else {
- sourceOrder.setStatu(Dictionary.ORDER_STATU_QK);
- }
-
- sourceOrder.setArrears(sourceOrder.getArrears() - refundTotal);
- sourceOrder.setCardPay(sourceOrder.getCardPay() == null ? 0 : sourceOrder.getCardPay() + cardPayTotal);
- sourceOrder.setCashPay(sourceOrder.getCashPay() == null ? 0 : sourceOrder.getCashPay() + cashPayTotal);
- sysOrderDao.update(sourceOrder);
- }
-
-
- /**
- * @param order 新增出库单并更新本店库存
- * @author:姜友瑶
- * @date 2016年9月2日
- */
- @Override
- public void addOutStore(SysOrder order) {
-
- BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, order.getCompanyId());
- if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) {
-
- List<SysOutStoreItem> storeItemList = new ArrayList<>();
-
- for (SysOrderItem sysOrderItem : order.getItems()) {
-
- if (ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP.equals(sysOrderItem.getType())) {
-
- SysOutStoreItem storeItem = new SysOutStoreItem();
- storeItem.setSkuId(sysOrderItem.getGoodsId());
- storeItem.setAmount(Double.valueOf(sysOrderItem.getCount()));
- storeItemList.add(storeItem);
-
- } else if (ShoppingGoods.SHOPPING_GOODS_TYPE_TC.equals(sysOrderItem.getType())
-
- || ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
-
- List<ShoppingGoodsAssemble> goodsList = new ArrayList<>();
-
- goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
-
- if (ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
- //综合卡处理,中的套餐,中的家居产品
- List<ShoppingGoodsAssemble> zhkAssemble = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_TC);
- zhkAssemble.forEach(item -> {
- goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getAssembleGoodId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
- });
- }
-
- goodsList.forEach(item -> {
- SysOutStoreItem storeItem = new SysOutStoreItem();
- storeItem.setSkuId(item.getAssembleGoodId());
- storeItem.setAmount(Double.valueOf(item.getTotal()));
- storeItemList.add(storeItem);
- });
- }
- }
-
- if (CollectionUtils.isNotEmpty(storeItemList)) {
- Long warehouseId = warehouseDao.findShopWarehouse(order.getShopId()).get(0).getId();
- SysOutStore outStore = new SysOutStore();
- outStore.setOutStoreNo(codeService.getOutStoreCode());
- outStore.setOrderId(order.getId());
- outStore.setShopId(order.getShopId());
- outStore.setShopId(order.getShopId());
- outStore.setStaffId(order.getStaffId());
- outStore.setType(Dictionary.OUT_STORE_JJCPCK);
- outStore.setServiceNo(order.getOrderNo());
- outStore.setTime(new Date());
- outStore.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
- outStore.setCompanyId(order.getCompanyId());
- sysOutStoreDao.insert(outStore);
-
- //出库明细,根据批次维度定义
- List<SysOutStoreItem> realOutStoreItemList = new ArrayList<>();
-
- storeItemList.forEach(outStoreItem -> {
-
- //设置出库主键
- outStoreItem.setOutStoreId(outStore.getId());
-
- //计算库存总数是否满足本次扣减的需求
- List<SysStoreInfo> stores = storeInfoDao.selectStoInfoBySku(outStoreItem.getSkuId(), warehouseId);
- double sum = stores.stream().mapToDouble(item -> item.getStoreTotal()).sum();
- if (sum < outStoreItem.getAmount()) {
- ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId());
- if (sysGoods != null) {
- throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】");
-
- } else {
- throw new GlobleException("出库失败没有找到出库产品");
- }
- }
-
- //循环获取所有批次产品,并扣减库存
- Double number = outStoreItem.getAmount();
- for (SysStoreInfo storeInfo : stores) {
- Double oldStoreTotal = storeInfo.getStoreTotal();
- Double surplus = storeInfo.getStoreTotal() - number;
- //更新库存
- storeInfo.setStoreTotal(surplus < 0 ? 0 : surplus);
-
- //每次扣减库存都创建一个出库记录
- SysOutStoreItem sysOutStoreItem = new SysOutStoreItem();
- BeanUtils.copyProperties(outStoreItem, sysOutStoreItem);
- sysOutStoreItem.setStoreId(storeInfo.getId());
- sysOutStoreItem.setAmount(oldStoreTotal - storeInfo.getStoreTotal());
- realOutStoreItemList.add(sysOutStoreItem);
-
- storeInfoDao.update(storeInfo);
- //扣除后剩余库存大于0则跳出扣除,否则剩余数量的负数的绝对值就是再次扣减的数量
- if (surplus > 0) {
- break;
- } else {
- number = Math.abs(surplus);
- }
- }
- });
- sysOutStoreItemDao.batchInsert(realOutStoreItemList);
- }
-
- } else {
- LogUtil.debug("不管理库存");
- }
-
-
- }
-
- /**
- * 新增项目和套餐的余次
- *
- * @author:姜友瑶
- * @date 2016年9月2日
- */
- public void addTaocanProj(SysOrder order) {
- List<SysOrderItem> itemList = order.getItems();
- for (SysOrderItem sysOrderItem : itemList) {
- // 折扣 项目的实际购买除以项目原价,来计算项目的消耗价格
- // 赠送 计算全额的消耗业绩
- if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_XM)) {
- createXmProjuse(order, sysOrderItem);
- } else if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_TC)) {
- //每个套餐独立生成一个明细
- int orderCount = sysOrderItem.getCount();
- while (orderCount > 0) {
- createTaocanProjUse(order, sysOrderItem, null);
- orderCount--;
- }
- } else if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_ZHK)) {
- addZongheCarUse(order, sysOrderItem);
- }
- }
-
- }
-
- public void addZongheCarUse(SysOrder order, SysOrderItem sysOrderItem) {
-
-
- //处理一个订单买多次
- int orderCount = sysOrderItem.getCount();
- while (orderCount < 0) {
- orderCount--;
- //综合卡中包含的项目
- List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_XM);
- assembleList.forEach(item -> {
- //TODO 补综合卡逻辑
- createProjuseByAssemble(order, sysOrderItem, item, null, null, null, 0);
- });
-
- //处理综合卡中包含的套餐
- List<ShoppingGoodsAssemble> zhkAssemble = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_TC);
- zhkAssemble.forEach(taocan -> {
- int assembleCount = taocan.getTotal();
- while (assembleCount > 0) {
- assembleCount--;
- createTaocanProjUse(order, sysOrderItem, taocan);
- }
- });
- }
-
-
- }
-
- /**
- * 通过组合关系创建用户项目余次
- */
- private SysProjUse createProjuseByAssemble(SysOrder order, SysOrderItem sysOrderItem,
- ShoppingGoodsAssemble goodsAssemble, Long taocanId, Date failTime, String source, Integer maxCount) {
- //计算折扣
- Double zk = sysOrderItem.getZkPrice() / sysOrderItem.getPrice();
-
- SysProjUse puse = new SysProjUse();
- puse.setIsOver(Dictionary.DELETED_N);
- puse.setOrderItemId(sysOrderItem.getId());
- puse.setProjId(goodsAssemble.getAssembleGoodId());
- puse.setSurplusCount(goodsAssemble.getTotal() == null ? maxCount : goodsAssemble.getTotal());
- puse.setDeductionNum(goodsAssemble.getDeductionNum());
- puse.setProjName(goodsAssemble.getShoppingGoods().getName());
- puse.setVipId(order.getVipId());
- puse.setStatus(Dictionary.TAOCAN_STATUS_YX);
- puse.setTaocanId(taocanId);
- puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM);
- puse.setSource(source);
-
- if (taocanId == null) {
- puse.setPrice(goodsAssemble.getShoppingGoods().getPrice() * zk);
- } else {
- puse.setPrice(goodsAssemble.getPrice() * zk);
- }
-
-
- //赠送项目是否计算消耗业绩否则 赠送产品按原价计算消耗
- boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE);
- if (zsConsumeAchieve) {
- if (sysOrderItem.getPrice() <= 0) {
- //等于0取原价
- if (taocanId == null) {
- puse.setPrice(goodsAssemble.getShoppingGoods().getPrice());
- } else {
- puse.setPrice(goodsAssemble.getPrice());
- }
- }
- } else {
- puse.setPrice(0D);
- }
-
- puse.setBalance(MoneyUtil.mul(puse.getPrice(), Double.valueOf(puse.getSurplusCount())));
- puse.setFailTime(failTime);
- sysProjUseDao.insert(puse);
- return puse;
- }
-
-
- private void createTaocanProjUse(SysOrder order, SysOrderItem sysOrderItem, ShoppingGoodsAssemble goodsAssemble) {
-
- //新建套餐
- SysProjUse taocanProjUse = new SysProjUse();
-
- ShoppingGoods taocanShoppingGoods = sysOrderItem.getShoppingGoods();
-
-
- Long projId = sysOrderItem.getGoodsId();
-
- if (goodsAssemble != null) {
- taocanShoppingGoods = shoppingGoodsDao.selectById(goodsAssemble.getAssembleGoodId());
- projId = goodsAssemble.getAssembleGoodId();
- }
-
- taocanProjUse.setProjId(projId);
- taocanProjUse.setIsOver(Dictionary.DELETED_N);
- taocanProjUse.setOrderItemId(sysOrderItem.getId());
-
- taocanProjUse.setProjName(taocanShoppingGoods.getName());
- taocanProjUse.setVipId(order.getVipId());
- taocanProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
- taocanProjUse.setType(Dictionary.SHOPPING_GOODS_TYPE_TC);
- taocanProjUse.setIsCourse(taocanShoppingGoods.getIsCourse());
- taocanProjUse.setIsInfinite(taocanShoppingGoods.getIsInfinite());
- // 赠送和打折后金额为0的都视为赠送项目
- if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0 && !isGiftMoneyPay(order)) {
- taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
- } else {
- taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
- }
- // 失效时间
- Date invalidTime = shoppingGoodsService.calInvalidTime(taocanShoppingGoods, 1, null);
- taocanProjUse.setFailTime(invalidTime);
- sysProjUseDao.insert(taocanProjUse);
- //计划次数
- int surplusCount = 0;
- //总余额
- Double sumBanance = 0D;
- //创建套餐绑定的项目
- List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(projId, ShoppingGoods.SHOPPING_GOODS_TYPE_XM);
- for (ShoppingGoodsAssemble assemble : assembleList) {
- SysProjUse tempUse = createProjuseByAssemble(order, sysOrderItem, assemble, taocanProjUse.getId(), taocanProjUse.getFailTime(), taocanProjUse.getSource(), taocanShoppingGoods.getCarUseCount());
- sumBanance += tempUse.getBalance();
- surplusCount += tempUse.getSurplusCount();
- }
- if (Dictionary.FLAG_NO_N.equals(taocanShoppingGoods.getIsCourse())) {
- //固定套餐,剩余次数等于绑定项目的次数
- taocanProjUse.setSurplusCount(surplusCount);
- //合计套餐余额
- taocanProjUse.setBalance(sumBanance);
- } else {
- //任选套餐剩余次数等于最大使用次数
- taocanProjUse.setSurplusCount(taocanShoppingGoods.getCarUseCount());
- taocanProjUse.setBalance(sysOrderItem.getZkPrice());
- }
-
- sysProjUseDao.update(taocanProjUse);
- }
-
- @Autowired
- private SysProjServicesService projServicesService;
-
- /**
- * 根据订单创建用户项目使用情况
- *
- * @param order
- * @param sysOrderItem
- */
- private void createXmProjuse(SysOrder order, SysOrderItem sysOrderItem) {
- SysProjUse puse = new SysProjUse();
- puse.setIsOver(Dictionary.DELETED_N);
- puse.setOrderItemId(sysOrderItem.getId());
- puse.setProjId(sysOrderItem.getGoodsId());
- puse.setSurplusCount(sysOrderItem.getCount());
- puse.setVipId(order.getVipId());
- puse.setStatus(Dictionary.TAOCAN_STATUS_YX);
- puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM);
-
-
- puse.setProjName(sysOrderItem.getShoppingGoods().getName());
-
-
- // 赠送和打折后金额为0的都视为赠送项目
- if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0 && !isGiftMoneyPay(order)) {
- puse.setSource(Dictionary.TAOCAN_SOURCE_GM);
- puse.setPrice(sysOrderItem.getZkPrice());
- } else {
- puse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
- //赠送项目是否计算消耗业绩否则 赠送产品按原价计算消耗
- boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE);
- if (zsConsumeAchieve) {
- //赠送情况下,如果收款金额大于0,就是赠送金额划扣的情况,金额即为划扣的折扣金额
- if (sysOrderItem.getZkPrice() > 0) {
- puse.setPrice(sysOrderItem.getZkPrice());
- } else {
- puse.setPrice(sysOrderItem.getShoppingGoods().getSealPice());
- }
- } else {
- puse.setPrice(0D);
- }
- }
- // 设置失效时间
- Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null);
- puse.setFailTime(invalidTime);
- puse.setBalance(puse.getPrice() * puse.getSurplusCount());
- sysProjUseDao.insert(puse);
- }
-
- /**
- * 全是赠送金额,且配置了赠送金额购买计算为赠送
- *
- * @param order
- * @return
- */
- private boolean isGiftMoneyPay(SysOrder order) {
- BusParameterSettings giftiIsfree = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_GIFTISFREE, order.getCompanyId());
- if (giftiIsfree.getParamValue().equals("是")) {
- return order.getFlows().stream().allMatch(item -> SysOrderFlow.IS_GIFT_Y.equals(item.getIsGift())
- && item.getAmount().doubleValue() > 0D);
- } else {
- return false;
- }
-
-
- }
-
-
- /**
- * 会员卡充值
- *
- * @param czVo
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public SysOrder updateAddCardMoney(CzXkVo czVo) {
- SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
-
-// SysVipInfo vip = (SysVipInfo) WebUtil.getSession().getAttribute(SystemConstance.CURRENT_CUSTOMER);
-// czVo.setVipId(vip.getId());
-
- //更新会员会员卡金额
- MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId());
- cardUser.setRealMoney(MoneyUtil.add(cardUser.getRealMoney(), czVo.getBjmoney()));
- cardUser.setGiftMoney(MoneyUtil.add(cardUser.getGiftMoney(), czVo.getGiftMoney()));
- moneyCardUseDao.update(cardUser);
-
-
- // 为会员新增积分
- SysVipInfo vipInfo = sysVipInfoDao.selectById(cardUser.getVipId());
- vipInfo.setPointAll(vipInfo.getPointAll() == null ? 0 : vipInfo.getPointAll() + czVo.getJf());
- sysVipInfoDao.update(vipInfo);
-
-
- // 新增一个充值订单
- SysOrder order = new SysOrder();
- order.setArrears(0D);
- order.setTotal(czVo.getBjmoney());
- order.setZkTotal(czVo.getBjmoney());
- order.setCashPay(czVo.getBjmoney());
- order.setShopId(user.getShopId());
- order.setOrderNo(codeService.getOrderCode());
- order.setVipId(czVo.getVipId());
- Date orderTime = new Date();
- if (StringUtils.isNotBlank(czVo.getDateTime())) {
- orderTime = DateUtil.stringToDateNew(czVo.getDateTime(), DateUtil.DATE_FORMAT_DD);
- }
- order.setOrderTime(orderTime);
- order.setPayTime(orderTime);
- order.setRemark(cardUser.getCardName());
- order.setStaffId(user.getSuId());
- order.setIsCross(2 + "");
- order.setOrderType(SysOrder.ORDER_TYPE_SEAL);
- order.setStatu(Dictionary.ORDER_STATU_YFK);
- order.setCompanyId(user.getCompanyId());
- sysOrderDao.insert(order);
-
- SysOrderItem orderItem = new SysOrderItem();
- orderItem.setOrderId(order.getId());
- orderItem.setOrderNo(order.getOrderNo());
- orderItem.setArrears(0D);
- ShoppingGoods shoppingGoods = shoppingGoodsDao.selectVipCzGoods();
- orderItem.setGoodsId(shoppingGoods.getId());
- orderItem.setPayMethod(Dictionary.PAY_TYPE_MOENY);
- orderItem.setCashPay(czVo.getBjmoney());
- orderItem.setZkPrice(czVo.getBjmoney());
- orderItem.setCardPay(0D);
- orderItem.setType(Dictionary.SHOPPING_GOODS_TYPE_CZK);
- orderItem.setCount(1);
- orderItem.setIsFree(Dictionary.FLAG_NO);
- orderItem.setPrice(czVo.getBjmoney());
- orderItem.setStatus(Dictionary.ORDER_STATU_YFK);
- orderItem.setAchieveList(czVo.getAchaeveList());
- orderItem.setShoppingGoods(shoppingGoods);
- orderItemDao.insert(orderItem);
- List<SysOrderItem> items = new ArrayList<>();
- items.add(orderItem);
- order.setItems(items);
-
-
- //设置卡项使用流水
- MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
- moneyCardUseFlow.setTotal(czVo.getBjmoney());
- moneyCardUseFlow.setGiftMoney(czVo.getGiftMoney());
- moneyCardUseFlow.setCarUseId(czVo.getCardId());
- moneyCardUseFlow.setVipId(czVo.getVipId());
- moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CZ);
- moneyCardUseFlow.setOrderNo(order.getOrderNo());
- moneyCardUseFlow.setCreateTime(new Date());
- moneyCardUseFlow.setOperationId(user.getSuId());
- moneyCardUseFlow.setBalance(cardUser.getGiftMoney() + cardUser.getRealMoney());
- moneyCardUseFlow.setCarUseId(cardUser.getId());
- moneyCardUseFlowDao.insert(moneyCardUseFlow);
-
- order.setFlows(czVo.getFlows());
-
- addOrderFlow(order);
-
- // 添加员工业绩
- achieveNewService.addAchaeveByOrder(order);
-
- return order;
-
- }
-
-
- @Override
- public SysOrder findSysOrderTjByVipId(Long vipId) {
- return sysOrderDao.selectVipOrderInfoTotal(vipId);
- }
-
- @Override
- public List<OrderDetailVo> findApiOrderListInPage(OrderListDto orderListDto, PaginationVO pageVo) {
- return sysOrderDao.selectApiOrderListInPage(orderListDto, pageVo);
- }
-
- @Override
- public int findApiOrderListTotal(OrderListDto orderListDto) {
- return sysOrderDao.selectApiOrderListTotal(orderListDto);
- }
-
- @Override
- public OrderDetailVo findApiOrderDetailByOrderId(Long orderId) {
- OrderDetailVo orderDetail = sysOrderDao.selectApiOrderDetailById(orderId);
-
- if (orderDetail == null) {
- throw new GlobleException("该订单不存在");
- }
-
- List<OrderDetailItemVo> items = orderItemDao.selectApiOrderDetailItemsByOrderId(orderId);
- if (CollectionUtils.isNotEmpty(items)) {
- for (OrderDetailItemVo item : items) {
- List<OrderDetailAchieveItemVo> achieveItems = achieveNewDao.selectApiOrderItemAchieve(item.getId());
- item.setAchieves(achieveItems);
- }
- }
-
- orderDetail.setItems(items);
- return orderDetail;
- }
-
- @Override
- public List<RankingVo> findApiShopAchieveRanking(SysOrder sysOrder) {
- return sysOrderDao.selectShopAchieveRanking(sysOrder);
- }
-
- @Transactional(rollbackFor = Exception.class)
- @Override
- public void refundOrderMoney(SysOrder sysOrder) {
- SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
-
- //原订单设置为退款状态
- SysOrder sourceOrder = new SysOrder();
- sourceOrder.setId(sysOrder.getOldOrderId());
- sourceOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_Y);
-// sourceOrder.setStatu(Dictionary.ORDER_STATU_TK);
- sysOrderDao.update(sourceOrder);
- SysOrder oldOrder = sysOrderDao.selectById(sysOrder.getOldOrderId());
-
- sysOrder.setId(null);
- sysOrder.setStaffId(user.getSuId());
- sysOrder.setCompanyId(user.getCompanyId());
- sysOrder.setShopId(user.getShopId());
- sysOrder.setOrderType(SysOrder.ORDER_TYPE_REFUND);
- sysOrder.setStatu(Dictionary.ORDER_STATU_YFK);
- Date now = new Date();
- sysOrder.setOrderTime(now);
- sysOrder.setPayTime(now);
- sysOrder.setOrderNo(codeService.getRefundOrderNo());
- sysOrder.setZkTotal(-sysOrder.getZkTotal());
- //新增订单
- sysOrderDao.insert(sysOrder);
- //插入明细
- for (SysOrderItem item : sysOrder.getItems()) {
-
- //更新原订单明细的可退数量
- SysOrderItem oldItem = new SysOrderItem();
- oldItem.setId(item.getId());
- oldItem.setRefundCount(item.getCount());
- orderItemDao.update(oldItem);
-
- //插入新的订单明细
- item.setId(null);
- item.setCount(-item.getCount());
- item.setOrderId(sysOrder.getId());
- orderItemDao.insert(item);
- }
-
-
- // 添加订单收款流水
- addOrderFlow(sysOrder);
- //退款退套餐退项目
- refundProjUse(sysOrder);
- //删除积分
- scoreVipDetailService.removeByBusinessId(oldOrder.getVipId(), oldOrder.getId());
-
- // 设置业绩
- achieveNewService.addAchaeveByOrder(sysOrder);
-
- //保存单据日志
- operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
- OperationFunctionEnum.ORDER,
- OperationButtonEnum.ORDER_TK,
- sysOrder.getId(),
- sysOrder.getOrderNo(),
- sysOrder.getVipId());
-
- }
-
- private void addRefundOrderFlow(SysOrder sourceOrder) {
- //处理支付流水
- int flowCount = 1;
- for (SysOrderFlow flow : sourceOrder.getFlows()) {
- //支付内容摘要设置
- Long goodsId = sourceOrder.getItems().get(0).getGoodsId();
- ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
- flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品");
- // 退款,则取负数
- flow.setFlowType(SysOrderFlow.FLOW_TYPE_REFUND);
- flow.setAmount(flow.getAmount().negate());
- flow.setOrderId(sourceOrder.getOldOrderId());
-
- //统计储值卡支付
- if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
- if (flow.getCardId() != null) {
- MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
- //修改储值卡余额
- cardPaySk(moneyCardUse, sourceOrder, flow);
- } else {
- throw new GlobleException("无效的储值卡支付方式");
- }
- }
-
- flow.setFlowNo(codeService.getFlowCode() + "-" + flowCount);
- flow.setVipId(sourceOrder.getVipId());
- flow.setShopId(sourceOrder.getShopId());
- flow.setCompanyId(sourceOrder.getCompanyId());
- sysOrderFlowDao.insert(flow);
- flowCount++;
- }
- }
-
- private void refundCard(MoneyCardUse moneyCardUse, SysOrder sourceOrder, SysOrderFlow flow) {
- SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
-
- MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
- if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
- if (moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) {
- double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue());
- moneyCardUse.setGiftMoney(surplus);
- moneyCardUseFlow.setGiftMoney(0D - flow.getAmount().doubleValue());
- } else {
- throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
- }
- } else {
- if (moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) {
- double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue());
- moneyCardUse.setRealMoney(surplus);
- moneyCardUseFlow.setTotal(0 - flow.getAmount().doubleValue());
- } else {
- throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
- }
- }
-
- if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
- //余额为0时充值卡变为无效
- if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
- moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
- moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
- }
- }
-
- ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId());
- if (shoppingGoods != null) {
- Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
- moneyCardUse.setFailTime(invalidTime);
- }
- // 更新充值卡信息
- moneyCardUseDao.update(moneyCardUse);
- //设置卡项使用流水
- moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
- moneyCardUseFlow.setOrderNo(sourceOrder.getOrderNo());
- moneyCardUseFlow.setVipId(sourceOrder.getVipId());
- moneyCardUseFlow.setTimes(-1);
- moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
- moneyCardUseFlow.setCreateTime(new Date());
- moneyCardUseFlow.setOperationId(user.getSuId());
- moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
- moneyCardUseFlowDao.insert(moneyCardUseFlow);
- }
-
- /**
- * 退款退项目,套餐,卡项
- *
- * @param sysOrder
- */
- private void refundProjUse(SysOrder sysOrder) {
- SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
-
- //记录需要退库存的产品
- List<SysOrderItem> returnGoodsList = new ArrayList<>();
-
- for (SysOrderItem item : sysOrder.getItems()) {
-
- SysProjUse queryProjUse = new SysProjUse();
- queryProjUse.setOrderItemId(item.getOldItemId());
- // 修改项目信息
- if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType()) || Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) {
-
- if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) {
- if (Dictionary.FLAG_YES_Y.equals(item.getIsReturnStore())) {
- returnGoodsList.add(item);
- }
- } else {
- SysProjUse sysProjUse = sysProjUseDao.selectByModel(queryProjUse).get(0);
-
- int sub = sysProjUse.getSurplusCount() - item.getCount();
- if (sub < 0) {
- throw new GlobleException("项目余次不足");
- } else if (sub == 0) {
- sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
- sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
- }
- sysProjUse.setSurplusCount(sub);
- sysProjUseDao.update(sysProjUse);
- SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse);
- sysProjUseFlow.setOptionType("退款修改");
- sysProjUseFlow.setId(null);
- sysProjUseFlow.setUpdateBy(user.getSuName());
- sysProjUseFlow.setCreateBy(user.getSuName());
- sysProjUseDao.insertFlow(sysProjUseFlow);
- }
- }
-
- if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(item.getType())) {
- queryProjUse.setTaocanId(-1L);
- List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(queryProjUse);
-
-
- for (int i = 0; i < sysProjUses.size(); i++) {
-
- SysProjUse sysProjUse = sysProjUses.get(i);
- sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
- sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
- sysProjUseDao.update(sysProjUse);
- SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse);
- sysProjUseFlow.setOptionType("退款修改");
- sysProjUseFlow.setId(null);
- sysProjUseFlow.setUpdateBy(user.getSuName());
- sysProjUseFlow.setCreateBy(user.getSuName());
- sysProjUseDao.insertFlow(sysProjUseFlow);
- }
- }
-
- if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(item.getType())) {
- MoneyCardUse queryCardUse = new MoneyCardUse();
- queryCardUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
- queryCardUse.setOrderItemId(item.getOldItemId());
-
- List<MoneyCardUse> moneyCardUses = moneyCardUseDao.selectByModel(queryCardUse);
- for (int i = 0; i < item.getCount(); i++) {
- MoneyCardUse moneyCardUse = moneyCardUses.get(i);
- moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
- moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
- moneyCardUseDao.update(moneyCardUse);
- }
- }
-
- // TODO 综合卡退款
- if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(item.getType())) {
-
- }
-
-
- ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId());
- goods.setRealSealCount(goods.getRealSealCount() - item.getCount());
- shoppingGoodsDao.update(goods);
- }
-
- BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, sysOrder.getCompanyId());
- if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) {
- // 家居产品退库存
- if (CollectionUtils.isNotEmpty(returnGoodsList)) {
- refundInstore(returnGoodsList);
- }
- }
-
- }
-
- /**
- * 退款入库
- */
- 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) {
- return sysOrderDao.selectArrearsByVipId(vipId);
}
}
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOutStoreServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOutStoreServiceImpl.java
index 961d01e..3d3c73e 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOutStoreServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOutStoreServiceImpl.java
@@ -3,30 +3,23 @@
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;
import com.matrix.system.hive.bean.SysOutStore;
import com.matrix.system.hive.bean.SysOutStoreItem;
-import com.matrix.system.hive.bean.SysShopInfo;
import com.matrix.system.hive.bean.SysStoreInfo;
import com.matrix.system.hive.dao.SysOutStoreDao;
import com.matrix.system.hive.dao.SysOutStoreItemDao;
import com.matrix.system.hive.dao.SysStoreInfoDao;
import com.matrix.system.hive.service.CodeService;
import com.matrix.system.hive.service.SysOutStoreService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
-import java.util.Random;
/**
* @date 2016-07-25 12:43
@@ -42,6 +35,7 @@
private SysStoreInfoDao storeInfoDao;
@Autowired
private CodeService codeService;
+
@Override
@Transactional(rollbackFor = Exception.class)
@@ -142,9 +136,35 @@
}
+
+ /**
+ * 取消出库单
+ * @param id
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
@Override
- public int checkInfo(SysOutStore sysOutStore) {
+ public void cancelOutStore(Long id) {
+ List<SysOutStoreItem> outStoreItemList = sysOutStoreItemDao.selectByOrderId(id);
+ for (SysOutStoreItem item : outStoreItemList) {
+ SysStoreInfo sysStoreInfo = storeInfoDao.selectById(item.getStoreId());
+ sysStoreInfo.setStoreTotal(sysStoreInfo.getStoreTotal() + item.getAmount());
+ //更新库存
+ storeInfoDao.update(sysStoreInfo);
+ }
+ sysOutStoreDao.deleteById(id);
+ sysOutStoreItemDao.deleteByOrderId(id);
+ }
+
+ @Override
+ public int effectOutStore(SysOutStore sysOutStore) {
+
SysOutStore queryStore = sysOutStoreDao.selectById(sysOutStore.getId());
+
+ if(!queryStore.getCheckStatus().equals(Dictionary.CHECK_STATUS_DSH)){
+ throw new GlobleException("单据状态已更新,请刷新");
+ }
+
List<SysOutStoreItem> list = queryStore.getOutStoreItems();
int flag = 0;
for (SysOutStoreItem item : list) {
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 b30f76c..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
@@ -1,24 +1,35 @@
package com.matrix.system.hive.service.imp;
+import cn.hutool.core.collection.CollUtil;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.WebUtil;
+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.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;
+import com.matrix.system.hive.service.SysProjServicesService;
import com.matrix.system.hive.service.SysProjUseService;
+import com.matrix.system.hive.validation.ProjUseGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* @date 2016-07-03 20:53
@@ -28,7 +39,11 @@
@Autowired
private SysProjUseDao sysProjUseDao;
+ @Autowired
+ SysProjServicesService projServicesService;
+ @Autowired
+ SysBeauticianStateService sysBeauticianStateService;
@Autowired
private SysProjuseFreezeDao sysProjuseFreezeDao;
@@ -49,6 +64,14 @@
@Autowired
SysVipInfoDao sysVipInfoDao;
+ @Autowired
+ ShoppingGoodsService shoppingGoodsService;
+
+ @Autowired
+ BusParameterSettingsDao busParameterSettingsDao;
+
+ @Autowired
+ SysUsersDao sysUsersDao;
@Override
public int add(SysProjUse sysProjUse) {
@@ -60,7 +83,6 @@
@Override
public int modify(SysProjUse sysProjUse) {
//插入套餐项目操作记录
-
return sysProjUseDao.update(sysProjUse);
@@ -221,7 +243,7 @@
freeze.setVipId(taocan.getVipId());
SysProjuseFreeze freezeProj = sysProjuseFreezeDao.selectByOrderItemId(freeze);
// todo 因为目前没有在冻结的时候插入冻结记录,所以这里暂时这样处理
- if(freezeProj!=null){
+ if (freezeProj != null) {
Date dateAfter = DateUtil.nextNDate(taocan.getFailTime(), freezeProj.getGapDays());
taocan.setFailTime(dateAfter);
}
@@ -232,7 +254,7 @@
taocan.setStatus(Dictionary.TAOCAN_STATUS_YX);
sysProjUseDao.updateProjStatus(taocan);
SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- SysProjUseFlow useFlow=new SysProjUseFlow();
+ SysProjUseFlow useFlow = new SysProjUseFlow();
useFlow.setProjName(taocan.getProjName());
useFlow.setProjUseId(taocan.getId());
useFlow.setOptionType("人工修改");
@@ -273,7 +295,7 @@
}
SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- SysProjUseFlow useFlow=new SysProjUseFlow();
+ SysProjUseFlow useFlow = new SysProjUseFlow();
useFlow.setProjName(taocan.getProjName());
useFlow.setProjUseId(taocan.getId());
useFlow.setOptionType("人工修改");
@@ -339,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()+"的购买订单存在欠款!");
}
}
@@ -364,7 +384,7 @@
int i = sysProjUseDao.updateTcStatus(sysProjUse.getId(), "无效");
SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- SysProjUseFlow useFlow=new SysProjUseFlow();
+ SysProjUseFlow useFlow = new SysProjUseFlow();
useFlow.setProjName(taocan.getProjName());
useFlow.setProjUseId(taocan.getId());
useFlow.setOptionType("人工修改");
@@ -378,8 +398,6 @@
return i;
}
-
-
/*********************以下为项目使用情况操作***********************/
@@ -468,7 +486,7 @@
SysProjuseFreeze freeze = new SysProjuseFreeze();
freeze.setFreezeTime(new Date());
freeze.setVipId(sysProjUse.getVipId());
- freeze.setOrderItemId(sysProjUse.getId()+"");
+ freeze.setOrderItemId(sysProjUse.getId() + "");
SysProjuseFreeze getfreeze = sysProjuseFreezeDao.selectByOrderItemId(freeze);
int i = 0;
if (getfreeze != null) {
@@ -478,7 +496,7 @@
i = sysProjuseFreezeDao.insert(freeze);
}
SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- SysProjUseFlow useFlow=new SysProjUseFlow();
+ SysProjUseFlow useFlow = new SysProjUseFlow();
useFlow.setProjName(sysProjUse.getProjName());
useFlow.setProjUseId(sysProjUse.getId());
useFlow.setOptionType("人工修改");
@@ -515,7 +533,7 @@
sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- SysProjUseFlow useFlow=new SysProjUseFlow();
+ SysProjUseFlow useFlow = new SysProjUseFlow();
useFlow.setProjName(sysProjUse.getProjName());
useFlow.setProjUseId(sysProjUse.getId());
useFlow.setOptionType("人工修改");
@@ -528,8 +546,6 @@
sysProjUseDao.insertFlow(useFlow);
return sysProjUseDao.update(sysProjUse);
}
-
-
/**
@@ -574,7 +590,7 @@
sysProjUseDao.update(proj);
SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
- SysProjUseFlow useFlow=new SysProjUseFlow();
+ SysProjUseFlow useFlow = new SysProjUseFlow();
useFlow.setProjName(proj.getProjName());
useFlow.setProjUseId(proj.getId());
useFlow.setOptionType("人工修改");
@@ -589,6 +605,248 @@
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功");
}
+
+ /**
+ * 项目套餐退款
+ * @param projUseDtoList
+ */
+ @Override
+ public void projectTk(List<ProjUseOperationDto> projUseDtoList) {
+
+ List<ShoppingGoods> shoppingGoodsList = shoppingGoodsDao.selectByIds(projUseDtoList.stream().map(ProjUseOperationDto::getGoodsId).collect(Collectors.toList()));
+ Map<Long, ShoppingGoods> shoppingGoodsMap = shoppingGoodsList.stream().collect(Collectors.toMap(ShoppingGoods::getId, Function.identity()));
+
+
+ projUseDtoList.forEach(projUseOperationDto -> {
+ //校验参数
+ GroupValidateStatusCheckUtil.check(projUseOperationDto, ProjUseGroup.projectTk.class);
+
+ ShoppingGoods shoppingGoods = shoppingGoodsMap.get(projUseOperationDto.getGoodsId());
+ if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(shoppingGoods.getGoodType())) {
+
+ doProjectTk(projUseOperationDto);
+
+ } else if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(shoppingGoods.getGoodType())) {
+
+ taocanTk(projUseOperationDto);
+ }
+
+
+
+ });
+ }
+
+ /**
+ * 套餐退款
+ * @param projUseOperationDto
+ */
+ 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("套餐余次不足");
+ }
+ projUseOperationDto.setOrderOperationType(OrderOperationEnum.RETURN);
+ for (int i = 0; i < projUseOperationDto.getCount(); i++) {
+ SysProjUse sysProjUse = tcList.get(i);
+ setTaocanTk(sysProjUse,projUseOperationDto);
+ //设置套餐下的项目无效
+ projUseList.stream().filter(item->Objects.equals(sysProjUse.getId(),item.getTaocanId())).collect(Collectors.toList())
+ .forEach(item-> setTaocanTk(item,projUseOperationDto));
+ }
+
+ }
+
+ private void setTaocanTk(SysProjUse sysProjUse, ProjUseOperationDto projUseOperationDto) {
+ sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
+ sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
+ sysProjUse.setSurplusCount(0);
+ sysProjUseDao.update(sysProjUse);
+ saveProjUseFlow(projUseOperationDto,sysProjUse);
+ }
+
+ /**
+ * 项目退款
+ * @param projUseOperationDto
+ */
+ private void doProjectTk(ProjUseOperationDto projUseOperationDto) {
+
+ List<SysProjUse> projUseList = sysProjUseDao.selectByOrderItemId(projUseOperationDto.getOrderItemId());
+ if(projUseList.size()==1){
+ SysProjUse sysProjUse = projUseList.get(0);
+ int sub = sysProjUse.getSurplusCount() - projUseOperationDto.getCount();
+ if (sub < 0) {
+ throw new GlobleException("项目余次不足");
+ } else if (sub == 0) {
+ sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
+ sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
+ }
+ sysProjUse.setSurplusCount(sub);
+ sysProjUseDao.update(sysProjUse);
+ 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);
+ }
+
+ /**
+ * 添加用户套餐
+ *
+ * @param projUseDtoList
+ * @return
+ */
+ @Override
+ public void addUserProjUse(List<ProjUseOperationDto> projUseDtoList) {
+
+ if(CollUtil.isEmpty(projUseDtoList)){
+ throw new GlobleException("projUseDtoList 不能为空");
+ }
+
+ List<ShoppingGoods> shoppingGoodsList = shoppingGoodsDao.selectByIds(projUseDtoList.stream().map(ProjUseOperationDto::getGoodsId).collect(Collectors.toList()));
+ 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);
+ } else if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(shoppingGoods.getGoodType())) {
+ //每个套餐独立生成一个明细
+ int orderCount = projUseOperationDto.getCount();
+ while (orderCount > 0) {
+ createTaocanProjUse(projUseOperationDto, shoppingGoods);
+ orderCount--;
+ }
+ }
+ }
+ }
+
+
+ private void createTaocanProjUse(ProjUseOperationDto projUseOperationDto, ShoppingGoods shoppingGoods) {
+
+ 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);
+ taocanProjUse.setOrderItemId(projUseOperationDto.getOrderItemId());
+
+ taocanProjUse.setProjName(taocanShoppingGoods.getName());
+ taocanProjUse.setVipId(projUseOperationDto.getVipId());
+ taocanProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
+ taocanProjUse.setType(Dictionary.SHOPPING_GOODS_TYPE_TC);
+ taocanProjUse.setIsCourse(taocanShoppingGoods.getIsCourse());
+ taocanProjUse.setIsInfinite(taocanShoppingGoods.getIsInfinite());
+ // 赠送和打折后金额为0的都视为赠送项目
+ if (projUseOperationDto.isFree()) {
+ taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
+ } else {
+ taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
+ }
+ // 失效时间
+ Date invalidTime = shoppingGoodsService.calInvalidTime(taocanShoppingGoods, 1, null);
+ taocanProjUse.setFailTime(invalidTime);
+ sysProjUseDao.insert(taocanProjUse);
+ //计划次数
+ int surplusCount = 0;
+ //总余额
+ Double sumBanance = 0D;
+ //创建套餐绑定的项目
+ List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(projId, ShoppingGoods.SHOPPING_GOODS_TYPE_XM);
+ for (ShoppingGoodsAssemble assemble : assembleList) {
+ ProjUseOperationDto projUseDto = new ProjUseOperationDto();
+ projUseDto.setCount(assemble.getTotal());
+ projUseDto.setGoodsId(assemble.getShoppingGoodsId());
+ projUseDto.setFree(projUseOperationDto.isFree());
+ projUseDto.setPayMoney(MoneyUtil.mul(assemble.getPrice(), projUseOperationDto.getTcZk()));
+ 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();
+ }
+ if (Dictionary.FLAG_NO_N.equals(taocanShoppingGoods.getIsCourse())) {
+ //固定套餐,剩余次数等于绑定项目的次数
+ taocanProjUse.setSurplusCount(surplusCount);
+ //合计套餐余额
+ taocanProjUse.setBalance(sumBanance);
+ } else {
+ //任选套餐剩余次数等于最大使用次数
+ taocanProjUse.setSurplusCount(taocanShoppingGoods.getCarUseCount());
+ taocanProjUse.setBalance(projUseOperationDto.getPayMoney());
+ }
+
+ sysProjUseDao.update(taocanProjUse);
+ }
+
+ private SysProjUse createProjectUse(ProjUseOperationDto projUseOperationDto, ShoppingGoods shoppingGoods) {
+
+ GroupValidateStatusCheckUtil.check(projUseOperationDto,ProjUseGroup.addProject.class);
+
+ SysProjUse puse = new SysProjUse();
+ puse.setIsOver(Dictionary.DELETED_N);
+ puse.setOrderItemId(projUseOperationDto.getOrderItemId());
+ puse.setProjId(projUseOperationDto.getGoodsId());
+ puse.setSurplusCount(projUseOperationDto.getCount());
+ puse.setVipId(projUseOperationDto.getVipId());
+ puse.setStatus(Dictionary.TAOCAN_STATUS_YX);
+ puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM);
+ puse.setProjName(shoppingGoods.getName());
+ puse.setTaocanId(projUseOperationDto.getTcId());
+ // 赠送和打折后金额为0的都视为赠送项目
+ if (!projUseOperationDto.isFree()) {
+ puse.setSource(Dictionary.TAOCAN_SOURCE_GM);
+ puse.setPrice(projUseOperationDto.getPayMoney());
+ } else {
+ puse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
+ //赠送项目是否计算消耗业绩否则 赠送产品按原价计算消耗
+ boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE);
+ if (zsConsumeAchieve) {
+ //赠送情况下,如果收款金额大于0,就是赠送金额划扣的情况,金额即为划扣的折扣金额
+ if (projUseOperationDto.getPayMoney() > 0) {
+ puse.setPrice(projUseOperationDto.getPayMoney());
+ } else {
+ puse.setPrice(shoppingGoods.getSealPice());
+ }
+ } else {
+ puse.setPrice(0D);
+ }
+ }
+
+ // 设置失效时间
+ Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 1, null);
+ puse.setFailTime(invalidTime);
+ puse.setBalance(puse.getPrice() * puse.getSurplusCount());
+ sysProjUseDao.insert(puse);
+ return puse;
+ }
@Override
@@ -613,4 +871,21 @@
public int findTaocanCountForCourseAndInfinite(Long taocanId, Long vipId) {
return sysProjUseDao.selectTaocanCountForCourseAndInfinite(taocanId, vipId);
}
+
+ @Override
+ public void deleteByOrderItemId(Long id) {
+ int count=sysProjUseDao.selectUseCountByOrderItemId(id);
+ if(count>0){
+ SysProjUse query=new SysProjUse();
+ query.setOrderItemId(id);
+ List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(query);
+ if(sysProjUses.size()>1){
+ throw new GlobleException(sysProjUses.get(0).getProjName()+"套餐已经被使用无法删除");
+ }else {
+ throw new GlobleException(sysProjUses.get(0).getProjName()+"项目已经被使用无法删除");
+ }
+ }else {
+ sysProjUseDao.deleteByOrderItemId(id);
+ }
+ }
}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java
index 0515e39..9cdcdb4 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java
@@ -82,6 +82,13 @@
@Autowired
private SysOrderDao sysOrderDao;
+ @Override
+ public void updateDealStatus(Long vipId, int isDeal) {
+ SysVipInfo vipInfo = new SysVipInfo();
+ vipInfo.setIsDeal(isDeal);
+ vipInfo.setIsDeal(SysVipInfo.DEAL_VIP);
+ sysVipInfoDao.update(vipInfo);
+ }
/**
* 新增会员储值卡
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
new file mode 100644
index 0000000..7bfcbc7
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java
@@ -0,0 +1,24 @@
+package com.matrix.system.hive.validation;
+
+public interface MoneyCardUseGroup {
+
+
+ /**
+ * 退款
+ */
+ 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
new file mode 100644
index 0000000..c3b90ed
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java
@@ -0,0 +1,30 @@
+package com.matrix.system.hive.validation;
+
+public interface ProjUseGroup {
+
+ /**
+ * 新增会员项目
+ */
+ interface addProject {
+ }
+
+ /**
+ * 新增会员套餐
+ */
+ interface addTc {
+ }
+
+
+ /**
+ * 退款扣减次数
+ */
+ interface projectTk {
+ }
+
+ /**
+ * 套餐退款
+ */
+ interface taocanTk {
+ }
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpShoppingGoodsController.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpShoppingGoodsController.java
index 6e78a24..c22f83c 100644
--- a/zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpShoppingGoodsController.java
+++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpShoppingGoodsController.java
@@ -101,9 +101,6 @@
shoppingGoods.setAssembleGoods(assembleListGoods);
List<ShoppingGoodsAssemble> assembleListProj = shoppingGoodsAssembleDao.selectProjByShoppingGoodsId(shoppingGoods.getId());
shoppingGoods.setAssembleProj(assembleListProj);
- } else if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(shoppingGoods.getGoodType())) {
- List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectAssembleShoppingGoodsByShoppingGoodsId(shoppingGoods.getId());
- shoppingGoods.setZongheCarGoods(assembleList);
}
@@ -132,9 +129,6 @@
// 返回充值卡编辑界面
WebUtil.getRequest().setAttribute("obj", shoppingGoods);
return "admin/hive-erp/products/money-card-form";
- } else if (shoppingGoods.getGoodType().equals(Dictionary.SHOPPING_GOODS_TYPE_ZHK)) {
- WebUtil.getRequest().setAttribute("obj", shoppingGoods);
- return "admin/hive-erp/products/zonghe-card-form";
}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderOutSotoreTask.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderOutSotoreTask.java
index 612f4f9..100ff7d 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderOutSotoreTask.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderOutSotoreTask.java
@@ -5,13 +5,10 @@
import com.matrix.core.tools.LogUtil;
import com.matrix.system.hive.bean.SysOrder;
import com.matrix.system.hive.dao.SysOrderDao;
-import com.matrix.system.hive.service.SysOrderService;
-import com.rabbitmq.client.DeliverCallback;
-import com.rabbitmq.client.Delivery;
+import com.matrix.system.hive.service.imp.SysOrderServiceHelper;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
-import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -24,7 +21,7 @@
SysOrderDao sysOrderDao;
@Autowired
- SysOrderService orderService;
+ SysOrderServiceHelper sysOrderServiceHelper;
@Override
public String getName() {
@@ -47,7 +44,7 @@
List<SysOrder> list = sysOrderDao.selectByModel(sourceOrder);
if (CollectionUtils.isNotEmpty(list)) {
//订单出库
- orderService.addOutStore(list.get(0));
+ sysOrderServiceHelper.addOutStore(list.get(0));
} else {
LogUtil.error("订单编号{}erp不存在", orderNo);
}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderTask.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderTask.java
index c885d81..05086bb 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderTask.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderTask.java
@@ -15,20 +15,17 @@
import com.matrix.system.hive.service.ShoppingGoodsService;
import com.matrix.system.hive.service.SysOrderService;
import com.matrix.system.hive.service.SysVipInfoService;
+import com.matrix.system.hive.service.imp.SysOrderServiceHelper;
import com.matrix.system.shopXcx.bean.ShopOrder;
import com.matrix.system.shopXcx.bean.ShopOrderDetails;
import com.matrix.system.shopXcx.bean.ShopSku;
import com.matrix.system.shopXcx.dao.ShopOrderDao;
import com.matrix.system.shopXcx.dao.ShopOrderDetailsDao;
import com.matrix.system.shopXcx.dao.ShopSkuDao;
-import com.rabbitmq.client.DeliverCallback;
-import com.rabbitmq.client.Delivery;
-import org.apache.logging.log4j.message.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -87,6 +84,10 @@
@Autowired
private ShopSalesmanGradeDao shopSalesmanGradeDao;
+
+ @Autowired
+ private SysOrderServiceHelper sysOrderServiceHelper;
+
@Transactional(rollbackFor = Exception.class)
public void synchronizationOrderToErp(ShopOrder orderDto) {
@@ -184,30 +185,16 @@
orderItemDao.insert(orderItem);
}
break;
- case Dictionary.SHOPPING_GOODS_TYPE_ZHK:
- // 新增明细
- orderItem.setGoodsId(shoppingGoods.getId());
- // 每一个充值卡都看成一个单独的订单条目
- count = orderItem.getCount();
- for (int j = 0; j < count; j++) {
- orderItem.setCount(1);
- orderItem.setId(null);
- orderItemDao.insert(orderItem);
- }
- break;
}
}
// 处理收款逻辑
SysOrder sourceOrder = sysOrderDao.selectById(order.getId());
sourceOrder.setItems(orderItemDao.selectByOrderId(order.getId()));
// 设置会员充值卡使用情况
- orderService.addMoneyCardUse(sourceOrder);
+ sysOrderServiceHelper.addMoneyCardUse(sourceOrder);
// 改变客户项目套餐使用情况
- orderService.addTaocanProj(sourceOrder);
-
- // 设置销量
- orderService.setShopSelCount(sourceOrder);
+ sysOrderServiceHelper.addTaocanProj(sourceOrder);
SysOrderFlow flow = new SysOrderFlow();
flow.setFlowNo(codeService.getFlowCode() + "-" + i);
diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/ShoppingGoodsDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/ShoppingGoodsDao.xml
index 42b4adc..06992bf 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/ShoppingGoodsDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/hive/ShoppingGoodsDao.xml
@@ -3,7 +3,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.matrix.system.hive.dao.ShoppingGoodsDao">
- <cache readOnly="true"></cache>
+
<resultMap type="ShoppingGoods" id="ShoppingGoodsMap">
<id property="id" column="id" />
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 2e2de04..93cdba5 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
@@ -88,7 +88,6 @@
<insert id="insert" parameterType="SysOrderItem"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO sys_order_item (
- ID,
ORDER_ID,
COUNT,
refundCount,
@@ -106,7 +105,6 @@
pay_method_detail
)
VALUES (
- #{id},
#{orderId},
#{count},
#{refundCount},
@@ -567,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/mybatis/mapper/hive/SysProjUseDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml
index 335a873..a925e17 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml
@@ -65,7 +65,6 @@
create_time,
update_by,
update_time,
- id,
proj_use_id,
surplus_count,
is_over,
@@ -82,7 +81,6 @@
now(),
#{updateBy},
now(),
- #{id},
#{projUseId},
#{surplusCount},
#{isOver},
@@ -948,4 +946,15 @@
select count(1) from sys_proj_use
where taocan_id=#{taocanId} and vip_id=#{vipId}
</select>
+ <select id="selectUseCountByOrderItemId" resultType="java.lang.Integer">
+ SELECT count(*)
+ from sys_beautician_state a
+ LEFT JOIN sys_proj_use b on a.puse_id=b.ID
+ left join sys_proj_services c on a.SERVICES_ID=c.id
+ where b.ORDER_ITEM_ID=#{orderItemId}
+ and c.STATE !='预约取消';
+ </select>
+ <select id="selectByOrderItemId" resultType="com.matrix.system.hive.bean.SysProjUse">
+ select * from sys_proj_use where ORDER_ITEM_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';
diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html
index cd96811..ace7138 100644
--- a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html
+++ b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html
@@ -257,6 +257,10 @@
prop="failTime"
label="到期时间">
</el-table-column>
+ <el-table-column
+ prop="createTime"
+ label="创建时间">
+ </el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button matrix:btn="vipinfoClub-youxiao" v-if="scope.row.status!='有效'" type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button>
@@ -300,6 +304,11 @@
<el-table-column
prop="failTime"
label="到期时间">
+ </el-table-column>
+
+ <el-table-column
+ prop="createTime"
+ label="创建时间">
</el-table-column>
<el-table-column label="操作" fixed="right" width="160">
<template slot-scope="scope">
@@ -356,6 +365,10 @@
label="到期时间" width="160">
</el-table-column>
<el-table-column
+ prop="createTime"
+ label="创建时间">
+ </el-table-column>
+ <el-table-column
prop="remark"
label="备注">
</el-table-column>
diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-md-list.html b/zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-md-list.html
index 9efa91b..bcf8afb 100644
--- a/zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-md-list.html
+++ b/zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-md-list.html
@@ -54,12 +54,10 @@
</div>
<div class="form-group mr-20">
<label for="staus">状态</label>
- <select class="form-control autoFull" name="staus" nullmsg="状态不能为空" dataType="*" id="staus"
- data-filed="name"
- data-value="name"
- th:data-url="@{/admin/dataDictionary/showDataDictionary}"
- data-param="{type:'项目状态'}">
- <option value=''>请选择项目状态</option>
+ <select class="form-control " name="staus" nullmsg="状态不能为空" dataType="*" id="staus">
+ <option value=''>全部</option>
+ <option value='上架' selected ="selected ">上架</option>
+ <option value=''>下架</option>
</select>
</div>
<div class="form-group mr-20">
diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-zb-list.html b/zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-zb-list.html
index b15b2d8..3283eb6 100644
--- a/zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-zb-list.html
+++ b/zq-erp/src/main/resources/templates/views/admin/hive/products/shoppinggoods-zb-list.html
@@ -55,12 +55,10 @@
</div>
<div class="form-group mr-20">
<label for="staus">状态</label>
- <select class="form-control autoFull" name="staus" nullmsg="状态不能为空" dataType="*" id="staus"
- data-filed="name"
- data-value="name"
- th:data-url="@{/admin/dataDictionary/showDataDictionary}"
- data-param="{type:'项目状态'}">
- <option value=''>请选择项目状态</option>
+ <select class="form-control " name="staus" nullmsg="状态不能为空" dataType="*" id="staus">
+ <option value=''>全部</option>
+ <option value='上架' selected ="selected ">上架</option>
+ <option value=''>下架</option>
</select>
</div>
<div class="form-group mr-20">
--
Gitblit v1.9.1