From 64b5d1677272a375e6b8ac56f475f462d05723a0 Mon Sep 17 00:00:00 2001 From: JiangYouYao <ak473600000> Date: Fri, 18 Mar 2022 16:46:06 +0800 Subject: [PATCH] 重构:订单取消逻辑 --- zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java | 8 zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java | 2 zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java | 2 zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java | 5 zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java | 37 ++++- zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java | 2 zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java | 3 zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java | 10 zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml | 5 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 153 ++++++--------------- zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java | 2 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java | 47 ++++++ zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java | 105 ++++++++++++++ zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java | 23 +++ zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java | 12 + 15 files changed, 286 insertions(+), 130 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java index 2f6ffce..fa7bb7d 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java @@ -180,7 +180,7 @@ } } } - orderService.refundOrderMoney(sysOrder); + orderService.orderTk(sysOrder); //处理用户购买的产品 return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单退款成功"); } diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java index 15deb13..55d7d89 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUseFlow.java @@ -15,6 +15,8 @@ public static final String USE_TYPE_ORDRE_CANCEL = "取消订单"; + public static final String USE_TYPE_ORDRE_TK = "订单退款"; + public static final String USE_TYPE_CZ = "会员充值"; public static final String USE_TYPE_CARD_MODIFY = "会员卡调整"; diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java index 0168346..21df84b 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysProjUseDao.java @@ -138,4 +138,6 @@ int selectTaocanCountForCourseAndInfinite(@Param("taocanId") Long taocanId, @Param("vipId") Long vipId); int selectUseCountByOrderItemId(Long orderItemId); + + List<SysProjUse> selectByOrderItemId(Long orderItemId); } \ No newline at end of file diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java b/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java index 9b5b356..6d0040d 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/dto/MoneyCardOperationDto.java @@ -8,6 +8,7 @@ package com.matrix.system.hive.dto; import com.matrix.system.common.validate.group.Group; +import com.matrix.system.hive.validation.MoneyCardUseGroup; import lombok.Data; import javax.validation.constraints.NotNull; @@ -43,9 +44,30 @@ * 订单明细id */ @NotNull(groups = Group.ADD.class) + @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class) private Long orderItemId; + /** + * 操作类型 + */ + @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class) + private String type; + /** + * 操作人 + */ + @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class) + private Long updateUser; + /** + * 订单id + */ + @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class) + private Long orderId; + /** + * 订单编号 + */ + @NotNull(groups = MoneyCardUseGroup.moneyCardUseTk.class) + private String orderNo; /** * 充值卡的id */ @@ -53,6 +75,7 @@ private Long goodsId; + /** * 备注 */ diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java b/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java index 7c7ddec..ef6e04d 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/dto/ProjUseOperationDto.java @@ -1,7 +1,6 @@ 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; @@ -15,19 +14,19 @@ /** * 客户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}) + @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class, ProjUseGroup.projectTk.class}) private Long goodsId; /** * 添加次数 */ - @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class}) + @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class, ProjUseGroup.projectTk.class}) private Integer count; /** @@ -44,7 +43,7 @@ /** * 订单明细id */ - @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class}) + @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class, ProjUseGroup.projectTk.class}) private Long orderItemId; /** @@ -53,6 +52,7 @@ @NotNull(groups = {ProjUseGroup.addProject.class, ProjUseGroup.addTc.class}) private boolean isFree; + /** * 套餐折扣 * 设置折扣后,套餐下绑定的项目消耗金额会对应打折 diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java index ed99cd5..2bea8f2 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java @@ -5,7 +5,6 @@ import com.matrix.system.hive.dto.MoneyCardOperationDto; import com.matrix.system.hive.dto.MoneyCardPayDto; import com.matrix.system.hive.plugin.util.BaseServices; -import com.matrix.system.hive.pojo.CzXkVo; import java.util.List; @@ -137,5 +136,10 @@ */ void deleteByOrderItemId(Long id); - void vipCardRecharge(CzXkVo czVo); + + /** + * 储值卡退款 + * @param id + */ + void moneyCardTk(List<MoneyCardOperationDto> moneyCardOperationDtos); } \ No newline at end of file diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java index 42f6e71..3b8db13 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java @@ -82,7 +82,7 @@ */ public void payOrder(SysOrder sysOrder) throws GlobleException; - public void refundOrderMoney(SysOrder sysOrder); + public void orderTk(SysOrder sysOrder); /** * 补交 diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java index ce768cf..c90e46d 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java @@ -143,6 +143,9 @@ */ public void addUserProjUse(List<ProjUseOperationDto> projUseDtoList) ; + + public void projectTk(List<ProjUseOperationDto> projUseDtoList); + public int updateProjUseTck(SysProjUse projUse); diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java index 5a7e799..0e0cf8b 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java @@ -16,7 +16,6 @@ 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.pojo.CzXkVo; import com.matrix.system.hive.service.MoneyCardUseService; import com.matrix.system.hive.service.ShoppingGoodsService; import org.springframework.beans.factory.annotation.Autowired; @@ -112,16 +111,36 @@ @Override - public void vipCardRecharge(CzXkVo czVo) { - MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId()); + public void moneyCardTk(List<MoneyCardOperationDto> moneyCardOperationDtos) { - MoneyCardPayDto moneyCardPayDto=new MoneyCardPayDto(); + MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow(); - moneyCardPayDto.setRealMoney(MoneyUtil.add(cardUser.getRealMoney(), czVo.getBjmoney())); - moneyCardPayDto.setGiftMoney(MoneyUtil.add(cardUser.getGiftMoney(), czVo.getGiftMoney())); - moneyCardPayDto.setCarUseId(cardUser.getId()); - moneyCardPayDto.setOrderId(); - moneyCardUseDao.update(cardUser); + moneyCardOperationDtos.forEach(moneyCardOperationDto -> { + + List<MoneyCardUse> moneyCardUseList = list(lambdaQuery().eq(MoneyCardUse::getOrderItemId, moneyCardOperationDto.getOrderItemId())); + for (MoneyCardUse moneyCardUse : moneyCardUseList) { + + moneyCardUse.setStatus(Dictionary.TAOCAN_STATUS_TK); + 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); + } + + }); + + + + } @Override diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java index b403130..2049a70 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceHelper.java @@ -614,6 +614,7 @@ Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount())); zkTotal = MoneyUtil.add(zkTotal, itemZkTotal); item.setStatus(Dictionary.ORDER_STATU_DFK); + item.setRefundCount(0); } SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); @@ -624,6 +625,7 @@ sysOrder.setCompanyId(user.getCompanyId()); sysOrder.setOrderTime(new Date()); sysOrder.setOrderType(SysOrder.ORDER_TYPE_SEAL); + //新增订单 sysOrder.setOrderNo(codeService.getOrderCode()); @@ -717,5 +719,50 @@ return order; } + /** + * 创建退款订单 + * @return + */ + public SysOrder createTkOrder(SysOrder sysOrder){ + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + + //原订单设置为退款状态 + SysOrder sourceOrder = new SysOrder(); + sourceOrder.setId(sysOrder.getOldOrderId()); + sourceOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_Y); + sysOrderDao.update(sourceOrder); + + sysOrder.setId(null); + sysOrder.setStaffId(user.getSuId()); + sysOrder.setCompanyId(user.getCompanyId()); + sysOrder.setShopId(user.getShopId()); + sysOrder.setOrderType(SysOrder.ORDER_TYPE_REFUND); + sysOrder.setStatu(Dictionary.ORDER_STATU_YFK); + Date now = new Date(); + sysOrder.setOrderTime(now); + sysOrder.setPayTime(now); + sysOrder.setOrderNo(codeService.getRefundOrderNo()); + sysOrder.setZkTotal(-sysOrder.getZkTotal()); + //新增订单 + sysOrderDao.insert(sysOrder); + //插入明细 + for (SysOrderItem item : sysOrder.getItems()) { + + //更新原订单明细的可退数量 + SysOrderItem oldItem = orderItemDao.selectById(item.getId()); + if((oldItem.getRefundCount()+item.getCount()) <= oldItem.getCount()){ + oldItem.setRefundCount(oldItem.getRefundCount()+item.getCount()); + orderItemDao.update(oldItem); + }else{ + throw new GlobleException("退款数量大于购买数量"); + } + //插入新的订单明细 + item.setCount(-item.getCount()); + item.setOrderId(sysOrder.getId()); + orderItemDao.insert(item); + } + LogUtil.info("创建退款订单:{} " , JSON.toJSONString(sysOrder) ) ; + return sysOrder; + } } \ No newline at end of file diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java index bd48315..1ad0f78 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java @@ -1,7 +1,9 @@ package com.matrix.system.hive.service.imp; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import com.matrix.component.asyncmessage.AsyncMessageManager; import com.matrix.core.constance.MatrixConstance; @@ -11,7 +13,6 @@ import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.dto.OrderListDto; -import com.matrix.system.app.mapper.SysProjUseMapper; import com.matrix.system.app.vo.OrderDetailAchieveItemVo; import com.matrix.system.app.vo.OrderDetailItemVo; import com.matrix.system.app.vo.OrderDetailVo; @@ -28,9 +29,7 @@ import com.matrix.system.enums.OperationFunctionEnum; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; -import com.matrix.system.hive.dto.GoodsSealLimitDto; -import com.matrix.system.hive.dto.MoneyCardPayDto; -import com.matrix.system.hive.dto.SysOrderItemDto; +import com.matrix.system.hive.dto.*; import com.matrix.system.hive.plugin.util.CollectionUtils; import com.matrix.system.hive.plugin.util.MoneyUtil; import com.matrix.system.hive.pojo.CzXkVo; @@ -153,7 +152,7 @@ if (Objects.isNull(sysOrder.getId())) { LogUtil.info("新增正向订单"); - return sysOrderServiceHelper.saveOrder(sysOrder,SysOrder.ORDER_TYPE_SEAL); + return sysOrderServiceHelper.saveOrder(sysOrder); } else { LogUtil.info("修改订单"); return sysOrderServiceHelper.modifyOrder(sysOrder); @@ -185,6 +184,7 @@ /** * 已付款订单取消 + * * @param order */ private void cancelYFKOrder(SysOrder order) { @@ -247,6 +247,7 @@ /** * 待付款订单取消 + * * @param order */ private void cancelDFKOrder(SysOrder order) { @@ -376,6 +377,7 @@ /** * 检查订单是否满足支付条件 + * * @param pageOrder */ private void checkOrderAblePay(SysOrder pageOrder) { @@ -489,11 +491,11 @@ public SysOrder moneyCardCz(CzXkVo czVo) { // 新增一个充值订单 - SysOrder order =sysOrderServiceHelper.createCzOrder(czVo); + SysOrder order = sysOrderServiceHelper.createCzOrder(czVo); //新增会员卡金额 MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId()); - MoneyCardPayDto moneyCardPayDto=new MoneyCardPayDto(); + MoneyCardPayDto moneyCardPayDto = new MoneyCardPayDto(); moneyCardPayDto.setRealMoney(MoneyUtil.add(cardUser.getRealMoney(), czVo.getBjmoney())); moneyCardPayDto.setGiftMoney(MoneyUtil.add(cardUser.getGiftMoney(), czVo.getGiftMoney())); moneyCardPayDto.setCarUseId(cardUser.getId()); @@ -559,46 +561,14 @@ return sysOrderDao.selectShopAchieveRanking(sysOrder); } + @Transactional(rollbackFor = Exception.class) @Override - public void refundOrderMoney(SysOrder sysOrder) { - SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + public void orderTk(SysOrder sysOrder) { - //原订单设置为退款状态 - SysOrder sourceOrder = new SysOrder(); - sourceOrder.setId(sysOrder.getOldOrderId()); - sourceOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_Y); - sysOrderDao.update(sourceOrder); SysOrder oldOrder = sysOrderDao.selectById(sysOrder.getOldOrderId()); - - sysOrder.setId(null); - sysOrder.setStaffId(user.getSuId()); - sysOrder.setCompanyId(user.getCompanyId()); - sysOrder.setShopId(user.getShopId()); - sysOrder.setOrderType(SysOrder.ORDER_TYPE_REFUND); - sysOrder.setStatu(Dictionary.ORDER_STATU_YFK); - Date now = new Date(); - sysOrder.setOrderTime(now); - sysOrder.setPayTime(now); - sysOrder.setOrderNo(codeService.getRefundOrderNo()); - sysOrder.setZkTotal(-sysOrder.getZkTotal()); - //新增订单 - sysOrderDao.insert(sysOrder); - //插入明细 - for (SysOrderItem item : sysOrder.getItems()) { - - //更新原订单明细的可退数量 - SysOrderItem oldItem = new SysOrderItem(); - oldItem.setId(item.getId()); - oldItem.setRefundCount(item.getCount()); - orderItemDao.update(oldItem); - - //插入新的订单明细 - item.setId(null); - item.setCount(-item.getCount()); - item.setOrderId(sysOrder.getId()); - orderItemDao.insert(item); - } + //创建并保存退款订单 + sysOrder = sysOrderServiceHelper.createTkOrder(sysOrder); // 添加订单收款流水 sysOrderServiceHelper.addOrderFlow(sysOrder, false); //退款退套餐退项目 @@ -618,95 +588,66 @@ sysOrder.getVipId()); } + /** * 退款退项目,套餐,卡项 * * @param sysOrder */ private void refundProjUse(SysOrder sysOrder) { + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); //记录需要退库存的产品 List<SysOrderItem> returnGoodsList = new ArrayList<>(); + //需要退的套餐和项目 + List<ProjUseOperationDto> projUseDtoList = Lists.newArrayList(); + //需要退的储值卡 + List<MoneyCardOperationDto> moneyCardOperationDtos = Lists.newArrayList(); for (SysOrderItem item : sysOrder.getItems()) { - SysProjUse queryProjUse = new SysProjUse(); - queryProjUse.setOrderItemId(item.getOldItemId()); - // 修改项目信息 - if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType()) || Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) { + if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType()) && Dictionary.FLAG_YES_Y.equals(item.getIsReturnStore())) { - if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) { - if (Dictionary.FLAG_YES_Y.equals(item.getIsReturnStore())) { - returnGoodsList.add(item); - } - } else { - SysProjUse sysProjUse = sysProjUseDao.selectByModel(queryProjUse).get(0); + returnGoodsList.add(item); - int sub = sysProjUse.getSurplusCount() - item.getCount(); - if (sub < 0) { - throw new GlobleException("项目余次不足"); - } else if (sub == 0) { - sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); - sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); - } - sysProjUse.setSurplusCount(sub); - sysProjUseDao.update(sysProjUse); - SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse); - sysProjUseFlow.setOptionType("退款修改"); - sysProjUseFlow.setId(null); - sysProjUseFlow.setUpdateBy(user.getSuName()); - sysProjUseFlow.setCreateBy(user.getSuName()); - sysProjUseDao.insertFlow(sysProjUseFlow); - } + } else if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(item.getType()) + || Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType())) { + ProjUseOperationDto dto = new ProjUseOperationDto(); + dto.setGoodsId(item.getGoodsId()); + dto.setCount(item.getCount()); + dto.setOrderItemId(item.getOldItemId()); + projUseDtoList.add(dto); + + }else if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(item.getType())) { + MoneyCardOperationDto moneyCardOperationDto = new MoneyCardOperationDto(); + moneyCardOperationDto.setOrderId(sysOrder.getId()); + moneyCardOperationDto.setOrderItemId(item.getOldItemId()); + moneyCardOperationDto.setType(MoneyCardUseFlow.USE_TYPE_ORDRE_CANCEL); + moneyCardOperationDto.setUpdateUser(user.getSuId()); + moneyCardOperationDto.setOrderNo(sysOrder.getOrderNo()); + moneyCardOperationDtos.add(moneyCardOperationDto); } - - if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(item.getType())) { - queryProjUse.setTaocanId(-1L); - List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(queryProjUse); - - - for (int i = 0; i < sysProjUses.size(); i++) { - - SysProjUse sysProjUse = sysProjUses.get(i); - sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); - sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); - sysProjUseDao.update(sysProjUse); - SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse); - sysProjUseFlow.setOptionType("退款修改"); - sysProjUseFlow.setId(null); - sysProjUseFlow.setUpdateBy(user.getSuName()); - sysProjUseFlow.setCreateBy(user.getSuName()); - sysProjUseDao.insertFlow(sysProjUseFlow); - } - } - - if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(item.getType())) { - MoneyCardUse queryCardUse = new MoneyCardUse(); - queryCardUse.setStatus(Dictionary.TAOCAN_STATUS_YX); - queryCardUse.setOrderItemId(item.getOldItemId()); - - List<MoneyCardUse> moneyCardUses = moneyCardUseDao.selectByModel(queryCardUse); - for (int i = 0; i < item.getCount(); i++) { - MoneyCardUse moneyCardUse = moneyCardUses.get(i); - moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); - moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX); - moneyCardUseDao.update(moneyCardUse); - } - } - ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId()); - goods.setRealSealCount(goods.getRealSealCount() - item.getCount()); - shoppingGoodsDao.update(goods); } BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, sysOrder.getCompanyId()); if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) { // 家居产品退库存 if (CollectionUtils.isNotEmpty(returnGoodsList)) { + LogUtil.info("订单退款:退产品库存:{}", JSON.toJSONString(returnGoodsList)); refundInstore(returnGoodsList); } } + if(CollUtil.isNotEmpty(projUseDtoList)){ + LogUtil.info("订单退款:退套餐项目:{}", JSON.toJSONString(projUseDtoList)); + sysProjUseService.projectTk(projUseDtoList); + } + + if(CollUtil.isNotEmpty(moneyCardOperationDtos)){ + LogUtil.info("订单退款:储值卡:{}", JSON.toJSONString(moneyCardOperationDtos)); + moneyCardUseService.moneyCardTk(moneyCardOperationDtos); + } } /** diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java index b3f85c7..d5d7b6a 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java @@ -7,6 +7,7 @@ import com.matrix.core.pojo.PaginationVO; import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.WebUtil; +import com.matrix.system.app.mapper.SysProjUseMapper; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.common.validate.ParameterValidate; @@ -24,10 +25,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -606,6 +604,105 @@ /** + * 项目套餐退款 + * @param projUseDtoList + */ + @Override + public void projectTk(List<ProjUseOperationDto> projUseDtoList) { + + List<ShoppingGoods> shoppingGoodsList = shoppingGoodsDao.selectByIds(projUseDtoList.stream().map(ProjUseOperationDto::getGoodsId).collect(Collectors.toList())); + Map<Long, ShoppingGoods> shoppingGoodsMap = shoppingGoodsList.stream().collect(Collectors.toMap(ShoppingGoods::getId, Function.identity())); + + + projUseDtoList.forEach(projUseOperationDto -> { + + //校验参数 + ParameterValidate.ValidResult baseIdResult = ParameterValidate.validateBean(projUseOperationDto, ProjUseGroup.projectTk.class); + if (baseIdResult.hasErrors()) { + throw new GlobleException(baseIdResult.getErrors()); + } + + ShoppingGoods shoppingGoods = shoppingGoodsMap.get(projUseOperationDto.getGoodsId()); + if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(shoppingGoods.getGoodType())) { + + doProjectTk(projUseOperationDto); + + } else if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(shoppingGoods.getGoodType())) { + + taocanTk(projUseOperationDto); + } + + + + }); + } + + /** + * 套餐退款 + * @param projUseOperationDto + */ + private void taocanTk(ProjUseOperationDto projUseOperationDto) { + + List<SysProjUse> projUseList = sysProjUseDao.selectByOrderItemId(projUseOperationDto.getOrderItemId()); + List<SysProjUse> tcList = projUseList.stream().filter(item -> Objects.isNull(item.getTaocanId()) && item.getStatus().equals(Dictionary.TAOCAN_STATUS_YX) ).collect(Collectors.toList()); + + if (tcList.size() < projUseOperationDto.getCount()) { + throw new GlobleException("套餐余次不足"); + } + for (int i = 0; i < tcList.size(); i++) { + SysProjUse sysProjUse = tcList.get(i); + setInvalid(sysProjUse); + //设置套餐下的项目无效 + projUseList.stream().filter(item->item.getTaocanId().equals(sysProjUse.getId())).collect(Collectors.toList()) + .forEach(item->setInvalid(item)); + } + + } + + private void setInvalid(SysProjUse sysProjUse) { + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); + sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); + 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); + } + + /** + * 项目退款 + * @param projUseOperationDto + */ + 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); + int sub = sysProjUse.getSurplusCount() - projUseOperationDto.getCount(); + if (sub < 0) { + throw new GlobleException("项目余次不足"); + } else if (sub == 0) { + sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); + sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); + } + 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); + }else{ + throw new GlobleException("查询项目余次异常"); + } + } + + /** * 添加用户套餐 * * @param projUseDtoList diff --git a/zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java b/zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java new file mode 100644 index 0000000..bb8b3b0 --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/hive/validation/MoneyCardUseGroup.java @@ -0,0 +1,12 @@ +package com.matrix.system.hive.validation; + +public interface MoneyCardUseGroup { + + + /** + * 退款 + */ + interface moneyCardUseTk { + } + +} diff --git a/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java b/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java index 0026bc0..6f3cf37 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/validation/ProjUseGroup.java @@ -15,5 +15,10 @@ } + /** + * 退款扣减次数 + */ + interface projectTk { + } } diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml index c0d8efd..a925e17 100644 --- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml +++ b/zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml @@ -65,7 +65,6 @@ create_time, update_by, update_time, - id, proj_use_id, surplus_count, is_over, @@ -82,7 +81,6 @@ now(), #{updateBy}, now(), - #{id}, #{projUseId}, #{surplusCount}, #{isOver}, @@ -956,4 +954,7 @@ where b.ORDER_ITEM_ID=#{orderItemId} and c.STATE !='预约取消'; </select> + <select id="selectByOrderItemId" resultType="com.matrix.system.hive.bean.SysProjUse"> + select * from sys_proj_use where ORDER_ITEM_ID =#{orderItemId} + </select> </mapper> \ No newline at end of file -- Gitblit v1.9.1