server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -50,7 +50,12 @@ int waitPay =0; int pay =1; } public interface transactionsType{ int deposit =0; int consumption =1; int refund =2; int platformRefund = 3; } public static String getUUID(){ return UUID.randomUUID().toString().replace("-",""); server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
@@ -1,19 +1,28 @@ package com.doumee.core.wx; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.utils.ID; import com.doumee.dao.business.RefundMapper; import com.doumee.dao.business.TransactionsMapper; import com.doumee.dao.business.model.Refund; import com.doumee.dao.business.model.Transactions; import com.doumee.dao.business.web.request.RefundDTO; import com.doumee.service.business.RefundService; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; import com.github.binarywang.wxpay.exception.WxPayException; import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; /** * 微信å°ç¨åº-å ¬å ±æ¹æ³ @@ -22,29 +31,55 @@ @Slf4j public class WxMiniUtilService { @Autowired private RefundMapper refundMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; private TransactionsMapper transactionsMapper; /** * 订åå¾®ä¿¡éæ¬¾ * orderNo:åæ·è®¢åå· * totalPriceï¼è®¢åæ»éé¢ * refundPriceï¼é款éé¢ */ @Transactional(rollbackFor = Exception.class) public static String wxRefund(String orderNo, BigDecimal totalPrice, BigDecimal refundPrice) { public Refund wxRefund(RefundDTO refundDTO) { try { // åé鿬¾è¯·æ± String refNum = ID.nextGUID(); WxPayRefundRequest request = new WxPayRefundRequest(); request.setOutTradeNo(orderNo); request.setOutTradeNo(refundDTO.getOrderId()); request.setOutRefundNo(refNum); request.setTotalFee(BaseWxPayRequest.yuanToFen(totalPrice.toString())); request.setRefundFee(BaseWxPayRequest.yuanToFen(refundPrice.toString())); request.setTotalFee(BaseWxPayRequest.yuanToFen(refundDTO.getTotalAmount().toString())); request.setRefundFee(BaseWxPayRequest.yuanToFen(refundDTO.getRefundAmount().toString())); WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request); if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) { return refNum; //åå¨éæ¬¾è®°å½ ä¸ æµæ°´è®°å½ Refund refund = new Refund(); refund.setCreateDate(new Date()); refund.setMemberId(refundDTO.getMemberId()); refund.setMoney(refundDTO.getRefundAmount()); refund.setOnlineOrderid(refNum); refund.setPayWay(Constants.ZERO); refund.setDoneDate(new Date()); refund.setType(refundDTO.getType()); refund.setObjId(refundDTO.getOrderId()); refund.setReason(refundDTO.getReason()); refundMapper.insert(refund); //åå¨äº¤ææµæ°´è¡¨ Transactions transactions = new Transactions(); transactions.setMemberId(refundDTO.getMemberId()); transactions.setCreateDate(new Date()); transactions.setIsdeleted(Constants.ZERO); transactions.setOrderId(refundDTO.getOrderId()); transactions.setMoney(refundDTO.getRefundAmount()); transactions.setType(refundDTO.getType()==Constants.transactionsType.refund?Constants.transactionsType.platformRefund:Constants.transactionsType.refund); transactions.setPreOrderid(refundDTO.getOrderId()); transactions.setOnlineOrderid(refNum); transactions.setDoneDate(new Date()); transactions.setTitle("鿬¾"); transactions.setContent(refundDTO.getType()==Constants.transactionsType.refund?"å¹³å°é款":"ç»ç®é款"); transactions.setBalance(BigDecimal.ZERO); transactions.setObjId(refund.getId()); transactions.setObjType(Constants.ONE); transactionsMapper.insert(transactions); return refund; } else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes()); } @@ -53,6 +88,5 @@ } throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鿬¾åçå¼å¸¸è¯·è系管çå"); } } server/services/src/main/java/com/doumee/dao/business/model/Transactions.java
@@ -77,7 +77,7 @@ @ApiModelProperty(value = "交æå®ææ¶é´") @ExcelColumn(name="交æå®ææ¶é´") private String doneDate; private Date doneDate; @ApiModelProperty(value = "äº¤ææ é¢") @ExcelColumn(name="äº¤ææ é¢") server/services/src/main/java/com/doumee/dao/business/web/request/RefundDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,40 @@ package com.doumee.dao.business.web.request; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import io.swagger.models.auth.In; import lombok.Data; import java.math.BigDecimal; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/10/9 9:34 */ @Data @ApiModel("鿬¾è¯·æ±ç±»") public class RefundDTO { @ApiModelProperty(value = "订åä¿¡æ¯å·ï¼goodsOrder:idï¼") private String orderId; @ApiModelProperty(value = "è®¢åæ»éé¢ï¼åï¼") private BigDecimal totalAmount; @ApiModelProperty(value = "ç¨æ·ä¸»é®") private String memberId; @ApiModelProperty(value = "鿬¾éé¢ï¼åï¼") private BigDecimal refundAmount; @ApiModelProperty(value = "鿬¾ç±»å 0ç»ç®é款 1强å¶ç»ç®é款 2ç»ç®å鿬¾") private Integer type; @ApiModelProperty(value = "鿬¾åå ") private String reason; } server/services/src/main/java/com/doumee/dao/business/web/request/WxPhoneRequest.java
@@ -29,8 +29,7 @@ @ApiModelProperty(value = "sessionKey") private String sessionKey; @NotEmpty(message = "openId ä¸è½ä¸ºç©º") @ApiModelProperty(value = "openId") private String openId; @ApiModelProperty(value = "ç¨æ·ä¸»é®",hidden = true) private String memberId; } server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -142,11 +142,5 @@ void closerGoodsorder(String id); /** * æ¼éæ¯ä»ä¸å¡ * @param id * @return */ RidesDetailResponse getRidesDetailResponse(String id); } server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -4,6 +4,7 @@ import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.web.request.RegisterRequest; import com.doumee.dao.business.web.request.WxPhoneRequest; import com.doumee.dao.business.web.response.AccountResponse; import com.doumee.dao.business.web.response.UserResponse; @@ -104,20 +105,18 @@ void wxEmpower(String code, String memberId); /** * æåç»å½ * ææç»å½ * @param code */ AccountResponse wxLogin(String code); /** * è§£æææºå· * @param memberId * @param encryptedData * @param iv * @param sessionKey * @param wxPhoneRequest * @return */ AccountResponse wxPhone(String memberId,String encryptedData, String iv,String sessionKey); AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest); UserResponse getUserInfo(String memberId); } server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -222,8 +222,8 @@ } return homeResponse; } @Autowired private TransactionsMapper transactionsMapper; @Override @@ -445,6 +445,23 @@ goodsorder.setPayDate(new Date()); goodsorder.setEditDate(new Date()); goodsorderMapper.updateById(goodsorder); //åå¨äº¤ææµæ°´è¡¨ Transactions transactions = new Transactions(); transactions.setMemberId(goodsorder.getMemberId()); transactions.setCreateDate(new Date()); transactions.setIsdeleted(Constants.ZERO); transactions.setOrderId(goodsorder.getId()); transactions.setMoney(goodsorder.getMoney()); transactions.setType(Constants.transactionsType.deposit); transactions.setPreOrderid(goodsorder.getPreOrderid()); transactions.setOnlineOrderid(goodsorder.getOnlineOrderid()); transactions.setDoneDate(new Date()); transactions.setTitle("æ¯ä»"); transactions.setContent("æ¼éæ¯ä»"); transactions.setBalance(goodsorder.getMoney()); transactions.setObjId(goodsorder.getId()); transactions.setObjType(Constants.ZERO); transactionsMapper.insert(transactions); return WxPayNotifyResponse.success("å¤çæå!"); } server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -19,6 +19,7 @@ import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.web.request.RegisterRequest; import com.doumee.dao.business.web.request.WxPhoneRequest; import com.doumee.dao.business.web.response.AccountResponse; import com.doumee.dao.business.web.response.HomeResponse; import com.doumee.dao.business.web.response.UserResponse; @@ -285,17 +286,14 @@ /** * è§£æå¾®ä¿¡ææºå· * @param memberId * @param encryptedData * @param iv * @param sessionKey * @param wxPhoneRequest * @return */ @Override public AccountResponse wxPhone(String memberId,String encryptedData, String iv,String sessionKey) { public AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest) { try { Member member = memberMapper.selectById(memberId); WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv); Member member = memberMapper.selectById(wxPhoneRequest.getMemberId()); WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNoInfo(wxPhoneRequest.getSessionKey(), wxPhoneRequest.getEncryptedData(), wxPhoneRequest.getIv()); //è·åææºå· String mobile= userPhoneInfo.getPurePhoneNumber(); if(Objects.isNull(mobile)){ server/web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -4,6 +4,7 @@ import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.web.request.RegisterRequest; import com.doumee.dao.business.web.request.WxPhoneRequest; import com.doumee.dao.business.web.response.AccountResponse; import com.doumee.dao.business.web.response.UserResponse; import com.doumee.service.business.MemberService; @@ -32,31 +33,30 @@ @Autowired private MemberService memberService; @ApiOperation(value = "ç¨æ·æ³¨å", notes = "å°ç¨åºç«¯") @PostMapping("/userRegister") public ApiResponse<AccountResponse> userRegister(@RequestBody RegisterRequest registerRequest) { return ApiResponse.success("æä½æå",memberService.userRegister(registerRequest)); } @Trace @LoginRequired @ApiOperation(value = "微信ææï¼ç»å½åï¼", notes = "å°ç¨åºç«¯") @GetMapping("/wxEmpower") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "微信code", required = true) }) public ApiResponse wxEmpower(@RequestParam String code) { memberService.wxEmpower(code,getMemberId()); return ApiResponse.success("æä½æå"); } // @ApiOperation(value = "ç¨æ·æ³¨å", notes = "å°ç¨åºç«¯") // @PostMapping("/userRegister") // public ApiResponse<AccountResponse> userRegister(@RequestBody RegisterRequest registerRequest) { // return ApiResponse.success("æä½æå",memberService.userRegister(registerRequest)); // } // // @Trace // @LoginRequired // @ApiOperation(value = "微信ææï¼ç»å½åï¼", notes = "å°ç¨åºç«¯") // @GetMapping("/wxEmpower") // @ApiImplicitParams({ // @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), // @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "微信code", required = true) // }) // public ApiResponse wxEmpower(@RequestParam String code) { // memberService.wxEmpower(code,getMemberId()); // return ApiResponse.success("æä½æå"); // } @Trace @ApiOperation(value = "微信ææ", notes = "å°ç¨åºç«¯") @GetMapping("/wxLogin") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "微信code", required = true) }) public ApiResponse<AccountResponse> wxLogin(@RequestParam String code) { @@ -65,6 +65,18 @@ @LoginRequired @ApiOperation(value = "è§£æå¾®ä¿¡ææºå·", notes = "å°ç¨åºç«¯") @PostMapping("/wxPhone") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) }) public ApiResponse<AccountResponse> wxPhone(@RequestBody WxPhoneRequest wxPhoneRequest) { wxPhoneRequest.setMemberId(getMemberId()); return ApiResponse.success("æä½æå",memberService.wxPhone(wxPhoneRequest)); } @LoginRequired @ApiOperation(value = "è·åç¨æ·ä¿¡æ¯", notes = "å°ç¨åºç«¯") @GetMapping("/getUserInfo") @ApiImplicitParams({ server/web/src/main/java/com/doumee/api/web/GoodsOrderApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.doumee.api.web; import com.doumee.core.annotation.trace.Trace; import com.doumee.service.business.GoodsorderService; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/10/9 10:15 */ @Api(tags = "3ã订åä¸å¡") @Trace(exclude = true) @RestController @RequestMapping("/web/goodsOrder") @Slf4j public class GoodsOrderApi extends ApiController{ @Autowired private GoodsorderService goodsorderService; } server/web/src/main/java/com/doumee/api/web/HomeApi.java
@@ -1,9 +1,20 @@ package com.doumee.api.web; import com.doumee.core.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.web.response.HomeResponse; import com.doumee.dao.business.web.response.RidesDetailResponse; import com.doumee.service.business.GoodsorderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -20,6 +31,33 @@ @Slf4j public class HomeApi extends ApiController{ @Autowired private GoodsorderService goodsorderService; @LoginRequired @ApiOperation(value = "é¦é¡µä¿¡æ¯", notes = "é¦é¡µä¿¡æ¯") @GetMapping("/home") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) }) public ApiResponse<HomeResponse> home() { HomeResponse homeResponse = goodsorderService.getHome(getMemberId()); return ApiResponse.success("æ¥è¯¢æå",homeResponse); } @LoginRequired @ApiOperation(value = "éªè¡æç»", notes = "éªè¡æç»") @GetMapping("/rideDetail") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), @ApiImplicitParam(paramType = "query", dataType = "String", name = "goodsOrderId", value = "订å主é®", required = true) }) public ApiResponse<RidesDetailResponse> rideDetail(@RequestParam String goodsOrderId) { RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); return ApiResponse.success("æ¥è¯¢æå",ridesDetailResponse); }