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