From 99f77c0fd2ee8ed8840be5e5f99309b184a09e9f Mon Sep 17 00:00:00 2001 From: jiaosong <jiaosong6760@dingtalk.com> Date: 星期三, 18 十月 2023 11:27:57 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 521 ++++++++++++++++++++++++++++++--------------------------- 1 files changed, 277 insertions(+), 244 deletions(-) diff --git a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java index 0c8f1e1..0b87604 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java @@ -26,6 +26,7 @@ import com.doumee.dao.business.model.MemberRides; import com.doumee.dao.business.vo.GoodsorderExportVO; import com.doumee.dao.business.vo.GoodsorderTotalDataVO; +import com.doumee.dao.business.web.request.GoodsorderCanBanlanceDTO; import com.doumee.dao.business.web.request.MemberRidesQuery; import com.doumee.dao.business.web.request.RefundDTO; import com.doumee.dao.business.web.response.*; @@ -56,10 +57,9 @@ import java.net.UnknownHostException; import java.sql.Ref; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.stream.Collectors; @Service @@ -76,8 +76,6 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; - @Autowired - private MemberRidesMapper memberRidesMapper; @Autowired private MemberMapper memberMapper; @@ -200,20 +198,25 @@ MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(model); queryWrapper.selectAll(Goodsorder.class); - queryWrapper.selectAs(Member::getOpenid, Goodsorder::getMemberOpenid); + queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid); queryWrapper.leftJoin(Member.class, Member::getId ,Goodsorder::getMemberId); queryWrapper.select("(select max(r.done_date) from refund r where r.obj_id=t.id and r.status=2 ) as refund_date"); queryWrapper.select("(select sum(r.money) from refund r where r.obj_id=t.id and r.status=2) as refund_money"); //鏃堕棿娈电瓫閫� - queryWrapper.ge(model.getStartDate()!=null, Goodsorder::getPayDate, model.getStartDate()); - queryWrapper.le(model.getEndDate()!=null, Goodsorder::getPayDate, model.getEndDate()); + if (Objects.nonNull(model.getStartDate())){ + queryWrapper.ge(Goodsorder::getPayDate, Utils.Date.getStart(model.getStartDate())); + } + if (Objects.nonNull(model.getEndDate())){ + queryWrapper.le( Goodsorder::getPayDate, Utils.Date.getEnd(model.getEndDate())); + } queryWrapper.eq(model.getPayStatus() !=null,Goodsorder::getPayStatus,model.getPayStatus()); queryWrapper.like(model.getCode() !=null,Goodsorder::getCode,model.getCode()); queryWrapper.like(model.getId() !=null,Goodsorder::getId,model.getId()); queryWrapper.eq(model.getStatus() !=null,Goodsorder::getStatus,model.getStatus()); queryWrapper.like(model.getOnlineOrderid() !=null,Goodsorder::getOnlineOrderid,model.getOnlineOrderid()); - queryWrapper.like(model.getMemberOpenid() !=null,Member::getOpenid,model.getMemberOpenid()); + queryWrapper.like(model.getOpenid() !=null,Member::getOpenid,model.getOpenid()); queryWrapper.eq(Goodsorder::getIsdeleted,Constants.ZERO); + queryWrapper.eq(Goodsorder::getPayStatus,Constants.ONE); queryWrapper.orderByDesc(Goodsorder::getPayDate); return queryWrapper; } @@ -238,31 +241,43 @@ @Override public HomeResponse getHome(String memberId){ HomeResponse homeResponse = new HomeResponse(); + String fullPath = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FILE_DIR).getCode() + + systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode() ; homeResponse.setParkName(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.PROJECT_NAME).getCode()); homeResponse.setServerPhone(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.SERVER_PHONE).getCode()); - homeResponse.setLeaseNoticeUrl(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.LEASE_NOTICE_URL).getCode()); + homeResponse.setLeaseNoticeUrl(fullPath + systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.LEASE_NOTICE_URL).getCode()); homeResponse.setLeaseNotice(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.LEASE_NOTICE).getCode()); homeResponse.setDeposit(new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_DEPOSIT).getCode())); homeResponse.setTips(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.TIPS).getCode()); - homeResponse.setLeaseVideoUrl(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_TIPS_VIDEO).getCode()); - homeResponse.setPricingRules(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRICING_RULE).getCode()); + homeResponse.setLeaseVideoUrl(fullPath + systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_TIPS_VIDEO).getCode()); homeResponse.setStopServeTips(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_TIPS).getCode()); - homeResponse.setIsStopServe(Constants.ZERO); + homeResponse.setIsStopServe(this.checkTemporaryStop()?1:0); + homeResponse.setIsBusiness(this.checkBusiness()?0:1); + homeResponse.setUnBusinessTips("钀ヤ笟鏃堕棿涓�"+ systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_STARTTIME).getCode() +" ~ "+systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_ENDTIME).getCode()+"锛岃鍦ㄨ惀涓氭椂闂村唴浣跨敤鏈郴缁�"); homeResponse.setAdList(adMapper.selectList(new QueryWrapper<Ad>() .eq("isdeleted",Constants.ZERO) .eq("status",Constants.ZERO) .orderByDesc("create_date") - )); - //鏌ヨ鏄惁瀛樺湪 宸叉敮浠樼殑 鎶奸噾璁㈠崟 - Integer status = this.goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>() - .eq("member_id",memberId) - .eq("status",Constants.goodsorderStatus.pay)); - homeResponse.setDepositStatus(status); + ));; + if(!Objects.isNull(homeResponse.getAdList())&&homeResponse.getAdList().size()>Constants.ZERO){ + homeResponse.getAdList().forEach(i->{ + i.setImgfullurl(fullPath + i.getImgurl()); + }); + } homeResponse.setRideStatus(-1); - if(homeResponse.getDepositStatus()==Constants.goodsorderStatus.pay) { + //鏌ヨ鏄惁瀛樺湪 宸叉敮浠樼殑 鎶奸噾璁㈠崟 + Goodsorder goodsorder = this.goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>() + .eq("member_id",memberId) + .eq("status",Constants.goodsorderStatus.pay) + .last(" limit 1 ")); + if(!Objects.isNull(goodsorder)&&goodsorder.getStatus().equals(Constants.goodsorderStatus.pay)){ + homeResponse.setDepositStatus(Constants.goodsorderStatus.pay); + homeResponse.setGoodsOrderId(goodsorder.getId()); //鏌ヨ褰撳墠楠戣鐘舵�� - MemberRides memberRides = memberRidesMapper.selectOne(new QueryWrapper<MemberRides>().eq("member_id", memberId) - .orderByDesc(" create_date ") + MemberRides memberRides = memberRidesJoinMapper.selectOne(new QueryWrapper<MemberRides>().lambda() + .eq(MemberRides::getMemberId, memberId) + .eq(MemberRides::getOrdreId,goodsorder.getId()) + .orderByDesc(MemberRides::getCreateDate) .last(" limit 1 ")); if (!Objects.isNull(memberRides)) { homeResponse.setRideStatus(memberRides.getStatus()); @@ -271,14 +286,21 @@ if(!Objects.isNull(baseParam)){ memberRidesResponse.setBikeType(baseParam.getName()); } + memberRidesResponse.setRideId(memberRides.getId()); memberRidesResponse.setRideStartTime(memberRides.getRentDate()); + memberRidesResponse.setRideStartTimeStr(DateUtil.DateToStr(memberRides.getRentDate(),"HH:mm")); memberRidesResponse.setRideEndTime(memberRides.getBackDate()); - memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(),memberRidesResponse.getRideEndTime())); + memberRidesResponse.setRideEndTimeStr(DateUtil.DateToStr(memberRides.getBackDate(),"HH:mm")); + memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRides.getRentDate(),memberRides.getBackDate())); memberRidesResponse.setBikeCode(memberRides.getBikeCode()); memberRidesResponse.setBasePrice(memberRides.getBasePrice()); memberRidesResponse.setBaseTime(memberRides.getBaseTime()); - memberRidesResponse.setUnitTime(memberRidesResponse.getUnitTime()); - memberRidesResponse.setUnitPrice(memberRidesResponse.getUnitPrice()); + memberRidesResponse.setUnitTime(memberRides.getUnitTime()); + memberRidesResponse.setUnitPrice(memberRides.getUnitPrice()); + memberRidesResponse.setPriceRole(PricingDetailServiceImpl.getRoleNameByParam( + memberRidesResponse.getBasePrice(),memberRidesResponse.getBaseTime(), + memberRidesResponse.getUnitPrice() + ,memberRidesResponse.getUnitTime())); homeResponse.setMemberRidesResponse(memberRidesResponse); } } @@ -306,6 +328,7 @@ payOrderDTO.setPayWay(goodsorder.getPayWay()); payOrderDTO.setMoney(Constants.translateMoney(goodsorder.getMoney())); payOrderDTO.setPayDate(goodsorder.getPayDate()); + payOrderDTO.setRefundType(99); payOrderDTO.setOnlineorderId(goodsorder.getOnlineOrderid()); payOrderDTOList.add(0,payOrderDTO); if (!CollectionUtils.isEmpty(refunds)){ @@ -329,141 +352,146 @@ goodsorderDetailDTO.setModel(goodsorder);//璁㈠崟瀵硅薄 return goodsorderDetailDTO; } + @Override + public void forceCloseGoodsorder(String orderId) { + //鏌ヨ璁㈠崟 淇℃伅 + if(StringUtils.isBlank(orderId)){ + throw new BusinessException(ResponseStatus.BAD_REQUEST ); + } + Goodsorder goodsorder = goodsorderMapper.selectById(orderId); + if(goodsorder == null ){ + throw new BusinessException(ResponseStatus.DATA_EMPTY ); + } + if(Constants.formatIntegerNum(goodsorder.getStatus()) != Constants.GOODSORDER_STATUS.HAVING_PAY.getKey() ){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヨ鍗曞綋鍓嶇姸鎬佷笉鏀寔缁撶畻鎿嶄綔锛岃灏濊瘯鍒锋柊鍒楄〃閲嶈瘯锛�" ); + } + //璁㈠崟缁撶畻 + Date date = new Date(); + goodsorder.setEditDate(date); + LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); + goodsorder.setEditor(user.getId()); + closeGoodsorder( goodsorder,Constants.REFUND_TYPE.PLAT_FORCE.getKey()); + } @Transactional(rollbackFor = {Exception.class,BusinessException.class}) @Override - public void closerGoodsorder(String orderId) { - - - LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); - Goodsorder goodsorder = goodsorderMapper.selectById(orderId); - QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(MemberRides::getOrdreId,orderId); - List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper); + public void closeGoodsorder( Goodsorder goodsorder ,int type ) { + List<MemberRides> memberRides = getMemberRidesForClose(goodsorder.getId()); + //榛樿缁撶畻涓烘娂閲戦噾棰� + BigDecimal closeMoney = new BigDecimal(0.00); 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(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻"); + //楠戣鎬绘椂闀� + closeMoney = getCloseMoneyByRides(memberRides,true).getAmount(); + //瀹為檯缁撶畻浠锋牸锛岃褰曞湪鏈�楂樿溅鍨嬭褰曚笂 + memberRides.get(0).setActualPrice(closeMoney); + for(MemberRides model :memberRides){ + MemberRides up = new MemberRides(); + up.setId(model.getId()); + up.setActualPrice(model.getActualPrice()); + up.setCloseDate(goodsorder.getEditDate()); + up.setCloseStatus(Constants.ONE); + up.setEditor(goodsorder.getEditor()); + up.setEditDate(goodsorder.getEditDate()); + //鏇存柊楠戣璁板綍鐨勮绠楅噾棰濆拰鐘舵�� + memberRidesJoinMapper.updateById(up); } - - 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 bigDecimal = new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime())); - BigDecimal basePrice = pricingRule.getMemberRides().getBasePrice(); - BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice() - .multiply(bigDecimal.divide(pricingRule.getMemberRides().getUnitPrice(),BigDecimal.ROUND_UP)); - ridesDetailResponse.setAmount(basePrice.add(multiply)); - }else { - ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice()); - } - ridesDetailResponse.setBikeType(pricingRule.getBikeType()); - ridesDetailResponse.setDuration(durationSum); - ridesDetailResponse.setMemberRidesResponseList(collect); - - if(goodsorder.getMoney().compareTo(ridesDetailResponse.getAmount())>Constants.ZERO){ - - RefundDTO refundDTO = new RefundDTO(); - refundDTO.setOrderId(orderId); - refundDTO.setCanBalance(goodsorder.getMoney()); - refundDTO.setRefundAmount(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount())); - refundDTO.setTotalAmount(goodsorder.getMoney()); - refundDTO.setMemberId(goodsorder.getMemberId()); - refundDTO.setReason("骞冲彴寮哄埗缁撶畻閫�娆�"); - refundDTO.setType(Constants.REFUND_TYPE.PLAT_AUTO.getKey()); - Refund refund = wxMiniUtilService.wxRefund(refundDTO); - - //瀛樺偍 娑堣垂浜ゆ槗娴佹按 - Transactions transactions = new Transactions(); - transactions.setMemberId(goodsorder.getMemberId()); - transactions.setCreateDate(new Date()); - transactions.setIsdeleted(Constants.ZERO); - transactions.setOrderId(orderId); - transactions.setMoney(goodsorder.getMoney().compareTo(ridesDetailResponse.getAmount())<=Constants.ZERO?goodsorder.getMoney():ridesDetailResponse.getAmount()); - transactions.setType(Constants.transactionsType.consumption); - transactions.setDoneDate(new Date()); - transactions.setTitle("娑堣垂缁撶畻"); - transactions.setContent("缁撶畻瀹為檯娑堣垂"); - transactions.setBalance(BigDecimal.ZERO); - transactions.setObjId(orderId); - transactions.setObjType(Constants.ONE); - transactionsMapper.insert(transactions); - - Goodsorder update = new Goodsorder(); - update.setId(goodsorder.getId()); - update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey()); - update.setCloseMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount())); - update.setCloseId(refund.getId()); - update.setCloseDate(refund.getDoneDate()); - update.setCloseInfo(refund.getInfo()); - update.setCloseUserId(principal.getId()); - update.setCloseType(Constants.ONE); - goodsorderMapper.updateById(update); - } - }else { - + } + Goodsorder update = new Goodsorder(); + update.setId(goodsorder.getId()); + update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey()); + update.setCloseMoney(goodsorder.getMoney()); + update.setCloseDate(goodsorder.getEndDate()); + update.setCloseInfo(Constants.REFUND_TYPE.get(type).getInfo()); + update.setCloseUserId(goodsorder.getEditor()); + if(Constants.REFUND_TYPE.PLAT_FORCE.getKey() == type){ + //濡傛灉鏄己鍒剁粨绠� + update.setCloseType(Constants.ONE); + }else if(Constants.REFUND_TYPE.NORMAL.getKey() == type){ + //濡傛灉鏄嚜琛岀祼绠� + update.setCloseType(Constants.ZERO); + }else{ + //濡傛灉鏄钩鍙拌嚜鍔ㄧ粨绠� + update.setCloseType(Constants.TWO); + } + int refundMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(closeMoney)).intValue();//璁$畻浠锋牸 + if(refundMoney > 0){ + //濡傛灉鏈夐��娆撅紝鐢宠寰俊閫�娆撅紝璁板綍閫�娆句氦鏄撴祦姘� RefundDTO refundDTO = new RefundDTO(); - refundDTO.setOrderId(orderId); + refundDTO.setOrderId(goodsorder.getId()); refundDTO.setCanBalance(goodsorder.getMoney()); - refundDTO.setRefundAmount(goodsorder.getMoney()); + refundDTO.setRefundAmount(new BigDecimal(refundMoney)); refundDTO.setTotalAmount(goodsorder.getMoney()); refundDTO.setMemberId(goodsorder.getMemberId()); - refundDTO.setReason("骞冲彴寮哄埗缁撶畻閫�娆�"); - refundDTO.setType(Constants.REFUND_TYPE.PLAT_FORCE.getKey()); + refundDTO.setReason(Constants.REFUND_TYPE.get(type).getName()); + refundDTO.setType(type); Refund refund = wxMiniUtilService.wxRefund(refundDTO); - + update.setCloseId(refund.getId()); //瀛樺偍 娑堣垂浜ゆ槗娴佹按 Transactions transactions = new Transactions(); + transactions.setId(Constants.getUUID()); transactions.setMemberId(goodsorder.getMemberId()); transactions.setCreateDate(new Date()); transactions.setIsdeleted(Constants.ZERO); - transactions.setOrderId(orderId); - transactions.setMoney(goodsorder.getMoney()); - transactions.setType(Constants.transactionsType.consumption); + transactions.setOrderId(goodsorder.getId()); + transactions.setMoney(goodsorder.getMoney().subtract(new BigDecimal(refundMoney))); + transactions.setType(Constants.TRANSACTIONS_TYPE.CONSUMPTION.getKey()); transactions.setDoneDate(new Date()); - transactions.setTitle("娑堣垂缁撶畻"); - transactions.setContent("缁撶畻瀹為檯娑堣垂"); + transactions.setTitle(Constants.TRANSACTIONS_TYPE.CONSUMPTION.getName()); + transactions.setContent(Constants.TRANSACTIONS_TYPE.CONSUMPTION.getInfo()); transactions.setBalance(BigDecimal.ZERO); - transactions.setObjId(orderId); + transactions.setObjId(goodsorder.getId()); transactions.setObjType(Constants.ONE); transactionsMapper.insert(transactions); - - Goodsorder update = new Goodsorder(); - update.setId(goodsorder.getId()); - update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey()); - update.setCloseMoney(goodsorder.getMoney()); - update.setCloseId(refund.getId()); - update.setCloseDate(refund.getDoneDate()); - update.setCloseInfo(refund.getInfo()); - update.setCloseUserId(principal.getId()); - update.setCloseType(Constants.ONE); - goodsorderMapper.updateById(update); - } + //淇敼璁㈠崟淇℃伅 + goodsorderMapper.updateById(update); + } + private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,boolean isClose) { + RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); + BigDecimal closeMoney = new BigDecimal(0.00); + int durationSum = 0; + //鍙栨渶楂樿溅鍨嬭绠楁柟妗堢粨绠楄鍗� + for(MemberRides rides : memberRides){ + if ( isClose && Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(rides.getStatus()))){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻"); + } + durationSum += Constants.formatIntegerNum(rides.getDuration());//绱楠戣锛堣璐癸級鏃堕暱 + } + MemberRides topRides =memberRides.get(0); + if(durationSum > 0 && topRides != null){ + int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); + closeMoney = Constants.formatDecimalNum(topRides.getBasePrice()); + //濡傛灉鏄竴鍙d环鏂瑰紡锛屼环鏍肩洿鎺ヤ负涓�鍙d环baseMoney,濡傛灉涓嶆槸璁$畻姝e父浠锋牸 + if(baseTime != -1){//涓嶆槸涓�鍙d环 + if(durationSum > baseTime && Constants.formatIntegerNum(topRides.getUnitTime())>0){ + //濡傛灉瓒呭嚭浜嗚捣姝ヤ环鏍硷紝璁$畻瓒呭嚭浠锋牸 + BigDecimal unit = new BigDecimal(durationSum-baseTime).divide(new BigDecimal(topRides.getUnitTime()), 0, BigDecimal.ROUND_UP); + //璁$畻閲戦绱瓒呭嚭閮ㄩ棬浠锋牸锛堣秴鍑烘椂闂村崟浣�*瓒呭嚭鍗曚綅鏃堕棿浠锋牸锛� + closeMoney = closeMoney.add(unit.multiply(Constants.formatDecimalNum(topRides.getUnitPrice()))); + } + } + } + ridesDetailResponse.setDuration(durationSum); + ridesDetailResponse.setAmount(closeMoney); + ridesDetailResponse.setBikeType(topRides.getParamName()); + return ridesDetailResponse; + } + private List<MemberRides> getMemberRidesForClose(String id) { + + MPJLambdaWrapper<MemberRides> wrapper = new MPJLambdaWrapper<>(); + wrapper.eq(MemberRides::getOrdreId,id); + wrapper.selectAll(MemberRides.class).selectAs(BaseParam::getName, MemberRides::getParamName); + wrapper.leftJoin(BaseParam.class, BaseParam::getId, MemberRides::getParamId); + wrapper.orderByDesc(BaseParam::getSortnum);//鍙栨渶楂樿溅鍨嬩綔涓鸿浠锋柟妗� + //鏌ヨ鎵�鏈夐獞琛岃褰� + List<MemberRides> memberRides = memberRidesJoinMapper.selectList(wrapper); + return memberRides; } @Override - public void backGoodsorder(String orderId, BigDecimal money) { - + public void backGoodsorder(String orderId, BigDecimal money,String reason) { LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Goodsorder goodsorder = goodsorderMapper.selectById(orderId); QueryWrapper<Refund> wrapper = new QueryWrapper<>(); @@ -483,10 +511,39 @@ refundDTO.setRefundAmount(money); refundDTO.setTotalAmount(goodsorder.getMoney()); refundDTO.setMemberId(goodsorder.getMemberId()); - refundDTO.setReason("骞冲彴閫�娆�"); + refundDTO.setReason(reason); refundDTO.setType(Constants.REFUND_TYPE.BACK.getKey()); Refund refund = wxMiniUtilService.wxRefund(refundDTO); + }else { + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"閫�娆鹃噾棰濅笉鍏佽瓒呰繃"+canBalance); } + } + + @Override + public GoodsorderCanBanlanceDTO getGoodsorderCanBanlanceDTO(String orderId) { + + Goodsorder goodsorder = goodsorderMapper.selectById(orderId); + if(goodsorder ==null){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + QueryWrapper<Refund> wrapper = new QueryWrapper<>(); + wrapper.lambda() + .eq(Refund::getObjId,orderId) + .orderByDesc(Refund::getCreateDate); + List<Refund> refunds = refundMapper.selectList(wrapper); + GoodsorderCanBanlanceDTO goodsorderCanBanlanceDTO = new GoodsorderCanBanlanceDTO(); + goodsorderCanBanlanceDTO.setGoodsorderMoney(goodsorder.getMoney()); + goodsorderCanBanlanceDTO.setCloseMoney(goodsorder.getCloseMoney()); + if (!CollectionUtils.isEmpty(refunds)){ + BigDecimal reduce = refunds.stream().map(s -> s.getMoney()).reduce(new BigDecimal("0"), (a, b) -> b.add(a)); + Refund refund = refunds.stream().findFirst().orElse(null); + goodsorderCanBanlanceDTO.setHasRefundMoney(reduce); + goodsorderCanBanlanceDTO.setCanBanlanceMoney(refund.getCanBalance().subtract(refund.getMoney())); + }else { + goodsorderCanBanlanceDTO.setHasRefundMoney(new BigDecimal("0")); + goodsorderCanBanlanceDTO.setCanBanlanceMoney(goodsorder.getMoney()); + } + return goodsorderCanBanlanceDTO; } @Override @@ -544,38 +601,46 @@ } @Override public RidesDetailResponse getRidesDetailResponse(String id) { - QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(MemberRides::getOrdreId,id); - List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper); + Goodsorder goodsorder = goodsorderMapper.selectById(id); + if(goodsorder ==null){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + List<MemberRides> memberRides = getMemberRidesForClose(id); if (!CollectionUtils.isEmpty(memberRides)){ - PricingRuleDTO pricingRule = pricingRuleService.getPricingRule(memberRides); - RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); + //棰勮缁撶畻浠锋牸鍜岃绠楁椂闀� + int freeTime = 0; + try { + freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); + }catch (Exception e){ + } + int finalFreeTime = freeTime; List<MemberRidesResponse> collect = memberRides.stream().map(s -> { MemberRidesResponse memberRidesResponse = new MemberRidesResponse(); + Date endTime =s.getBackDate(); + int rideTime =DateUtil.betweenMin(s.getRentDate(), endTime); memberRidesResponse.setRideStartTime(s.getRentDate()); - memberRidesResponse.setRideEndTime(s.getBackDate()); - memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(), memberRidesResponse.getRideEndTime())); + memberRidesResponse.setRideEndTime(endTime); + memberRidesResponse.setRideTime(rideTime); 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.setUnitPrice(s.getUnitPrice()); memberRidesResponse.setUnitTime(s.getUnitTime()); + if ( Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(s.getStatus()))){ + //濡傛灉鏄獞琛屼腑 + s.setDuration(rideTime> finalFreeTime ?(rideTime- finalFreeTime):0); + } + s.setRideTime(rideTime); 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 ridesDetailResponse = getCloseMoneyByRides(memberRides,false);; + if(Constants.formatIntegerNum(goodsorder.getStatus())!= Constants.goodsorderStatus.pay){ + //濡傛灉闈炲凡鏀粯浣嗘湭缁撶畻锛屼娇鐢ㄨ鍗曢噾棰� + ridesDetailResponse.setAmount(goodsorder.getCloseMoney()); } - ridesDetailResponse.setBikeType(pricingRule.getBikeType()); - ridesDetailResponse.setDuration(durationSum); ridesDetailResponse.setMemberRidesResponseList(collect); return ridesDetailResponse; } @@ -597,9 +662,13 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸叉敮浠樿繃瀹氶噾锛屾棤娉曢噸澶嶈鎿嶄綔"); } //鏄惁澶勪簬灏忕▼搴忓仠姝㈡湇鍔℃椂闂村唴 - this.checkTemporaryStop(); + if(this.checkTemporaryStop()){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_TIPS).getCode()); + }; //鏄惁澶勪簬钀ヤ笟鏃堕棿 - this.checkBusiness(); + if(this.checkBusiness()){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钀ヤ笟鏃堕棿涓�"+ systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_STARTTIME).getCode() +" ~ "+systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_ENDTIME).getCode()+"锛岃鍦ㄨ惀涓氭椂闂村唴浣跨敤鏈郴缁�"); + }; Goodsorder goodsorder = new Goodsorder(); goodsorder.setId(Constants.getUUID()); goodsorder.setCreateDate(new Date()); @@ -618,8 +687,8 @@ request.setBody("鏀粯鎶奸噾"); request.setAttach("createGoodsOrder"); request.setOutTradeNo(goodsorder.getId()); -// request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getMoney().toString())); - request.setTotalFee(1); + request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getMoney().toString())); +// request.setTotalFee(1); request.setSpbillCreateIp(this.getIpAddr()); request.setTimeStart(DateUtil.DateToString(new Date(), "yyyyMMddHHmmss")); request.setOpenid(member.getOpenid()); @@ -635,21 +704,24 @@ * 楠岃瘉钀ヤ笟鏃堕棿 */ @Override - public void checkBusiness(){ + public Boolean checkBusiness(){ String businessStartTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_STARTTIME).getCode(); String businessEndTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_ENDTIME).getCode(); - String nowTime = DateUtil.getDate(new Date(),"HH:mm"); + LocalTime currentTime = LocalTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm"); + String nowTime = currentTime.format(formatter); if(Integer.valueOf(nowTime.replace(":",""))<= Integer.valueOf(businessStartTime.replace(":","")) ||Integer.valueOf(nowTime.replace(":","")) > Integer.valueOf(businessEndTime.replace(":",""))){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钀ヤ笟鏃堕棿涓�06:00 ~ 23:59锛岃鍦ㄨ惀涓氭椂闂村唴浣跨敤鏈郴缁�"); + return true; } + return false; } /** * 涓存椂鍋滄鏈嶅姟 鏈氦鎶奸噾鐨勭敤鎴凤紝鏃犳硶鎵溅浣跨敤锛涘凡缁忎氦杩囨娂閲戠殑鐢ㄦ埛鍙互缁х画鎵爜楠戣锛� */ @Override - public void checkTemporaryStop(){ + public Boolean checkTemporaryStop(){ if(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.IS_STOP_SERVE).getCode().equals(Constants.ONE)){ String stopServeStartTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_STARTTIME).getCode(); String stopServeEndTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_ENDTIME).getCode(); @@ -657,94 +729,55 @@ long s = DateUtil.StringToDate(stopServeStartTime).getTime(); long e = DateUtil.StringToDate(stopServeEndTime).getTime(); if(e>System.currentTimeMillis()&&s<=System.currentTimeMillis()){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_TIPS).getCode()); + return true; } } + return false; } @Override - @Transactional(rollbackFor = {Exception.class,BusinessException.class}) - public void goodsOrderSettlement(String orderId) { - Goodsorder goodsorder = goodsorderMapper.selectById(orderId); - QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(MemberRides::getOrdreId,orderId); - List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper); - if (!CollectionUtils.isEmpty(memberRides)){ - boolean exitUnBack = memberRides.stream().anyMatch(s -> !Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey().equals(s.getStatus())); - 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()); + public void autoCloseOrder( ) { + Goodsorder goodsorder = new Goodsorder(); + goodsorder.setIsdeleted(Constants.ZERO); + goodsorder.setStatus(Constants.goodsorderStatus.pay); + List<Goodsorder> list = findList(goodsorder); + if (!CollectionUtils.isEmpty(list)){ + Date date = new Date(); + list.forEach(s->{ + try { + s.setEditDate(date); + s.setEditor(null); + s.setCloseDate(date); - 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())).divide(new BigDecimal(pricingRule.getMemberRides().getUnitTime())).setScale(0,BigDecimal.ROUND_CEILING)); - 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(); + closeGoodsorder(s,Constants.REFUND_TYPE.PLAT_AUTO.getKey()); + }catch (BusinessException e){ - //鑻ユ秷璐归噾棰� 澶т簬 璁㈠崟鎶奸噾锛屽垯涓嶈繘琛岄��娆句笟鍔� - if(goodsorder.getMoney().compareTo(ridesDetailResponse.getAmount())>Constants.ZERO){ - RefundDTO refundDTO = new RefundDTO(); - refundDTO.setOrderId(orderId); - refundDTO.setCanBalance(goodsorder.getMoney()); - refundDTO.setRefundAmount(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount())); - refundDTO.setTotalAmount(goodsorder.getMoney()); - refundDTO.setMemberId(goodsorder.getMemberId()); - refundDTO.setReason("鐢ㄦ埛涓诲姩閫�娆�"); - refundDTO.setType(Constants.REFUND_TYPE.NORMAL.getKey()); - refund = wxMiniUtilService.wxRefund(refundDTO); - } + }catch (Exception e){ - //瀛樺偍 娑堣垂 浜ゆ槗娴佹按 - Transactions transactions = new Transactions(); - transactions.setMemberId(goodsorder.getMemberId()); - transactions.setCreateDate(new Date()); - transactions.setIsdeleted(Constants.ZERO); - transactions.setOrderId(orderId); - transactions.setMoney(goodsorder.getMoney().compareTo(ridesDetailResponse.getAmount())<=Constants.ZERO?goodsorder.getMoney():ridesDetailResponse.getAmount()); - transactions.setType(Constants.transactionsType.consumption); - transactions.setDoneDate(new Date()); - transactions.setTitle("娑堣垂缁撶畻"); - transactions.setContent("缁撶畻瀹為檯娑堣垂"); - transactions.setBalance(BigDecimal.ZERO); - transactions.setObjId(orderId); - transactions.setObjType(Constants.ONE); - transactionsMapper.insert(transactions); - - Goodsorder update = new Goodsorder(); - update.setId(goodsorder.getId()); - update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey()); - update.setCloseMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount())); - update.setCloseId(!Objects.isNull(refund)?refund.getId():null); - update.setCloseDate(!Objects.isNull(refund)?refund.getDoneDate():null); - update.setCloseInfo(!Objects.isNull(refund)?refund.getInfo():null); - update.setCloseType(Constants.ONE); - goodsorderMapper.updateById(update); + } + }); } + + } + @Override + public void goodsOrderSettlement(String orderId) { + if(StringUtils.isBlank(orderId)){ + throw new BusinessException(ResponseStatus.BAD_REQUEST ); + } + Goodsorder goodsorder = goodsorderMapper.selectById(orderId); + if(goodsorder == null ){ + throw new BusinessException(ResponseStatus.DATA_EMPTY ); + } + if(Constants.formatIntegerNum(goodsorder.getStatus()) != Constants.GOODSORDER_STATUS.HAVING_PAY.getKey() ){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヨ鍗曞綋鍓嶇姸鎬佷笉鏀寔缁撶畻鎿嶄綔锛岃灏濊瘯鍒锋柊鍒楄〃閲嶈瘯锛�" ); + } + //璁㈠崟缁撶畻 + Date date = new Date(); + goodsorder.setEditDate(date); + goodsorder.setEditor(null); + closeGoodsorder( goodsorder,Constants.REFUND_TYPE.NORMAL.getKey()); } @@ -767,12 +800,12 @@ transactions.setIsdeleted(Constants.ZERO); transactions.setOrderId(goodsorder.getId()); transactions.setMoney(goodsorder.getMoney()); - transactions.setType(Constants.transactionsType.deposit); + transactions.setType(Constants.TRANSACTIONS_TYPE.DEPOSIT.getKey()); transactions.setPreOrderid(goodsorder.getPreOrderid()); transactions.setOnlineOrderid(goodsorder.getOnlineOrderid()); transactions.setDoneDate(new Date()); - transactions.setTitle("鏀粯"); - transactions.setContent("鎶奸噾鏀粯"); + transactions.setTitle(Constants.TRANSACTIONS_TYPE.DEPOSIT.getName()); + transactions.setContent(Constants.TRANSACTIONS_TYPE.DEPOSIT.getInfo()); transactions.setBalance(goodsorder.getMoney()); transactions.setObjId(goodsorder.getId()); transactions.setObjType(Constants.ZERO); -- Gitblit v1.9.3