From 65ad99e0a5e47c2cfcfd9ceade7dc6f2b83bcbd2 Mon Sep 17 00:00:00 2001
From: jiaosong <jiaosong6760@dingtalk.com>
Date: 星期三, 11 十月 2023 16:38:54 +0800
Subject: [PATCH] #pgsql 订单退款 结算退款 未消费结算
---
server/platform/src/main/java/com/doumee/task/ScheduleTool.java | 21 ++++
server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java | 2
server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java | 25 ++++++
server/services/src/main/java/com/doumee/dao/business/web/request/GoodsorderBackDTO.java | 21 +++++
server/services/src/main/java/com/doumee/service/business/GoodsorderService.java | 8 ++
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 8 +-
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 134 +++++++++++++++++++++++++++------
server/services/src/main/java/com/doumee/dao/business/web/response/MiniProgrammeDTO.java | 2
server/services/src/main/java/com/doumee/service/business/impl/RentSiteServiceImpl.java | 2
9 files changed, 190 insertions(+), 33 deletions(-)
diff --git a/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java b/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java
index 221c6ed..238304a 100644
--- a/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java
@@ -11,6 +11,7 @@
import com.doumee.dao.business.model.WxBillDetail;
import com.doumee.dao.business.vo.GoodsorderExportVO;
import com.doumee.dao.business.vo.GoodsorderTotalDataVO;
+import com.doumee.dao.business.web.request.GoodsorderBackDTO;
import com.doumee.dao.business.web.response.GoodsorderDetailDTO;
import com.doumee.service.business.GoodsorderService;
import com.doumee.service.business.GoodsorderService;
@@ -21,6 +22,7 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@@ -113,4 +115,27 @@
public ApiResponse<GoodsorderDetailDTO> findById(@PathVariable String id) {
return ApiResponse.success(goodsorderService.getGoodsorderDetailDTO(id));
}
+
+
+ /**
+ * 寮哄埗缁撶畻璁㈠崟
+ * @param id
+ * @return
+ */
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @PostMapping("/closerGoodsorder")
+ @RequiresPermissions("business:goodsorder:query")
+ public ApiResponse closerGoodsorder(@RequestParam String id){
+ goodsorderService.closerGoodsorder(id);
+ return ApiResponse.success(null);
+ }
+
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @PostMapping("/backGoodsorder")
+ @RequiresPermissions("business:goodsorder:query")
+ public ApiResponse backGoodsorder(@RequestBody GoodsorderBackDTO goodsorderBackDTO){
+ goodsorderService.backGoodsorder(goodsorderBackDTO.getOrderId(),goodsorderBackDTO.getMoney());
+ return ApiResponse.success(null);
+ }
}
diff --git a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
index 84637d1..fe11644 100644
--- a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
+++ b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -2,14 +2,19 @@
import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.model.Goodsorder;
+import com.doumee.service.business.GoodsorderService;
import com.doumee.service.business.WxBillService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
import java.util.Date;
+import java.util.List;
/**
* 瀹氭椂浠诲姟
@@ -25,9 +30,12 @@
@Autowired
private SystemDictDataBiz systemDictDataBiz;
+
@Autowired
private WxBillService wxBillService;
+ @Autowired
+ private GoodsorderService goodsorderService;
/**
* @throws Exception
*/
@@ -44,8 +52,17 @@
*/
// @Scheduled(fixedDelay = 1000*60)
public void getYesterdayBill() throws Exception {
- Date ydate = DateUtil.addDaysToDate(new Date(), -1);
- wxBillService.getWxBill(ydate);
+
+ Goodsorder goodsorder = new Goodsorder();
+ goodsorder.setIsdeleted(Constants.ZERO);
+ goodsorder.setStatus(Constants.goodsorderStatus.pay);
+ List<Goodsorder> list = goodsorderService.findList(goodsorder);
+ if (!CollectionUtils.isEmpty(list)){
+ list.forEach(s->{
+ goodsorderService.closerGoodsorder(s.getId());
+ });
+
+ }
}
}
diff --git a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java b/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
index aee7901..cc42954 100644
--- a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
+++ b/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
@@ -20,7 +20,7 @@
public void connectionLost(Throwable cause) {
// 杩炴帴涓㈠け鍚庯紝涓�鑸湪杩欓噷闈㈣繘琛岄噸杩�
- System.out.println("杩炴帴鏂紑锛屽彲浠ュ仛閲嶈繛");
+// System.out.println("杩炴帴鏂紑锛屽彲浠ュ仛閲嶈繛");
}
@Override
diff --git a/server/services/src/main/java/com/doumee/dao/business/web/request/GoodsorderBackDTO.java b/server/services/src/main/java/com/doumee/dao/business/web/request/GoodsorderBackDTO.java
new file mode 100644
index 0000000..4f2da98
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/web/request/GoodsorderBackDTO.java
@@ -0,0 +1,21 @@
+package com.doumee.dao.business.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+/**
+ * @author T14
+ */
+@Data
+@ApiModel("閫�娆捐姹�")
+public class GoodsorderBackDTO {
+
+
+ @ApiModelProperty(value = "璁㈠崟id")
+ private String orderId;
+
+ @ApiModelProperty(value = "閫�娆鹃噾棰�")
+ private BigDecimal money;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/web/response/MiniProgrammeDTO.java b/server/services/src/main/java/com/doumee/dao/business/web/response/MiniProgrammeDTO.java
index 36fabe4..3137788 100644
--- a/server/services/src/main/java/com/doumee/dao/business/web/response/MiniProgrammeDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/business/web/response/MiniProgrammeDTO.java
@@ -4,6 +4,7 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -13,6 +14,7 @@
* @author T14
*/
@Data
+@ApiModel("楠戣璁板綍杩斿洖绫�")
public class MiniProgrammeDTO {
@ApiModelProperty("涓婚〉涓婚")
diff --git a/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java b/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
index 3120eae..213dd1d 100644
--- a/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
+++ b/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -12,6 +12,7 @@
import com.doumee.dao.business.web.response.GoodsorderDetailDTO;
import com.doumee.dao.business.web.response.RidesDetailResponse;
+import java.math.BigDecimal;
import java.util.List;
/**
@@ -146,6 +147,13 @@
/**
+ * 閫�娆�
+ * @param orderId
+ */
+ void backGoodsorder(String orderId, BigDecimal money);
+
+
+ /**
* 楠戣璁板綍璇︽儏
* @param id
* @return
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
index 7b24ac9..0c8f1e1 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -34,6 +34,7 @@
import com.doumee.service.business.GoodsorderService;
import com.doumee.service.business.MemberRidesService;
import com.doumee.service.business.PricingRuleService;
+import com.doumee.service.business.RefundService;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
@@ -100,6 +101,9 @@
@Autowired
PricingRuleService pricingRuleService;
+
+ @Autowired
+ RefundService refundService;
@Override
public String create(Goodsorder goodsorder) {
@@ -326,15 +330,16 @@
return goodsorderDetailDTO;
}
+ @Transactional(rollbackFor = {Exception.class,BusinessException.class})
@Override
- public void closerGoodsorder(String id) {
+ public void closerGoodsorder(String orderId) {
LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
- Goodsorder goodsorder = goodsorderMapper.selectById(id);
+ Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
QueryWrapper<MemberRides> wrapper = new QueryWrapper<>();
wrapper.lambda()
- .eq(MemberRides::getOrdreId,id);
+ .eq(MemberRides::getOrdreId,orderId);
List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper);
if (!CollectionUtils.isEmpty(memberRides)){
boolean exitUnBack = memberRides.stream().anyMatch(s -> !Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey().equals(s.getStatus()));
@@ -361,8 +366,10 @@
Integer durationSum = memberRides.stream().filter(s -> s.getDuration() > 0).mapToInt(s -> s.getDuration()).sum();
if (durationSum > pricingRule.getMemberRides().getBaseTime()){
+ BigDecimal bigDecimal = new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime()));
BigDecimal basePrice = pricingRule.getMemberRides().getBasePrice();
- BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice().multiply(new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime())));
+ BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice()
+ .multiply(bigDecimal.divide(pricingRule.getMemberRides().getUnitPrice(),BigDecimal.ROUND_UP));
ridesDetailResponse.setAmount(basePrice.add(multiply));
}else {
ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice());
@@ -371,36 +378,114 @@
ridesDetailResponse.setDuration(durationSum);
ridesDetailResponse.setMemberRidesResponseList(collect);
+ if(goodsorder.getMoney().compareTo(ridesDetailResponse.getAmount())>Constants.ZERO){
- Refund refund = new Refund();
- refund.setCreateDate(new Date());
- refund.setCreator(principal.getId());
- refund.setEditDate(new Date());
- refund.setEditor(principal.getId());
- refund.setIsdeleted(Constants.ZERO);
- refund.setInfo("绯荤粺缁撶畻鍚庤鍗曡嚜鍔ㄥ畬缁�");
-// refund.setCode();
- refund.setMemberId(goodsorder.getMemberId());
- refund.setMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount()));
-// refund.setStatus();
-// refund.setPreOrderid();
-// refund.setOnlineOrderid();
- refund.setPayWay(goodsorder.getPayWay());
- refund.setDoneDate(new Date());
- refund.setType(Constants.ONE);
- refund.setObjId(goodsorder.getId());
- refund.setReason("纭畾寮哄埗缁撶畻鍚楋紵缁撶畻鍚庤鍗曡嚜鍔ㄥ畬缁�");
- refundMapper.insert(refund);
+ RefundDTO refundDTO = new RefundDTO();
+ refundDTO.setOrderId(orderId);
+ refundDTO.setCanBalance(goodsorder.getMoney());
+ refundDTO.setRefundAmount(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount()));
+ refundDTO.setTotalAmount(goodsorder.getMoney());
+ refundDTO.setMemberId(goodsorder.getMemberId());
+ refundDTO.setReason("骞冲彴寮哄埗缁撶畻閫�娆�");
+ refundDTO.setType(Constants.REFUND_TYPE.PLAT_AUTO.getKey());
+ Refund refund = wxMiniUtilService.wxRefund(refundDTO);
+
+ //瀛樺偍 娑堣垂浜ゆ槗娴佹按
+ Transactions transactions = new Transactions();
+ transactions.setMemberId(goodsorder.getMemberId());
+ transactions.setCreateDate(new Date());
+ transactions.setIsdeleted(Constants.ZERO);
+ transactions.setOrderId(orderId);
+ transactions.setMoney(goodsorder.getMoney().compareTo(ridesDetailResponse.getAmount())<=Constants.ZERO?goodsorder.getMoney():ridesDetailResponse.getAmount());
+ transactions.setType(Constants.transactionsType.consumption);
+ transactions.setDoneDate(new Date());
+ transactions.setTitle("娑堣垂缁撶畻");
+ transactions.setContent("缁撶畻瀹為檯娑堣垂");
+ transactions.setBalance(BigDecimal.ZERO);
+ transactions.setObjId(orderId);
+ transactions.setObjType(Constants.ONE);
+ transactionsMapper.insert(transactions);
+
+ Goodsorder update = new Goodsorder();
+ update.setId(goodsorder.getId());
+ update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey());
+ update.setCloseMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount()));
+ update.setCloseId(refund.getId());
+ update.setCloseDate(refund.getDoneDate());
+ update.setCloseInfo(refund.getInfo());
+ update.setCloseUserId(principal.getId());
+ update.setCloseType(Constants.ONE);
+ goodsorderMapper.updateById(update);
+ }
+ }else {
+
+ RefundDTO refundDTO = new RefundDTO();
+ refundDTO.setOrderId(orderId);
+ refundDTO.setCanBalance(goodsorder.getMoney());
+ refundDTO.setRefundAmount(goodsorder.getMoney());
+ refundDTO.setTotalAmount(goodsorder.getMoney());
+ refundDTO.setMemberId(goodsorder.getMemberId());
+ refundDTO.setReason("骞冲彴寮哄埗缁撶畻閫�娆�");
+ refundDTO.setType(Constants.REFUND_TYPE.PLAT_FORCE.getKey());
+ Refund refund = wxMiniUtilService.wxRefund(refundDTO);
+
+ //瀛樺偍 娑堣垂浜ゆ槗娴佹按
+ Transactions transactions = new Transactions();
+ transactions.setMemberId(goodsorder.getMemberId());
+ transactions.setCreateDate(new Date());
+ transactions.setIsdeleted(Constants.ZERO);
+ transactions.setOrderId(orderId);
+ transactions.setMoney(goodsorder.getMoney());
+ transactions.setType(Constants.transactionsType.consumption);
+ transactions.setDoneDate(new Date());
+ transactions.setTitle("娑堣垂缁撶畻");
+ transactions.setContent("缁撶畻瀹為檯娑堣垂");
+ transactions.setBalance(BigDecimal.ZERO);
+ transactions.setObjId(orderId);
+ transactions.setObjType(Constants.ONE);
+ transactionsMapper.insert(transactions);
+
Goodsorder update = new Goodsorder();
update.setId(goodsorder.getId());
update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey());
- update.setCloseMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount()));
+ update.setCloseMoney(goodsorder.getMoney());
update.setCloseId(refund.getId());
update.setCloseDate(refund.getDoneDate());
update.setCloseInfo(refund.getInfo());
update.setCloseUserId(principal.getId());
update.setCloseType(Constants.ONE);
goodsorderMapper.updateById(update);
+
+ }
+
+
+ }
+
+ @Override
+ public void backGoodsorder(String orderId, BigDecimal money) {
+
+ LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
+ QueryWrapper<Refund> wrapper = new QueryWrapper<>();
+ wrapper.lambda()
+ .eq(Refund::getObjId,orderId)
+ .orderByDesc(Refund::getCreateDate)
+ .last("limit 1");
+ Refund lastRefund = refundMapper.selectOne(wrapper);
+ if (Objects.isNull(lastRefund)){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏀硅鍗曡缁撶畻鍚庡湪閫�娆�");
+ }
+ BigDecimal canBalance = lastRefund.getCanBalance();
+ if(canBalance.compareTo(money) > Constants.ZERO){
+ RefundDTO refundDTO = new RefundDTO();
+ refundDTO.setOrderId(orderId);
+ refundDTO.setCanBalance(lastRefund.getCanBalance().subtract(lastRefund.getMoney()));
+ refundDTO.setRefundAmount(money);
+ refundDTO.setTotalAmount(goodsorder.getMoney());
+ refundDTO.setMemberId(goodsorder.getMemberId());
+ refundDTO.setReason("骞冲彴閫�娆�");
+ refundDTO.setType(Constants.REFUND_TYPE.BACK.getKey());
+ Refund refund = wxMiniUtilService.wxRefund(refundDTO);
}
}
@@ -611,7 +696,6 @@
Integer durationSum = memberRides.stream().filter(s -> s.getDuration() > 0).mapToInt(s -> s.getDuration()).sum();
if (durationSum > pricingRule.getMemberRides().getBaseTime()){
BigDecimal basePrice = pricingRule.getMemberRides().getBasePrice();
- //TODO 鍙栬瘉
BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice().multiply(new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime())).divide(new BigDecimal(pricingRule.getMemberRides().getUnitTime())).setScale(0,BigDecimal.ROUND_CEILING));
ridesDetailResponse.setAmount(basePrice.add(multiply));
}else {
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 7c5d6f4..cfbb756 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -79,13 +79,13 @@
insert.setEditor(principal.getId());
insert.setIsdeleted(Constants.ZERO);
insert.setName(member.getName());
- insert.setName(member.getNickname());
- insert.setStatus(Constants.ZERO);
+ insert.setNickname(member.getNickname());
+ insert.setStatus(member.getStatus());
insert.setRegisterDate(new Date());
insert.setCardNo(member.getCardNo());
insert.setType(Constants.ONE);
- memberMapper.insert(member);
- return member.getId();
+ memberMapper.insert(insert);
+ return insert.getId();
}
@Override
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/RentSiteServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/RentSiteServiceImpl.java
index 3649991..2236504 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/RentSiteServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/RentSiteServiceImpl.java
@@ -98,7 +98,7 @@
QueryWrapper<RentSite> wrapper = new QueryWrapper<>(rentSite);
return rentSiteMapper.selectList(wrapper);
}
-
+
@Override
public PageData<RentSite> findPage(PageWrap<RentSite> pageWrap) {
IPage<RentSite> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
--
Gitblit v1.9.3