server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java
@@ -1,5 +1,6 @@ package com.doumee.api.business; import com.doumee.api.BaseController; import com.doumee.core.annotation.excel.ExcelExporter; import com.doumee.core.annotation.pr.PreventRepeat; import com.doumee.core.model.ApiResponse; @@ -25,7 +26,7 @@ @Api(tags = "订åä¿¡æ¯è¡¨") @RestController @RequestMapping("/business/goodsorder") public class GoodsorderController { public class GoodsorderController extends BaseController { @Autowired server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -18,6 +18,7 @@ public class Constants { <<<<<<< HEAD public static final String DEFAULT_PWD = "DEFAULT_PWD"; public static final String TRUE = "t"; public static final String FALSE = "f"; @@ -55,224 +56,323 @@ 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("-",""); } public interface RedisKeys { public static final String submission_period_key = "sp_"; } public static final String ACCESS_ID="ACCESS_ID"; public static final String BUCKETNAME = "BUCKETNAME"; public static final String OSS = "OSS"; public static final String ACCESS_KEY = "ACCESS_KEY"; public static final String SCRATCH_REDIRECT = "SCRATCH_REDIRECT"; public static final String ENDPOINT = "ENDPOINT"; public static final String TESTCASE_UPLOAD_PATH = "TESTCASE_UPLOAD_PATH"; public static final String RESOURCE_PATH = "RESOURCE_PATH"; public static final String UPLOAD_FILE = "UPLOAD_FILE"; public static final String AVATAR_FILE = "AVATAR_FILE"; //ç¨æ·åè®® public static final String AGREEMENT = "AGREEMENT"; //计价è§å public static final String PRICING_RULE = "PRICING_RULE"; //å°ç¨åºä¸»é¢åç§° public static final String PROJECT_NAME = "PROJECT_NAME"; //å°ç¨åºæå¡ç«¯çµè¯ public static final String SERVER_PHONE = "SERVER_PHONE"; //å°ç¨åºç§èµæµç¨è§é¢ public static final String RENT_TIPS_VIDEO = "RENT_TIPS_VIDEO"; //ç§èµé¡»ç¥ public static final String LEASE_NOTICE = "LEASE_NOTICE"; //ç§èµé¡»ç¥å¾ç public static final String LEASE_NOTICE_URL = "LEASE_NOTICE_URL"; //æ¼é public static final String RENT_DEPOSIT = "RENT_DEPOSIT"; //温馨æç¤º public static final String TIPS = "TIPS"; public static final String FILES_DIR = "FILES_DIR"; public static final String SCRATCH_REDIRECT_URL = "SCRATCH_REDIRECT_URL"; public static final Integer ZERO = 0 ; public static final Integer ONE = 1 ; public static final Integer TWO = 2 ; public static final Integer THREE = 3 ; public static int formatIntegerNum(Integer num){ if(num == null){ return 0; } return num; } public interface UserActionsType{ String cancelPrePay="CANCEL_PRE_PAY"; //订åç»ç®è®¢å String close="CLOSE"; String forceRefund="FORCE_REFUND"; String login="LOGIN"; String pay="PAY"; String preForceRefund="PRE_FORCE_REFUND"; String prePay="PRE_PAY"; String preRefund="PRE_REFUND"; String refund="REFUND"; String register="REGISTER"; String rent="RENT"; } public static BigDecimal formatDecimalNum(BigDecimal num){ if(num == null){ return new BigDecimal(0); } return num; } public static int compareBigdecimal(BigDecimal num,BigDecimal num2){ if(num == null){ num =new BigDecimal(0); } if(num2 == null){ num2 =new BigDecimal(0); } if (num.compareTo(num2) == 1) { return 1; } else if (num.compareTo(num2)== -1) { return -1; } return 0; } public static long formatLongNum(Long num){ if(num == null){ return 0; } return num; } public static String formatImgPath(String avatar, String imgPath) { if(StringUtils.isBlank(avatar)){ return null; } return imgPath+avatar; } public static String getIpAddr(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); public interface RedisKeys { public static final String submission_period_key = "sp_"; } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); public static final String ACCESS_ID = "ACCESS_ID"; public static final String BUCKETNAME = "BUCKETNAME"; public static final String OSS = "OSS"; public static final String ACCESS_KEY = "ACCESS_KEY"; public static final String ENDPOINT = "ENDPOINT"; public static final String RESOURCE_PATH = "RESOURCE_PATH"; public static final String AVATAR_FILE = "AVATAR_FILE"; //ç¨æ·åè®® public static final String AGREEMENT = "AGREEMENT"; //计价è§å public static final String PRICING_RULE = "PRICING_RULE"; //å°ç¨åºä¸»é¢åç§° public static final String PROJECT_NAME = "PROJECT_NAME"; //å°ç¨åºæå¡ç«¯çµè¯ public static final String SERVER_PHONE = "SERVER_PHONE"; //å°ç¨åºç§èµæµç¨è§é¢ public static final String RENT_TIPS_VIDEO = "RENT_TIPS_VIDEO"; //ç§èµé¡»ç¥ public static final String LEASE_NOTICE = "LEASE_NOTICE"; //ç§èµé¡»ç¥å¾ç public static final String LEASE_NOTICE_URL = "LEASE_NOTICE_URL"; //æ¼é public static final String RENT_DEPOSIT = "RENT_DEPOSIT"; //温馨æç¤º public static final String TIPS = "TIPS"; public static final String FILES_DIR = "FILES_DIR"; public static final String SCRATCH_REDIRECT_URL = "SCRATCH_REDIRECT_URL"; public static final Integer ZERO = 0; public static final Integer ONE = 1; public static final Integer TWO = 2; public static final Integer THREE = 3; public static int formatIntegerNum(Integer num) { if (num == null) { return 0; } return num; } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); String localIp = "127.0.0.1"; String localIpv6 = "0:0:0:0:0:0:0:1"; if (ipAddress.equals(localIp) || ipAddress.equals(localIpv6)) { // æ ¹æ®ç½å¡åæ¬æºé ç½®çIP InetAddress inet = null; try { inet = InetAddress.getLocalHost(); ipAddress = inet.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); public interface UserActionsType { String cancelPrePay = "CANCEL_PRE_PAY"; //订åç»ç®è®¢å String close = "CLOSE"; String forceRefund = "FORCE_REFUND"; String login = "LOGIN"; String pay = "PAY"; String preForceRefund = "PRE_FORCE_REFUND"; String prePay = "PRE_PAY"; String preRefund = "PRE_REFUND"; String refund = "REFUND"; String register = "REGISTER"; String rent = "RENT"; } public enum GOODSORDER_STATUS{ // 0å¾ æ¯ä» 1å·²æ¯ä» 2已忶 3æ¯ä»å¤±è´¥ 4å·²ç»ç® UN_PAY("å¾ æ¯ä»", 0,"å¾ æ¯ä»"), HAVING_PAY("å·²æ¯ä»", 1,"å·²æ¯ä»"), CANCEL("已忶", 2,"已忶"), PAY_FAILURE("æ¯ä»å¤±è´¥", 3,"æ¯ä»å¤±è´¥"), CLOSE("å·²ç»ç®", 4,"å·²ç»ç®"), ; String name; Integer key; String info; GOODSORDER_STATUS(String name, Integer key, String info) { this.name = name; this.key = key; this.info = info; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getKey() { return key; } public void setKey(Integer key) { this.key = key; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } } public enum MEMBER_RIDES_STATUS{ // 0请æ±å¼éä¸ 1éªè¡ä¸ 2å·²è¿è½¦ 3å¼é失败 LOCKING("请æ±å¼éä¸", 0,"请æ±å¼éä¸"), RIDES_RUNNING("éªè¡ä¸", 1,"éªè¡ä¸"), BACK_CYCLING("å·²è¿è½¦", 2,"å·²è¿è½¦"), LOCKING_DEFEAT("å¼é失败", 3,"å¼é失败") ; String name; Integer key; String info; MEMBER_RIDES_STATUS(String name, Integer key, String info) { this.name = name; this.key = key; this.info = info; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getKey() { return key; } public void setKey(Integer key) { this.key = key; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } } public static BigDecimal formatDecimalNum(BigDecimal num) { if (num == null) { return new BigDecimal(0); } return num; } public static int compareBigdecimal(BigDecimal num, BigDecimal num2) { if (num == null) { num = new BigDecimal(0); } if (num2 == null) { num2 = new BigDecimal(0); } if (num.compareTo(num2) == 1) { return 1; } else if (num.compareTo(num2) == -1) { return -1; } return 0; } public static long formatLongNum(Long num) { if (num == null) { return 0; } return num; } public static String formatImgPath(String avatar, String imgPath) { if (StringUtils.isBlank(avatar)) { return null; } return imgPath + avatar; } public static String getIpAddr(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); String localIp = "127.0.0.1"; String localIpv6 = "0:0:0:0:0:0:0:1"; if (ipAddress.equals(localIp) || ipAddress.equals(localIpv6)) { // æ ¹æ®ç½å¡åæ¬æºé ç½®çIP InetAddress inet = null; try { inet = InetAddress.getLocalHost(); ipAddress = inet.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } } } } // 对äºéè¿å¤ä¸ªä»£ççæ åµï¼ç¬¬ä¸ä¸ªIP为客æ·ç«¯çå®IP,å¤ä¸ªIPæç §','åå² String ipSeparate = ","; int ipLength = 15; if (ipAddress != null && ipAddress.length() > ipLength) { if (ipAddress.indexOf(ipSeparate) > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(ipSeparate)); // 对äºéè¿å¤ä¸ªä»£ççæ åµï¼ç¬¬ä¸ä¸ªIP为客æ·ç«¯çå®IP,å¤ä¸ªIPæç §','åå² String ipSeparate = ","; int ipLength = 15; if (ipAddress != null && ipAddress.length() > ipLength) { if (ipAddress.indexOf(ipSeparate) > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(ipSeparate)); } } return ipAddress; } return ipAddress; } public static String getSHA256Str(String str) { MessageDigest messageDigest; String encdeStr = ""; try { messageDigest = MessageDigest.getInstance("SHA-256"); byte[] hash = messageDigest.digest(str.getBytes("UTF-8")); encdeStr = Hex.encodeHexString(hash); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return encdeStr; } public static String trimEndSpaceStr(String outPut){ String newOutPut = ""; if(StringUtils.isNotBlank(outPut)){ String[] ostrs = outPut.split("\n"); for(String str : ostrs){ String text = str.replace("\n","").replaceAll("\\s+$", ""); newOutPut += text+"\n"; public static String getSHA256Str(String str) { MessageDigest messageDigest; String encdeStr = ""; try { messageDigest = MessageDigest.getInstance("SHA-256"); byte[] hash = messageDigest.digest(str.getBytes("UTF-8")); encdeStr = Hex.encodeHexString(hash); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if(newOutPut.endsWith("\n")){ newOutPut = newOutPut.substring(0,newOutPut.length()-1); return encdeStr; } public static String trimEndSpaceStr(String outPut) { String newOutPut = ""; if (StringUtils.isNotBlank(outPut)) { String[] ostrs = outPut.split("\n"); for (String str : ostrs) { String text = str.replace("\n", "").replaceAll("\\s+$", ""); newOutPut += text + "\n"; } if (newOutPut.endsWith("\n")) { newOutPut = newOutPut.substring(0, newOutPut.length() - 1); } } return newOutPut; } return newOutPut; } public static String delHTMLTag(String htmlStr) { if (StringUtils.isBlank(htmlStr)) { return ""; public static String delHTMLTag(String htmlStr) { if (StringUtils.isBlank(htmlStr)) { return ""; } String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // å®ä¹scriptçæ£åè¡¨è¾¾å¼ String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; // å®ä¹styleçæ£åè¡¨è¾¾å¼ String regEx_html = "<[^>]+>"; // å®ä¹HTMLæ ç¾çæ£åè¡¨è¾¾å¼ Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE); Matcher m_script = p_script.matcher(htmlStr); htmlStr = m_script.replaceAll(""); // è¿æ»¤scriptæ ç¾ Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE); Matcher m_style = p_style.matcher(htmlStr); htmlStr = m_style.replaceAll(""); // è¿æ»¤styleæ ç¾ Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE); Matcher m_html = p_html.matcher(htmlStr); htmlStr = m_html.replaceAll(""); // è¿æ»¤htmlæ ç¾ htmlStr = htmlStr.replace(" ", " "); // è¿æ»¤ç©ºæ ¼æ ç¾ htmlStr = htmlStr.replace(" ", " "); // è¿æ»¤ç©ºæ ¼æ ç¾ return htmlStr.trim(); // è¿åææ¬å符串 } String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // å®ä¹scriptçæ£åè¡¨è¾¾å¼ String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; // å®ä¹styleçæ£åè¡¨è¾¾å¼ String regEx_html = "<[^>]+>"; // å®ä¹HTMLæ ç¾çæ£åè¡¨è¾¾å¼ Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE); Matcher m_script = p_script.matcher(htmlStr); htmlStr = m_script.replaceAll(""); // è¿æ»¤scriptæ ç¾ Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE); Matcher m_style = p_style.matcher(htmlStr); htmlStr = m_style.replaceAll(""); // è¿æ»¤styleæ ç¾ Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE); Matcher m_html = p_html.matcher(htmlStr); htmlStr = m_html.replaceAll(""); // è¿æ»¤htmlæ ç¾ htmlStr = htmlStr.replace(" "," "); // è¿æ»¤ç©ºæ ¼æ ç¾ htmlStr = htmlStr.replace(" "," "); // è¿æ»¤ç©ºæ ¼æ ç¾ return htmlStr.trim(); // è¿åææ¬å符串 } public static List<String> checkUUID(String checkValue){ String [] str = checkValue.split(","); public static List<String> checkUUID(String checkValue) { String[] str = checkValue.split(","); List<String> strList = new ArrayList<>(); for (String s:str) { try{ for (String s : str) { try { String uuid = UUID.fromString(s).toString(); strList.add(uuid); //do something } catch (IllegalArgumentException exception){ } catch (IllegalArgumentException exception) { continue; } } return strList; } } } server/services/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -10,7 +10,6 @@ import java.text.DateFormatSymbols; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Duration; import java.util.Date; import java.util.*; @@ -3011,11 +3010,11 @@ * @param end * @return */ public static long betweenMin(Date begin, Date end) { public static Integer betweenMin(Date begin, Date end) { long createTime =begin.getTime();//è·åå建æ¶é´çæ¶é´æ³ long currentTime =Objects.isNull(end)?System.currentTimeMillis():end.getTime();//è·åå½åæ¶é´çæ¶é´æ³ long diff=(currentTime-createTime)/1000/60;//è·å两个æ¶é´ç¸å·®çåé return diff; return (int)diff; } @@ -3038,4 +3037,4 @@ return consuming.toString(); } } } 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/MemberRides.java
@@ -41,7 +41,7 @@ @ExcelColumn(name="ç¼è¾äºº") private String editor; @ApiModelProperty(value = "æ¯å¦å·²å é¤ 0æªå é¤ 1å·²å é¤", example = "1") @ApiModelProperty(value = "æ¯å¦å·²å é¤ 0æªå é¤ 1å·²å é¤") @ExcelColumn(name="æ¯å¦å·²å é¤ 0æªå é¤ 1å·²å é¤") @TableLogic private Integer isdeleted; @@ -64,7 +64,7 @@ @ExcelColumn(name="车è¾ç¼ç ") private String bikeCode; @ApiModelProperty(value = "å½åè´¦æ·ä½é¢", example = "1") @ApiModelProperty(value = "å½åè´¦æ·ä½é¢") @ExcelColumn(name="å½åè´¦æ·ä½é¢") private BigDecimal balance; @@ -111,31 +111,31 @@ @ExcelColumn(name="è¿è½¦æä»¤ç¼ç ") private String backCommondId; @ApiModelProperty(value = "èµ·æ¥ä»·", example = "1") @ApiModelProperty(value = "èµ·æ¥ä»·") @ExcelColumn(name="èµ·æ¥ä»·") private BigDecimal basePrice; @ApiModelProperty(value = "èµ·æ¥ä»·æ¶é´", example = "1") @ApiModelProperty(value = "èµ·æ¥ä»·æ¶é´") @ExcelColumn(name="èµ·æ¥ä»·æ¶é´") private Integer baseTime; @ApiModelProperty(value = "è¶ åºåä»·", example = "1") @ApiModelProperty(value = "è¶ åºåä»·") @ExcelColumn(name="è¶ åºåä»·") private Integer unitPrice; private BigDecimal unitPrice; @ApiModelProperty(value = "è¶ åºæ¶é´åä½", example = "1") @ApiModelProperty(value = "è¶ åºæ¶é´åä½") @ExcelColumn(name="è¶ åºæ¶é´åä½") private Integer unitTime; @ApiModelProperty(value = "éªè¡ä»·æ ¼", example = "1") @ApiModelProperty(value = "éªè¡ä»·æ ¼") @ExcelColumn(name="éªè¡ä»·æ ¼") private BigDecimal price; @ApiModelProperty(value = "éªè¡å®é ä»·æ ¼", example = "1") @ApiModelProperty(value = "éªè¡å®é ä»·æ ¼") @ExcelColumn(name="éªè¡å®é ä»·æ ¼") private BigDecimal actualPrice; @ApiModelProperty(value = "éªè¡è®¡è´¹æ¶é¿", example = "1") @ApiModelProperty(value = "éªè¡è®¡è´¹æ¶é¿") @ExcelColumn(name="éªè¡è®¡è´¹æ¶é¿") private Integer duration; @@ -144,7 +144,7 @@ //@JsonFormat(pattern = "yyyy-MM-dd") private Date closeDate; @ApiModelProperty(value = "ç»ç®ç¶æ 0æªç»ç® 1å·²ç»æ", example = "1") @ApiModelProperty(value = "ç»ç®ç¶æ 0æªç»ç® 1å·²ç»æ") @ExcelColumn(name="ç»ç®ç¶æ 0æªç»ç® 1å·²ç»æ") private Integer closeStatus; @@ -152,7 +152,7 @@ @ExcelColumn(name="å ³è订åç¼ç (å ³ègoodsorderï¼") private String ordreId; @ApiModelProperty(value = "æ¯å¦ç»ç®è®¡è´¹è½¦å 0å¦ 1æ¯", example = "1") @ApiModelProperty(value = "æ¯å¦ç»ç®è®¡è´¹è½¦å 0å¦ 1æ¯") @ExcelColumn(name="æ¯å¦ç»ç®è®¡è´¹è½¦å 0å¦ 1æ¯") private Integer isStandard; @@ -164,11 +164,11 @@ @ExcelColumn(name="æ¯å¦è忥 0䏿¯ 1æ¯") private String isHoliday; @ApiModelProperty(value = "ç¶æ 0请æ±å¼éä¸ 1éªè¡ä¸ 2å·²è¿è½¦ 3å¼é失败", example = "1") @ApiModelProperty(value = "ç¶æ 0请æ±å¼éä¸ 1éªè¡ä¸ 2å·²è¿è½¦ 3å¼é失败") @ExcelColumn(name="ç¶æ 0请æ±å¼éä¸ 1éªè¡ä¸ 2å·²è¿è½¦ 3å¼é失败") private Integer status; @ApiModelProperty(value = "è¿è½¦ç±»å 0æ£å¸¸è¿è½¦ 1强å¶è¿è½¦", example = "1") @ApiModelProperty(value = "è¿è½¦ç±»å 0æ£å¸¸è¿è½¦ 1强å¶è¿è½¦") @ExcelColumn(name="è¿è½¦ç±»å 0æ£å¸¸è¿è½¦ 1强å¶è¿è½¦") private Integer backType; server/services/src/main/java/com/doumee/dao/business/model/Refund.java
@@ -59,7 +59,7 @@ @ApiModelProperty(value = "ç¨æ·ç¼ç ï¼å ³èmember表ï¼", example = "1") @ExcelColumn(name="ç¨æ·ç¼ç ï¼å ³èmember表ï¼") private BigDecimal memberId; private String memberId; @ApiModelProperty(value = "交æéé¢", example = "1") @ExcelColumn(name="交æéé¢") 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/dao/business/web/response/MemberRidesResponse.java
@@ -30,10 +30,10 @@ private Date rideEndTime; @ApiModelProperty(value = "éªè¡æ¶é¿") private long rideTime; private Integer rideTime; @ApiModelProperty(value = "计费æ¶é¿") private long duration; private Integer duration; @ApiModelProperty(value = "车å") private String bikeType; server/services/src/main/java/com/doumee/dao/business/web/response/PayOrderDTO.java
@@ -1,6 +1,8 @@ package com.doumee.dao.business.web.response; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @@ -13,14 +15,19 @@ @ApiModel("交ææç»") public class PayOrderDTO { @ApiModelProperty(value = "订åç¼ç ") private String orderCode; private Integer payType; @ApiModelProperty(value = "æ¯ä»æ¹å¼ 0微信 1æ¯ä»å®") private Integer payWay; @ApiModelProperty(value = "鿬¾ç±»å 0ç»ç®é款 1强å¶ç»ç®é款 2ç»ç®å鿬¾") private Integer refundType; @ApiModelProperty(value = "交æéé¢") private BigDecimal money; @ApiModelProperty(value = "æ¯ä»æ¶é´") private Date payDate; } server/services/src/main/java/com/doumee/dao/business/web/response/PricingRuleDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ package com.doumee.dao.business.web.response; import com.doumee.dao.business.model.MemberRides; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * * 计价è§å * @author T14 */ @Data @ApiModel("计价è§å") public class PricingRuleDTO { @ApiModelProperty(value = "èµ·æ¥åä»·") private BigDecimal startFare; @ApiModelProperty(value = "åä»·") private BigDecimal price; @ApiModelProperty(value = "计价æ¹å¼ 1:ä¸å£ä»· 2:é¶æ¢¯å®ä»·") private Integer type; @ApiModelProperty(value = "车è¾ç±»å") private String paramId; @ApiModelProperty(value = "车ååç§°") private String bikeType; @ApiModelProperty(value = "è®¡ä»·å¯æ¬") private MemberRides memberRides; } server/services/src/main/java/com/doumee/dao/business/web/response/RidesDetailResponse.java
@@ -1,5 +1,6 @@ package com.doumee.dao.business.web.response; import com.doumee.dao.business.model.BaseParam; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -20,13 +21,13 @@ public class RidesDetailResponse { @ApiModelProperty(value = "é¢è®¡æ¶è´¹éé¢") private long amount; private BigDecimal amount; @ApiModelProperty(value = "车å") private String bikeType; @ApiModelProperty(value = "计费æ¶é¿") private long duration; private Integer duration; @ApiModelProperty(value = "éªè¡è®°å½") private List<MemberRidesResponse> memberRidesResponseList; server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -7,6 +7,7 @@ import com.doumee.dao.business.model.Goodsorder; import com.doumee.dao.business.web.response.HomeResponse; import com.doumee.dao.business.web.response.GoodsorderDetailDTO; import com.doumee.dao.business.web.response.RidesDetailResponse; import java.util.List; @@ -116,6 +117,7 @@ */ Object createGoodsOrderPay(String memberId); /** * æ¼éæ¯ä»åè°ä¸å¡ * @param preOrderId @@ -137,5 +139,8 @@ * @param id * @return */ Goodsorder closerGoodsorder(String id); void closerGoodsorder(String id); 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/PricingRuleService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.doumee.service.business; import com.doumee.dao.business.model.MemberRides; import com.doumee.dao.business.web.response.PricingRuleDTO; import java.util.List; /** * * è·å计价è§å * @author T14 */ public interface PricingRuleService { /** * è·åè·å计价è§å * @param goodaorderId * @return */ PricingRuleDTO getPricingRule(String goodaorderId); PricingRuleDTO getPricingRule(List<MemberRides> memberRidesList); } server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -9,6 +9,7 @@ import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.DateUtil; @@ -22,19 +23,18 @@ import com.doumee.dao.business.model.Goodsorder; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.MemberRides; import com.doumee.dao.business.web.response.HomeResponse; import com.doumee.dao.business.web.response.*; import com.doumee.dao.business.join.MemberRidesJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.business.web.response.GoodsorderDetailDTO; import com.doumee.dao.business.web.response.MemberRidesResponse; import com.doumee.dao.business.web.response.PayOrderDTO; import com.doumee.service.business.GoodsorderService; import com.doumee.service.business.PricingRuleService; import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -51,6 +51,7 @@ import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @Service public class GoodsorderServiceImpl implements GoodsorderService { @@ -74,14 +75,14 @@ @Autowired private BaseParamMapper baseParamMapper; @Autowired private RefundMapper refundMapper; @Autowired private MemberRidesJoinMapper memberRidesJoinMapper; @Autowired PricingRuleService pricingRuleService; @Override public String create(Goodsorder goodsorder) { @@ -221,8 +222,8 @@ } return homeResponse; } @Autowired private TransactionsMapper transactionsMapper; @Override @@ -237,7 +238,7 @@ PayOrderDTO payOrderDTO = new PayOrderDTO(); payOrderDTO.setOrderCode(goodsorder.getCode()); payOrderDTO.setPayType(goodsorder.getPayWay()); payOrderDTO.setPayWay(goodsorder.getPayWay()); payOrderDTO.setMoney(goodsorder.getMoney()); payOrderDTO.setPayDate(goodsorder.getPayDate()); payOrderDTOList.add(0,payOrderDTO); @@ -245,7 +246,8 @@ refunds.forEach(s->{ PayOrderDTO refundOrderDTO = new PayOrderDTO(); refundOrderDTO.setOrderCode(s.getCode()); refundOrderDTO.setPayType(s.getPayWay()); refundOrderDTO.setPayWay(s.getPayWay()); refundOrderDTO.setRefundType(s.getType()); refundOrderDTO.setMoney(s.getMoney()); refundOrderDTO.setPayDate(s.getDoneDate()); payOrderDTOList.add(refundOrderDTO); @@ -262,15 +264,125 @@ } @Override public Goodsorder closerGoodsorder(String id) { public void closerGoodsorder(String id) { LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Goodsorder goodsorder = goodsorderMapper.selectById(id); QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(MemberRides::getOrdreId,id); 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())); if (exitUnBack){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å½åè®¢åææªå®æçéªè¡ï¼æ æ³å¼ºå¶ç»ç®"); } PricingRuleDTO pricingRule = pricingRuleService.getPricingRule(memberRides); RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); List<MemberRidesResponse> collect = memberRides.stream().map(s -> { MemberRidesResponse memberRidesResponse = new MemberRidesResponse(); memberRidesResponse.setRideStartTime(s.getRentDate()); memberRidesResponse.setRideEndTime(s.getBackDate()); memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(), memberRidesResponse.getRideEndTime())); memberRidesResponse.setDuration(s.getDuration()); memberRidesResponse.setBikeType(s.getParamName()); memberRidesResponse.setBikeCode(s.getBikeCode()); memberRidesResponse.setBasePrice(s.getBasePrice()); memberRidesResponse.setBaseTime(s.getBaseTime()); memberRidesResponse.setUnitPrice(s.getUnitTime()); memberRidesResponse.setUnitTime(s.getUnitTime()); return memberRidesResponse; }).collect(Collectors.toList()); Integer durationSum = memberRides.stream().filter(s -> s.getDuration() > 0).mapToInt(s -> s.getDuration()).sum(); if (durationSum > pricingRule.getMemberRides().getBaseTime()){ BigDecimal basePrice = pricingRule.getMemberRides().getBasePrice(); BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice().multiply(new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime()))); ridesDetailResponse.setAmount(basePrice.add(multiply)); }else { ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice()); } ridesDetailResponse.setBikeType(pricingRule.getBikeType()); ridesDetailResponse.setDuration(durationSum); ridesDetailResponse.setMemberRidesResponseList(collect); return null; 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); 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); } } @Override public RidesDetailResponse getRidesDetailResponse(String id) { QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(MemberRides::getOrdreId,id); List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper); if (!CollectionUtils.isEmpty(memberRides)){ PricingRuleDTO pricingRule = pricingRuleService.getPricingRule(memberRides); RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); List<MemberRidesResponse> collect = memberRides.stream().map(s -> { MemberRidesResponse memberRidesResponse = new MemberRidesResponse(); memberRidesResponse.setRideStartTime(s.getRentDate()); memberRidesResponse.setRideEndTime(s.getBackDate()); memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(), memberRidesResponse.getRideEndTime())); memberRidesResponse.setDuration(s.getDuration()); memberRidesResponse.setBikeType(s.getParamName()); memberRidesResponse.setBikeCode(s.getBikeCode()); memberRidesResponse.setBasePrice(s.getBasePrice()); memberRidesResponse.setBaseTime(s.getBaseTime()); memberRidesResponse.setUnitPrice(s.getUnitTime()); memberRidesResponse.setUnitTime(s.getUnitTime()); return memberRidesResponse; }).collect(Collectors.toList()); Integer durationSum = memberRides.stream().filter(s -> s.getDuration() > 0).mapToInt(s -> s.getDuration()).sum(); if (durationSum > pricingRule.getMemberRides().getBaseTime()){ BigDecimal basePrice = pricingRule.getMemberRides().getBasePrice(); BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice().multiply(new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime()))); ridesDetailResponse.setAmount(basePrice.add(multiply)); }else { ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice()); } ridesDetailResponse.setBikeType(pricingRule.getBikeType()); ridesDetailResponse.setDuration(durationSum); ridesDetailResponse.setMemberRidesResponseList(collect); return ridesDetailResponse; } return new RidesDetailResponse(); } @Override public Object createGoodsOrderPay(String memberId){ @@ -328,6 +440,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/MemberRidesServiceImpl.java
@@ -4,12 +4,16 @@ import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.MemberRidesMapper; import com.doumee.dao.business.join.MemberRidesJoinMapper; import com.doumee.dao.business.model.BaseParam; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.MemberRides; import com.doumee.service.business.MemberRidesService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -26,6 +30,10 @@ @Autowired private MemberRidesMapper memberRidesMapper; @Autowired private MemberRidesJoinMapper memberRidesJoinMapper; @Override public String create(MemberRides memberRides) { @@ -83,136 +91,134 @@ QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(memberRides); return memberRidesMapper.selectList(wrapper); } @Override public PageData<MemberRides> findPage(PageWrap<MemberRides> pageWrap) { IPage<MemberRides> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper<MemberRides> queryWrapper = new QueryWrapper<>(); MPJLambdaWrapper<MemberRides> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(MemberRides::getId, pageWrap.getModel().getId()); queryWrapper.eq(MemberRides::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getCreateDate() != null) { queryWrapper.lambda().ge(MemberRides::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); queryWrapper.lambda().le(MemberRides::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); queryWrapper.ge(MemberRides::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); queryWrapper.le(MemberRides::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); } if (pageWrap.getModel().getCreator() != null) { queryWrapper.lambda().eq(MemberRides::getCreator, pageWrap.getModel().getCreator()); queryWrapper.eq(MemberRides::getCreator, pageWrap.getModel().getCreator()); } if (pageWrap.getModel().getEditDate() != null) { queryWrapper.lambda().ge(MemberRides::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); queryWrapper.lambda().le(MemberRides::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); queryWrapper.ge(MemberRides::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); queryWrapper.le(MemberRides::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); } if (pageWrap.getModel().getEditor() != null) { queryWrapper.lambda().eq(MemberRides::getEditor, pageWrap.getModel().getEditor()); queryWrapper.eq(MemberRides::getEditor, pageWrap.getModel().getEditor()); } if (pageWrap.getModel().getIsdeleted() != null) { queryWrapper.lambda().eq(MemberRides::getIsdeleted, pageWrap.getModel().getIsdeleted()); queryWrapper.eq(MemberRides::getIsdeleted, pageWrap.getModel().getIsdeleted()); } if (pageWrap.getModel().getInfo() != null) { queryWrapper.lambda().eq(MemberRides::getInfo, pageWrap.getModel().getInfo()); queryWrapper.eq(MemberRides::getInfo, pageWrap.getModel().getInfo()); } if (pageWrap.getModel().getMemberId() != null) { queryWrapper.lambda().eq(MemberRides::getMemberId, pageWrap.getModel().getMemberId()); queryWrapper.eq(MemberRides::getMemberId, pageWrap.getModel().getMemberId()); } if (pageWrap.getModel().getBikeCode() != null) { queryWrapper.lambda().eq(MemberRides::getBikeCode, pageWrap.getModel().getBikeCode()); queryWrapper.eq(MemberRides::getBikeCode, pageWrap.getModel().getBikeCode()); } if (pageWrap.getModel().getBalance() != null) { queryWrapper.lambda().eq(MemberRides::getBalance, pageWrap.getModel().getBalance()); queryWrapper.eq(MemberRides::getBalance, pageWrap.getModel().getBalance()); } if (pageWrap.getModel().getParamId() != null) { queryWrapper.lambda().eq(MemberRides::getParamId, pageWrap.getModel().getParamId()); queryWrapper.eq(MemberRides::getParamId, pageWrap.getModel().getParamId()); } if (pageWrap.getModel().getRentSiteId() != null) { queryWrapper.lambda().eq(MemberRides::getRentSiteId, pageWrap.getModel().getRentSiteId()); queryWrapper.eq(MemberRides::getRentSiteId, pageWrap.getModel().getRentSiteId()); } if (pageWrap.getModel().getRentLockId() != null) { queryWrapper.lambda().eq(MemberRides::getRentLockId, pageWrap.getModel().getRentLockId()); queryWrapper.eq(MemberRides::getRentLockId, pageWrap.getModel().getRentLockId()); } if (pageWrap.getModel().getRentDate() != null) { queryWrapper.lambda().ge(MemberRides::getRentDate, Utils.Date.getStart(pageWrap.getModel().getRentDate())); queryWrapper.lambda().le(MemberRides::getRentDate, Utils.Date.getEnd(pageWrap.getModel().getRentDate())); queryWrapper.ge(MemberRides::getRentDate, Utils.Date.getStart(pageWrap.getModel().getRentDate())); queryWrapper.le(MemberRides::getRentDate, Utils.Date.getEnd(pageWrap.getModel().getRentDate())); } if (pageWrap.getModel().getRentCommondD() != null) { queryWrapper.lambda().eq(MemberRides::getRentCommondD, pageWrap.getModel().getRentCommondD()); queryWrapper.eq(MemberRides::getRentCommondD, pageWrap.getModel().getRentCommondD()); } if (pageWrap.getModel().getBackSiteId() != null) { queryWrapper.lambda().eq(MemberRides::getBackSiteId, pageWrap.getModel().getBackSiteId()); queryWrapper.eq(MemberRides::getBackSiteId, pageWrap.getModel().getBackSiteId()); } if (pageWrap.getModel().getBackLockId() != null) { queryWrapper.lambda().eq(MemberRides::getBackLockId, pageWrap.getModel().getBackLockId()); queryWrapper.eq(MemberRides::getBackLockId, pageWrap.getModel().getBackLockId()); } if (pageWrap.getModel().getBackDate() != null) { queryWrapper.lambda().ge(MemberRides::getBackDate, Utils.Date.getStart(pageWrap.getModel().getBackDate())); queryWrapper.lambda().le(MemberRides::getBackDate, Utils.Date.getEnd(pageWrap.getModel().getBackDate())); queryWrapper.ge(MemberRides::getBackDate, Utils.Date.getStart(pageWrap.getModel().getBackDate())); queryWrapper.le(MemberRides::getBackDate, Utils.Date.getEnd(pageWrap.getModel().getBackDate())); } if (pageWrap.getModel().getBackCommondId() != null) { queryWrapper.lambda().eq(MemberRides::getBackCommondId, pageWrap.getModel().getBackCommondId()); queryWrapper.eq(MemberRides::getBackCommondId, pageWrap.getModel().getBackCommondId()); } if (pageWrap.getModel().getBasePrice() != null) { queryWrapper.lambda().eq(MemberRides::getBasePrice, pageWrap.getModel().getBasePrice()); queryWrapper.eq(MemberRides::getBasePrice, pageWrap.getModel().getBasePrice()); } if (pageWrap.getModel().getBaseTime() != null) { queryWrapper.lambda().eq(MemberRides::getBaseTime, pageWrap.getModel().getBaseTime()); queryWrapper.eq(MemberRides::getBaseTime, pageWrap.getModel().getBaseTime()); } if (pageWrap.getModel().getUnitPrice() != null) { queryWrapper.lambda().eq(MemberRides::getUnitPrice, pageWrap.getModel().getUnitPrice()); queryWrapper.eq(MemberRides::getUnitPrice, pageWrap.getModel().getUnitPrice()); } if (pageWrap.getModel().getUnitTime() != null) { queryWrapper.lambda().eq(MemberRides::getUnitTime, pageWrap.getModel().getUnitTime()); queryWrapper.eq(MemberRides::getUnitTime, pageWrap.getModel().getUnitTime()); } if (pageWrap.getModel().getPrice() != null) { queryWrapper.lambda().eq(MemberRides::getPrice, pageWrap.getModel().getPrice()); queryWrapper.eq(MemberRides::getPrice, pageWrap.getModel().getPrice()); } if (pageWrap.getModel().getActualPrice() != null) { queryWrapper.lambda().eq(MemberRides::getActualPrice, pageWrap.getModel().getActualPrice()); queryWrapper.eq(MemberRides::getActualPrice, pageWrap.getModel().getActualPrice()); } if (pageWrap.getModel().getDuration() != null) { queryWrapper.lambda().eq(MemberRides::getDuration, pageWrap.getModel().getDuration()); queryWrapper.eq(MemberRides::getDuration, pageWrap.getModel().getDuration()); } if (pageWrap.getModel().getCloseDate() != null) { queryWrapper.lambda().ge(MemberRides::getCloseDate, Utils.Date.getStart(pageWrap.getModel().getCloseDate())); queryWrapper.lambda().le(MemberRides::getCloseDate, Utils.Date.getEnd(pageWrap.getModel().getCloseDate())); queryWrapper.ge(MemberRides::getCloseDate, Utils.Date.getStart(pageWrap.getModel().getCloseDate())); queryWrapper.le(MemberRides::getCloseDate, Utils.Date.getEnd(pageWrap.getModel().getCloseDate())); } if (pageWrap.getModel().getCloseStatus() != null) { queryWrapper.lambda().eq(MemberRides::getCloseStatus, pageWrap.getModel().getCloseStatus()); queryWrapper.eq(MemberRides::getCloseStatus, pageWrap.getModel().getCloseStatus()); } if (pageWrap.getModel().getOrdreId() != null) { queryWrapper.lambda().eq(MemberRides::getOrdreId, pageWrap.getModel().getOrdreId()); queryWrapper.eq(MemberRides::getOrdreId, pageWrap.getModel().getOrdreId()); } if (pageWrap.getModel().getIsStandard() != null) { queryWrapper.lambda().eq(MemberRides::getIsStandard, pageWrap.getModel().getIsStandard()); queryWrapper.eq(MemberRides::getIsStandard, pageWrap.getModel().getIsStandard()); } if (pageWrap.getModel().getPricingDetailId() != null) { queryWrapper.lambda().eq(MemberRides::getPricingDetailId, pageWrap.getModel().getPricingDetailId()); queryWrapper.eq(MemberRides::getPricingDetailId, pageWrap.getModel().getPricingDetailId()); } if (pageWrap.getModel().getIsHoliday() != null) { queryWrapper.lambda().eq(MemberRides::getIsHoliday, pageWrap.getModel().getIsHoliday()); queryWrapper.eq(MemberRides::getIsHoliday, pageWrap.getModel().getIsHoliday()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(MemberRides::getStatus, pageWrap.getModel().getStatus()); queryWrapper.eq(MemberRides::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getBackType() != null) { queryWrapper.lambda().eq(MemberRides::getBackType, pageWrap.getModel().getBackType()); queryWrapper.eq(MemberRides::getBackType, pageWrap.getModel().getBackType()); } if (pageWrap.getModel().getBackReason() != null) { queryWrapper.lambda().eq(MemberRides::getBackReason, pageWrap.getModel().getBackReason()); queryWrapper.eq(MemberRides::getBackReason, pageWrap.getModel().getBackReason()); } if (pageWrap.getModel().getBackInfo() != null) { queryWrapper.lambda().eq(MemberRides::getBackInfo, pageWrap.getModel().getBackInfo()); queryWrapper.eq(MemberRides::getBackInfo, pageWrap.getModel().getBackInfo()); } if (pageWrap.getModel().getBackUserid() != null) { queryWrapper.lambda().eq(MemberRides::getBackUserid, pageWrap.getModel().getBackUserid()); queryWrapper.eq(MemberRides::getBackUserid, pageWrap.getModel().getBackUserid()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(memberRidesMapper.selectPage(page, queryWrapper)); queryWrapper.orderByDesc(MemberRides::getCreateDate); queryWrapper.leftJoin(Member.class,Member::getId,MemberRides::getMemberId) .leftJoin(BaseParam.class,BaseParam::getId,MemberRides::getParamId) .leftJoin() return PageData.from(memberRidesJoinMapper.selectPage(page, queryWrapper)); } @Override 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/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,103 @@ package com.doumee.service.business.impl; import java.math.BigDecimal; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.dao.business.BaseParamMapper; import com.doumee.dao.business.MemberRidesMapper; import com.doumee.dao.business.PricingDetailMapper; import com.doumee.dao.business.PricingParamMapper; import com.doumee.dao.business.model.BaseParam; import com.doumee.dao.business.model.MemberRides; import com.doumee.dao.business.web.response.PricingRuleDTO; import com.doumee.service.business.PricingRuleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * * è·å计价è§å * @author T14 */ @Service public class PricingRuleServiceImpl implements PricingRuleService { @Autowired PricingParamMapper pricingParamMapper; @Autowired PricingDetailMapper pricingParamMapper; @Autowired MemberRidesMapper memberRidesMapper; @Autowired BaseParamMapper baseParamMapper; @Override public PricingRuleDTO getPricingRule(String goodaorderId) { QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(MemberRides::getOrdreId,goodaorderId); List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper); if (CollectionUtils.isEmpty(memberRides)){ return null; } PricingRuleDTO pricingRule = getPricingRule(memberRides); return pricingRule; } @Override public PricingRuleDTO getPricingRule(List<MemberRides> memberRidesList) { if (!CollectionUtils.isEmpty(memberRidesList)){ List<String> collect = memberRidesList.stream() .filter(s -> Objects.nonNull(s.getActualPrice())) .map(s -> s.getParamId()) .collect(Collectors.toList()); QueryWrapper<BaseParam> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(BaseParam::getIsdeleted, Constants.ZERO) .eq(BaseParam::getType, Constants.THREE) .in(BaseParam::getId,collect) .orderByDesc(BaseParam::getSortnum) .last("limit 1"); BaseParam baseParam = baseParamMapper.selectOne(wrapper); MemberRides memberRides = memberRidesList.stream() .filter(s -> baseParam.getId().equals(s.getParamId())) .findFirst().orElseThrow(() -> new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "没æè½¦è¾ç±»åç¼ç ")); PricingRuleDTO pricingRuleDTO = new PricingRuleDTO(); if (memberRides.getBaseTime() < 0){ //ä¸å£ä»·å®ä»· pricingRuleDTO.setStartFare(memberRides.getBasePrice()); pricingRuleDTO.setPrice(new BigDecimal("0")); pricingRuleDTO.setType(Constants.ONE); pricingRuleDTO.setParamId(baseParam.getId()); pricingRuleDTO.setBikeType(baseParam.getName()); pricingRuleDTO.setMemberRides(memberRides); }else { pricingRuleDTO.setStartFare(memberRides.getBasePrice()); pricingRuleDTO.setPrice(memberRides.getUnitPrice()); pricingRuleDTO.setType(Constants.TWO); pricingRuleDTO.setParamId(baseParam.getId()); pricingRuleDTO.setBikeType(baseParam.getName()); pricingRuleDTO.setMemberRides(memberRides); } return pricingRuleDTO; } return null; } } 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); }