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