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
@@ -38,6 +38,7 @@ int all =2; int partful = 3; } public interface goodsorderStatus{ int waitPay =0; int pay =1; @@ -96,10 +97,6 @@ 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 ; @@ -129,12 +126,110 @@ 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); @@ -156,12 +251,14 @@ } 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)) { @@ -210,6 +307,7 @@ } return encdeStr; } public static String trimEndSpaceStr(String outPut){ String newOutPut = ""; if(StringUtils.isNotBlank(outPut)){ 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; } 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/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,14 @@ * @param id * @return */ Goodsorder closerGoodsorder(String id); void closerGoodsorder(String id); /** * æ¼éæ¯ä»ä¸å¡ * @param id * @return */ RidesDetailResponse getRidesDetailResponse(String id); } 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) { @@ -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,130 @@ } @Override public Goodsorder closerGoodsorder(String id) { public void closerGoodsorder(String id) { LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Goodsorder goodsorder = goodsorderMapper.selectById(id); return null; 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); 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)){ 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 ridesDetailResponse; } return new RidesDetailResponse(); } @Override public Object createGoodsOrderPay(String memberId){ 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; } }