zq-erp/src/main/java/com/matrix/core/pojo/VerificationResult.java
@@ -22,6 +22,24 @@ } 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; zq-erp/src/main/java/com/matrix/system/common/validate/HDValidateResult.java
New file @@ -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; } } zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidate.java
New file @@ -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)); } } } zq-erp/src/main/java/com/matrix/system/common/validate/ParameterValidateFailNoFast.java
New file @@ -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)); } } } zq-erp/src/main/java/com/matrix/system/common/validate/beans/ErrorMessage.java
New file @@ -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; } } zq-erp/src/main/java/com/matrix/system/common/validate/group/Group.java
New file @@ -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{} } 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, "审核成功!"); zq-erp/src/main/java/com/matrix/system/hive/bean/ShoppingGoods.java
@@ -243,7 +243,7 @@ private Integer carMaxSaleCount; /** * 是一卡通吗 * 充值卡使用范围 是否所有产品 */ private String carIsAll; 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(); } zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java
New file @@ -0,0 +1,62 @@ /** * 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 lombok.Data; import javax.validation.constraints.NotNull; /** * @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 */ private Long carUseId; /** * 会员id */ @NotNull(groups = Group.ADD.class) private Long vipId; /** * 来源,购买,转让,赠送 */ @NotNull(groups = Group.ADD.class) private String source; /** * 订单明细id */ @NotNull(groups = Group.ADD.class) private Long orderItemId; /** * 充值卡的id */ @NotNull(groups = Group.ADD.class) private Long goodsId; /** * 备注 */ private String remark; } zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardPayDto.java
File was renamed from zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardChangeDto.java @@ -16,11 +16,11 @@ * @author: JiangYouYao * @className: MoneyCardChangeDto * @packageName: com.matrix.system.hive.dto * @description: 储值卡余额变更DTO * @description: 储值卡余额支付DTO * @data: 2022-03-11 10:24 **/ @Data public class MoneyCardChangeDto { public class MoneyCardPayDto { /** @@ -50,7 +50,7 @@ /** * 扣减次数 */ private Double count; private Integer count; /** * 操作人 */ zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java
New file @@ -0,0 +1,71 @@ package com.matrix.system.hive.dto; import com.matrix.system.hive.validation.ProjUseGroup; import io.swagger.models.auth.In; 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}) private Long goodsId; /** * 添加次数 */ @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.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}) private Long orderItemId; /** * 是否为赠送 */ @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class}) private boolean isFree; /** * 套餐折扣 * 设置折扣后,套餐下绑定的项目消耗金额会对应打折 * -- 套餐类型必传 */ @NotNull(groups = {ProjUseGroup.addTc.class}) private Double tcZk; /** * 所属套餐id * -- 添加套餐下的项目必传 */ private Long tcId; } zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java
@@ -2,7 +2,8 @@ import com.matrix.core.pojo.PaginationVO; import com.matrix.system.hive.bean.MoneyCardUse; import com.matrix.system.hive.dto.MoneyCardChangeDto; import com.matrix.system.hive.dto.MoneyCardOperationDto; import com.matrix.system.hive.dto.MoneyCardPayDto; import com.matrix.system.hive.plugin.util.BaseServices; import java.util.List; @@ -16,15 +17,20 @@ /** * 修改储值卡余额 */ void changeMoneyCard(List<MoneyCardChangeDto> moneyCardChangeDtoList); void changeMoneyCard(List<MoneyCardPayDto> moneyCardPayDtoList); /** * 新增MoneyCardUse * 新增用户储值卡 * @param moneyCardOperationDtos */ public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) ; /** * 新增MoneyCardUse */ public int add(MoneyCardUse moneyCardUse); /** zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java
@@ -116,11 +116,8 @@ 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); zq-erp/src/main/java/com/matrix/system/hive/service/SysOutStoreService.java
@@ -60,7 +60,12 @@ */ public SysOutStore findById(Long id); public int checkInfo(SysOutStore sysOutStore); /** * 出库单审核通过,并扣减库存 * @param sysOutStore * @return */ public int effectOutStore(SysOutStore sysOutStore); zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java
@@ -4,6 +4,7 @@ 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 +136,13 @@ */ public AjaxResult activeProj(SysProjUse proj); /** * 添加用户套餐和项目 * * @param projUseDtoList * @return */ public void addUserProjUse(List<ProjUseOperationDto> projUseDtoList) ; public int updateProjUseTck(SysProjUse projUse); zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
@@ -1,28 +1,36 @@ package com.matrix.system.hive.service.imp; import cn.hutool.core.bean.BeanUtil; 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.system.common.validate.ParameterValidate; import com.matrix.system.common.validate.group.Group; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; import com.matrix.system.hive.dto.MoneyCardChangeDto; import com.matrix.system.hive.dto.MoneyCardOperationDto; import com.matrix.system.hive.dto.MoneyCardPayDto; import com.matrix.system.hive.plugin.util.MoneyUtil; import com.matrix.system.hive.service.MoneyCardUseService; import com.matrix.system.hive.service.ShoppingGoodsService; import com.matrix.system.hive.validation.ProjUseGroup; 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 @@ -45,64 +53,176 @@ @Autowired MoneyCardAssembleDao moneyCardAssembleDao; @Autowired MoneyCardUseFlowDao moneyCardUseFlowDao; @Autowired private ShoppingGoodsService shoppingGoodsService; @Override public void changeMoneyCard(List<MoneyCardChangeDto> moneyCardChangeDtoList) { @Transactional(rollbackFor = Exception.class) public void addVipMoneyCard(List<MoneyCardOperationDto> moneyCardOperationDtos) { moneyCardOperationDtos.forEach(dto->{ //参数校验 ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(dto, Group.ADD.class); if (baseIdResult.hasErrors()) { throw new GlobleException(baseIdResult.getErrors()); } ShoppingGoods moneyCar = shoppingGoodsDao.selectById(dto.getGoodsId()); MoneyCardUse moneyCardUse = new MoneyCardUse(); BeanUtil.copyProperties(dto,moneyCardUse); moneyCardUse.setVipId(dto.getVipId()); moneyCardUse.setGiftMoney(moneyCar.getReferencePice()); moneyCardUse.setRealMoney(moneyCar.getSealPice()); moneyCardUse.setGoodsId(moneyCar.getId()); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N); // 判断商品是否在充值卡的限制购买,判断分类 moneyCardChangeDtoList.forEach(cardUse->{ VerificationResult verificationResult = checkIsBangding(cardUse, cardUse.getGoodsIds()); //余次处理 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(moneyCar, 1, null); moneyCardUse.setFailTime(invalidTime); moneyCardUseDao.insert(moneyCardUse); }); } @Override @Transactional(rollbackFor = Exception.class) public void changeMoneyCard(List<MoneyCardPayDto> moneyCardPayDtoList) { // 判断商品是否在充值卡的限制购买 moneyCardPayDtoList.forEach(cardUse -> { VerificationResult verificationResult = checkIsBangding(cardUse.getCarUseId(), cardUse.getGoodsIds()); if (!verificationResult.isJudgeResult()) { throw new GlobleException(verificationResult.getMsg()); } }); moneyCardChangeDtoList.get().forEach(item -> { if (!isInBangding(moneyCardUse, item.getGoodsId())) { throw new GlobleException(shoppingGoodsDao.selectById(item.getGoodsId()).getName() + "不在" + moneyCardUse.getCardName() + "优惠中"); moneyCardPayDtoList.forEach(moneyCardPayDto -> { MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(moneyCardPayDto.getCarUseId()); MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow(); if (Objects.nonNull(moneyCardPayDto.getGiftMoney()) && moneyCardPayDto.getGiftMoney()>0) { if (moneyCardUse.getGiftMoney() >= moneyCardPayDto.getGiftMoney()) { double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), moneyCardPayDto.getGiftMoney()); moneyCardUse.setGiftMoney(surplus); moneyCardUseFlow.setGiftMoney(0D - moneyCardPayDto.getGiftMoney()); } else { throw new GlobleException(moneyCardUse.getCardName() + "余额不足"); } } else { if (moneyCardUse.getRealMoney() >= moneyCardPayDto.getRealMoney()) { double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), moneyCardPayDto.getRealMoney()); moneyCardUse.setRealMoney(surplus); moneyCardUseFlow.setTotal(0 - moneyCardPayDto.getRealMoney()); } else { throw new GlobleException(moneyCardUse.getCardName() + "余额不足"); } } if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) { //余额为0时充值卡变为无效 if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) { moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX); } } ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId()); if (shoppingGoods != null) { Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime()); moneyCardUse.setFailTime(invalidTime); } moneyCardUse.setLastCount(moneyCardUse.getLastCount() - moneyCardPayDto.getCount()); // 更新充值卡信息 moneyCardUseDao.update(moneyCardUse); //设置卡项使用流水 moneyCardUseFlow.setCarUseId(moneyCardUse.getId()); moneyCardUseFlow.setOrderNo(moneyCardPayDto.getOrderNo()); moneyCardUseFlow.setVipId(moneyCardUse.getVipId()); moneyCardUseFlow.setTimes(-1); moneyCardUseFlow.setType(moneyCardPayDto.getType()); moneyCardUseFlow.setCreateTime(new Date()); moneyCardUseFlow.setOperationId(moneyCardPayDto.getUpdateUser()); moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney()); moneyCardUseFlowDao.insert(moneyCardUseFlow); }); } private VerificationResult checkIsBangding(MoneyCardChangeDto moneyCardUse, List<Long> goodsIds) { /** * 检查商品是否在储值卡的消费范围内 * @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 true; return VerificationResult.success(); } else { // 不是一卡通, // 判断卡是否可应用于所有产品 // 不是默认储值卡判断卡是否可应用于所有产品 ShoppingGoods cardGoods = shoppingGoodsDao.selectById(moneyCardUse.getGoodsId()); if (cardGoods != null) { if (Dictionary.FLAG_YES.equals(cardGoods.getCarIsAll())) { return true; if (Dictionary.FLAG_YES.equals(cardGoods.getGoodType())) { return VerificationResult.success(); } } // 比较分类 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; 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() + "优惠中 "); } } return flag; if (msgBuilder.length() > 0) { return VerificationResult.fail(msgBuilder.toString()); } else { return VerificationResult.success(); } } } @@ -276,7 +396,6 @@ .append(",是否赠送:" + getObj.getSourceName()); } } //设置为有效 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java
@@ -7,14 +7,33 @@ */ package com.matrix.system.hive.service.imp; import com.matrix.system.hive.bean.ShoppingGoods; import com.matrix.system.hive.bean.SysOrder; import com.matrix.system.hive.bean.SysOrderFlow; 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.LogUtil; 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.constance.Dictionary; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.ShoppingGoodsDao; import com.matrix.system.hive.dao.SysOrderFlowDao; import com.matrix.system.hive.dto.MoneyCardOperationDto; import com.matrix.system.hive.dto.MoneyCardPayDto; import com.matrix.system.hive.dto.ProjUseOperationDto; import com.matrix.system.hive.plugin.util.CollectionUtils; import com.matrix.system.hive.service.CodeService; import com.matrix.system.hive.service.MoneyCardUseService; import com.matrix.system.hive.service.SysProjUseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; import java.util.stream.Collectors; /** * @version: V1.0 @@ -29,6 +48,9 @@ @Autowired private SysProjUseService sysProjUseService; @Autowired private CodeService codeService; @@ -38,12 +60,21 @@ @Autowired private SysOrderFlowDao sysOrderFlowDao; @Autowired BusParameterSettingsDao busParameterSettingsDao; @Autowired MoneyCardUseService moneyCardUseService; /** * 创建支付流水 * * @author:姜友瑶 */ public void addOrderFlow(SysOrder sourceOrder) { public void addOrderFlow(SysOrder sourceOrder, boolean isBj) { LogUtil.info("创建支付流水 id={}", sourceOrder.getId()); //处理支付流水 int flowCount = 1; for (SysOrderFlow flow : sourceOrder.getFlows()) { @@ -61,7 +92,12 @@ flow.setAmount(flow.getAmount().negate()); flow.setOrderId(sourceOrder.getOldOrderId()); } else { flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY); if (isBj) {//jyytodo 优化不能根据isbj来判断流水类型 flow.setFlowType(SysOrderFlow.FLOW_TYPE_REPAY); } else { flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY); } flow.setOrderId(sourceOrder.getId()); } sysOrderFlowDao.insert(flow); @@ -70,4 +106,133 @@ } /** * 新增项目和套餐的余次 * * @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); } projUseOperationDto.setPayMoney(sysOrderItem.getZkPrice()); projUseOperationDto.setGoodsId(sysOrderItem.getGoodsId()); projUseOperationDto.setCount(sysOrderItem.getCount()); projUseOperationDto.setVipId(order.getVipId()); projUseOperationDto.setOrderItemId(sysOrderItem.getId()); 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<MoneyCardPayDto> moneyCardPayDtoList = Lists.newArrayList(); flows.forEach(flow -> { if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) { if (flow.getCardId() != null) { MoneyCardPayDto dto = new MoneyCardPayDto(); 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()); } else { dto.setRealMoney(flow.getAmount().doubleValue()); } dto.setUpdateUser(user.getSuId()); dto.setGoodsIds(goodsIds); moneyCardPayDtoList.add(dto); } else { throw new GlobleException("无效的储值卡支付方式"); } } }); if (CollectionUtils.isNotEmpty(moneyCardPayDtoList)) { LogUtil.info("扣除储值卡余额{}", JSON.toJSONString(moneyCardPayDtoList)); moneyCardUseService.changeMoneyCard(moneyCardPayDtoList); } } /** * @param sourceOrder 如果购买了充值卡设置会员的充值卡 * @author:姜友瑶 * @date 2016年9月19日 */ public void addMoneyCardUse(SysOrder sourceOrder) { 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(); moneyCardOperationDto.setVipId(sourceOrder.getVipId()); // 是否为赠送 if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) { moneyCardOperationDto.setSource(Dictionary.TAOCAN_SOURCE_ZS); } else { moneyCardOperationDto.setSource(Dictionary.TAOCAN_SOURCE_GM); } moneyCardOperationDto.setOrderItemId(sysOrderItem.getId()); moneyCardOperationDto.setGoodsId(sysOrderItem.getGoodsId()); moneyCardOperationDtos.add(moneyCardOperationDto); } } } if (CollUtil.isNotEmpty(moneyCardOperationDtos)) { moneyCardUseService.addVipMoneyCard(moneyCardOperationDtos); } } } zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -64,6 +64,8 @@ private SysOrderItemDao orderItemDao; @Autowired private SysProjUseDao sysProjUseDao; @Autowired private SysStoreInfoDao storeInfoDao; @Autowired @@ -143,64 +145,16 @@ @Autowired private SysOrderServiceHelper sysOrderServiceHelper; @Autowired private SysProjServicesService projServicesService; @Override public int add(SysOrder sysOrder) { return sysOrderDao.insert(sysOrder); } @Override public int modify(SysOrder sysOrder) { return sysOrderDao.update(sysOrder); } @Override public int remove(List<Long> list) { return sysOrderDao.deleteByIds(list); } @Override @Transactional public int removeById(Long id) { orderItemDao.deleteByOrderId(id); return sysOrderDao.deleteById(id); } @Override public List<SysOrder> findInPage(SysOrder sysOrder, PaginationVO pageVo) { if (pageVo != null) { pageVo.setSort("desc"); pageVo.setSort("orderTime"); } return sysOrderDao.selectInPage(sysOrder, pageVo); } @Autowired MoneyCardUseService moneyCardUseService; @Override public List<SysOrder> findByModel(SysOrder sysOrder) { return sysOrderDao.selectByModel(sysOrder); } @Override public int findTotal(SysOrder sysOrder) { return sysOrderDao.selectInPageCount(sysOrder); } @Override public SysOrder findById(Long id) { return sysOrderDao.selectById(id); } //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓业务代码区↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ @Override @Transactional(rollbackFor = Exception.class) @@ -317,7 +271,7 @@ sysOrderDao.update(order); //保存单据日志 operationLogService.saveOperation(order.getCompanyId(), order.getShopId(),sysUsers.getSuId(), operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(), OperationFunctionEnum.ORDER, OperationButtonEnum.CANCEL, order.getId(), @@ -422,7 +376,7 @@ order.setStatu(Dictionary.ORDER_STATU_YQX); sysOrderDao.update(order); //保存单据日志 operationLogService.saveOperation(order.getCompanyId(), order.getShopId(),sysUsers.getSuId(), operationLogService.saveOperation(order.getCompanyId(), order.getShopId(), sysUsers.getSuId(), OperationFunctionEnum.ORDER, OperationButtonEnum.CANCEL, order.getId(), @@ -430,7 +384,6 @@ order.getVipId(), "已付款取消订单"); } } @@ -536,13 +489,16 @@ sysVipInfoService.updateDealStatus(pageOrder.getVipId(), BooleanEnum.TRUE.getValue()); //添加支付流水 sysOrderServiceHelper.addOrderFlow(pageOrder); sysOrderServiceHelper.addOrderFlow(pageOrder,false); //扣除储值卡余额 sysOrderServiceHelper.cardPaySk(pageOrder); // 设置会员充值卡使用情况 addMoneyCardUse(pageOrder); sysOrderServiceHelper.addMoneyCardUse(pageOrder); // 改变客户项目套餐使用情况 addTaocanProj(pageOrder); sysOrderServiceHelper.addTaocanProj(pageOrder); // 新增出库单 addOutStore(pageOrder); @@ -550,7 +506,6 @@ // 设置业绩 achieveNewService.addAchaeveByOrder(pageOrder); setShopSelCount(pageOrder); //设置会员积分 addVipScore(pageOrder); @@ -563,6 +518,7 @@ /** * 保存订单收款日志 * * @param pageOrder */ private void saveOrderSkLog(SysOrder pageOrder) { @@ -582,7 +538,7 @@ * @param pageOrder */ private void updateOrderInfo(SysOrder pageOrder) { LogUtil.info("付款更新订单信息 id={}",pageOrder.getId()); SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); pageOrder.setCashierId(user.getSuId()); @@ -635,17 +591,17 @@ GoodsSealLimitDto goodsSealLimitDto = new GoodsSealLimitDto(); goodsSealLimitDto.setVipId(pageOrder.getVipId()); goodsSealLimitDto.setSysOrderItemDtoList(Lists.newArrayList()); pageOrder.getItems().forEach(e->{ pageOrder.getItems().forEach(e -> { goodsSealLimitDto.getSysOrderItemDtoList().add(BeanUtil.copyProperties(e, SysOrderItemDto.class)); }); shoppingGoodsService.checkGoodsSealLimit(goodsSealLimitDto); //检查业绩设置 checkOrderAchieve(pageOrder); LogUtil.info("订单满足支付条件 id={}",pageOrder.getId()); } /** @@ -680,11 +636,8 @@ } /** * 设置会员消费积分 * * @param pageOrder */ private void addVipScore(SysOrder pageOrder) { @@ -838,215 +791,10 @@ /** * 验证商品是否达到最大发卡限制 * * @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日 */ @@ -1055,50 +803,32 @@ public void updateAfterMoney(SysOrder pageOrder) { SysOrder sourceOrder = sysOrderDao.selectById(pageOrder.getId()); int i = 1; //添加支付流水 sysOrderServiceHelper.addOrderFlow(pageOrder,true); //扣除储值卡余额 sysOrderServiceHelper.cardPaySk(pageOrder); 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); } cardPayTotal += flow.getAmount().doubleValue(); } 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 { }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); @@ -1223,237 +953,11 @@ } /** * 新增项目和套餐的余次 * * @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; } } /** @@ -1544,7 +1048,7 @@ order.setFlows(czVo.getFlows()); sysOrderServiceHelper.addOrderFlow(order); sysOrderServiceHelper.addOrderFlow(order,false); // 添加员工业绩 achieveNewService.addAchaeveByOrder(order); @@ -1638,7 +1142,7 @@ // 添加订单收款流水 sysOrderServiceHelper.addOrderFlow(sysOrder); sysOrderServiceHelper.addOrderFlow(sysOrder,false); //退款退套餐退项目 refundProjUse(sysOrder); //删除积分 @@ -1657,38 +1161,6 @@ } 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); @@ -1886,4 +1358,63 @@ public BigDecimal findVipArrearsByVipId(Long vipId) { return sysOrderDao.selectArrearsByVipId(vipId); } //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓===增删改查代码区↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ @Override public int add(SysOrder sysOrder) { return sysOrderDao.insert(sysOrder); } @Override public int modify(SysOrder sysOrder) { return sysOrderDao.update(sysOrder); } @Override public int remove(List<Long> list) { return sysOrderDao.deleteByIds(list); } @Override @Transactional public int removeById(Long id) { orderItemDao.deleteByOrderId(id); return sysOrderDao.deleteById(id); } @Override public List<SysOrder> findInPage(SysOrder sysOrder, PaginationVO pageVo) { if (pageVo != null) { pageVo.setSort("desc"); pageVo.setSort("orderTime"); } return sysOrderDao.selectInPage(sysOrder, pageVo); } @Override public List<SysOrder> findByModel(SysOrder sysOrder) { return sysOrderDao.selectByModel(sysOrder); } @Override public int findTotal(SysOrder sysOrder) { return sysOrderDao.selectInPageCount(sysOrder); } @Override public SysOrder findById(Long id) { return sysOrderDao.selectById(id); } } zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOutStoreServiceImpl.java
@@ -143,8 +143,14 @@ } @Override public int checkInfo(SysOutStore sysOutStore) { 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) { zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
@@ -1,5 +1,6 @@ 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; @@ -7,11 +8,18 @@ import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.WebUtil; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.common.validate.ParameterValidate; import com.matrix.system.common.validate.group.Group; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; import com.matrix.system.hive.dto.ProjUseOperationDto; import com.matrix.system.hive.plugin.util.MoneyUtil; import com.matrix.system.hive.service.ShoppingGoodsService; import com.matrix.system.hive.service.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; @@ -19,6 +27,9 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; /** * @date 2016-07-03 20:53 @@ -28,7 +39,8 @@ @Autowired private SysProjUseDao sysProjUseDao; @Autowired SysProjServicesService projServicesService; @Autowired private SysProjuseFreezeDao sysProjuseFreezeDao; @@ -49,6 +61,11 @@ @Autowired SysVipInfoDao sysVipInfoDao; @Autowired ShoppingGoodsService shoppingGoodsService; @Autowired BusParameterSettingsDao busParameterSettingsDao; @Override public int add(SysProjUse sysProjUse) { @@ -60,7 +77,6 @@ @Override public int modify(SysProjUse sysProjUse) { //插入套餐项目操作记录 return sysProjUseDao.update(sysProjUse); @@ -221,7 +237,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 +248,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 +289,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("人工修改"); @@ -364,7 +380,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 +394,6 @@ return i; } /*********************以下为项目使用情况操作***********************/ @@ -468,7 +482,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 +492,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 +529,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 +542,6 @@ sysProjUseDao.insertFlow(useFlow); return sysProjUseDao.update(sysProjUse); } /** @@ -574,7 +586,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("人工修改"); @@ -590,6 +602,151 @@ } /** * 添加用户套餐 * * @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) { ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.addTc.class); if (baseIdResult.hasErrors()) { throw new GlobleException(baseIdResult.getErrors()); } //新建套餐 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()); 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) { ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.addProject.class); if (baseIdResult.hasErrors()) { throw new GlobleException(baseIdResult.getErrors()); } 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 public int updateProjUseTck(SysProjUse projUse) { zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java
New file @@ -0,0 +1,19 @@ package com.matrix.system.hive.validation; public interface ProjUseGroup { /** * 新增会员项目 */ interface addProject { } /** * 新增会员套餐 */ interface addTc { } } zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/OrderTask.java
@@ -15,6 +15,7 @@ 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; @@ -87,6 +88,10 @@ @Autowired private ShopSalesmanGradeDao shopSalesmanGradeDao; @Autowired private SysOrderServiceHelper sysOrderServiceHelper; @Transactional(rollbackFor = Exception.class) public void synchronizationOrderToErp(ShopOrder orderDto) { @@ -201,10 +206,10 @@ SysOrder sourceOrder = sysOrderDao.selectById(order.getId()); sourceOrder.setItems(orderItemDao.selectByOrderId(order.getId())); // 设置会员充值卡使用情况 orderService.addMoneyCardUse(sourceOrder); sysOrderServiceHelper.addMoneyCardUse(sourceOrder); // 改变客户项目套餐使用情况 orderService.addTaocanProj(sourceOrder); sysOrderServiceHelper.addTaocanProj(sourceOrder); // 设置销量 orderService.setShopSelCount(sourceOrder); 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>