From 4fabfe4dbd2eb28d07a4350597d314958cc1c281 Mon Sep 17 00:00:00 2001 From: MrShi <1878285526@qq.com> Date: 星期四, 09 十月 2025 11:16:43 +0800 Subject: [PATCH] 优化 --- server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 477 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 342 insertions(+), 135 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 c451301..74ead5c 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 @@ -6,6 +6,7 @@ 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.doumee.core.annotation.excel.ExcelExporter; import com.doumee.core.constants.Constants; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; @@ -28,6 +29,8 @@ 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.vo.BikeIncomeDetailReportVO; +import com.doumee.dao.business.vo.BikeIncomeReportVO; import com.doumee.dao.business.vo.GoodsorderExportVO; import com.doumee.dao.business.vo.GoodsorderTotalDataVO; import com.doumee.dao.business.web.request.*; @@ -58,10 +61,14 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.math.BigDecimal; import java.net.InetAddress; +import java.net.URLEncoder; import java.net.UnknownHostException; +import java.nio.charset.Charset; import java.sql.Ref; import java.time.LocalTime; import java.time.format.DateTimeFormatter; @@ -72,8 +79,6 @@ @Service @Slf4j public class GoodsorderServiceImpl implements GoodsorderService { - - @Autowired private GoodsorderMapper goodsorderMapper; @@ -201,7 +206,9 @@ MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Goodsorder.class); queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid); + queryWrapper.selectAs(BaseParam::getType, Goodsorder::getBikeType); queryWrapper.leftJoin(Member.class, Member::getId ,Goodsorder::getMemberId); + queryWrapper.leftJoin(BaseParam.class, BaseParam::getId ,Goodsorder::getParamId); 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"); //鏃堕棿娈电瓫閫� @@ -215,6 +222,9 @@ queryWrapper.eq(Goodsorder::getPayStatus,Constants.ONE); queryWrapper.orderByAsc(Goodsorder::getPayDate); goodsorderExportVOIPage = goodsorderJoinMapper.selectJoinPage(page, GoodsorderExportVO.class, queryWrapper); + + + }else{ MPJLambdaWrapper<Refund> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAs(Refund::getMoney,GoodsorderExportVO::getRefundMoney); @@ -242,6 +252,7 @@ if (!CollectionUtils.isEmpty(goodsorderExportVOIPage.getRecords())){ goodsorderExportVOIPage.getRecords().forEach(s->{ + s.setBikeType(s.getType()==Constants.ZERO?s.getBikeType():Constants.ONE); s.setMoney(Constants.translateMoney(s.getMoney())); s.setRefundMoney(Constants.translateMoney(s.getRefundMoney())); s.setCloseMoney(Constants.translateMoney(s.getCloseMoney()).compareTo(s.getMoney()) > 0 ? s.getMoney() : Constants.translateMoney(s.getCloseMoney())); @@ -259,7 +270,6 @@ MPJLambdaWrapper<Goodsorder> queryWrapper = initQueryParamByModel(model); queryWrapper.orderByAsc(Goodsorder::getPayDate); goodsorderList = goodsorderJoinMapper.selectJoinList(GoodsorderExportVO.class,queryWrapper); - }else{ MPJLambdaWrapper<Refund> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAs(Refund::getMoney,GoodsorderExportVO::getRefundMoney); @@ -286,6 +296,7 @@ } if (!CollectionUtils.isEmpty(goodsorderList)){ goodsorderList.forEach(s->{ + s.setBikeType(s.getType()==Constants.ZERO?s.getBikeType():Constants.ONE); s.setMoney(Constants.translateMoney(s.getMoney())); s.setCloseMoney(Constants.translateMoney(s.getCloseMoney()).compareTo(s.getMoney()) > 0 ? s.getMoney() : Constants.translateMoney(s.getCloseMoney())); s.setRefundMoney(Constants.translateMoney(s.getRefundMoney())); @@ -299,10 +310,13 @@ queryWrapper.selectAll(Goodsorder.class); queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid); queryWrapper.selectAs(DiscountMember::getName, Goodsorder::getDiscountName); + queryWrapper.selectAs(BaseParam::getType, Goodsorder::getBikeType); queryWrapper.leftJoin(Member.class, Member::getId ,Goodsorder::getMemberId); - queryWrapper.leftJoin(DiscountMember.class, DiscountMember::getId ,Goodsorder::getObjId); + queryWrapper.leftJoin(DiscountMember.class, DiscountMember::getGoodsorderId ,Goodsorder::getId); + queryWrapper.leftJoin(BaseParam.class, BaseParam::getId ,Goodsorder::getParamId); queryWrapper.select("(select max(r.done_date) from refund r where r.obj_id=t.id and r.status in(0,2)) as refund_date"); queryWrapper.select("(select sum(r.money) from refund r where r.obj_id=t.id and r.status in(0,2)) as refund_money"); + queryWrapper.select("(select sum(d.ride_price) from discount_log d where d.goodsorder_id=t.id and d.type = 0) as discountMoney"); //鏃堕棿娈电瓫閫� if (Objects.nonNull(model.getStartDate())){ queryWrapper.ge(Goodsorder::getPayDate, Utils.Date.getStart(model.getStartDate())); @@ -310,15 +324,18 @@ if (Objects.nonNull(model.getEndDate())){ queryWrapper.le( Goodsorder::getPayDate, Utils.Date.getEnd(model.getEndDate())); } + queryWrapper.eq(Objects.nonNull(model.getBikeType()),BaseParam::getType,model.getBikeType()); queryWrapper.eq(Constants.equalsInteger(model.getType(),Constants.ONE)&&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.eq(model.getPayWay() !=null,Goodsorder::getPayWay,model.getPayWay()); queryWrapper.like(model.getOnlineOrderid() !=null,Goodsorder::getOnlineOrderid,model.getOnlineOrderid()); queryWrapper.like(model.getOpenid() !=null,Member::getOpenid,model.getOpenid()); queryWrapper.eq(Goodsorder::getIsdeleted,Constants.ZERO); //濡傛灉鏄獞琛岃鍗曞彧鏄剧ず鏀粯鎴愬姛鐨� queryWrapper.eq(Constants.equalsInteger(model.getType(),Constants.ZERO),Goodsorder::getPayStatus,Constants.ONE); + queryWrapper.in(Constants.equalsInteger(model.getType(),Constants.ONE),Goodsorder::getStatus,Constants.ONE,Constants.ZERO); return queryWrapper; } @@ -333,6 +350,8 @@ queryWrapper.select("(select sum(er.discount_price) from member_rides er where er.ordre_id=t.id and er.isdeleted=0) as discountMoney," + "(select er.status from member_rides er where er.ordre_id=t.id order by er.create_date desc limit 1) as memberRidesStatus"); + + queryWrapper.select("( select s.realname from refund r left join system_user s on r.creator = s.id where r.obj_id = t.id order by r.id desc limit 1 ) ",Goodsorder::getRefundUserName); if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ZERO)){ queryWrapper.ne(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey()); @@ -340,7 +359,7 @@ if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ONE)){ queryWrapper.eq(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey()); } - queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDiscountName()),Goodsorder::getDiscountName,pageWrap.getModel().getDiscountName()); + queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDiscountName()),DiscountMember::getName,pageWrap.getModel().getDiscountName()); IPage<Goodsorder> goodsorderIPage = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper); if (!CollectionUtils.isEmpty(goodsorderIPage.getRecords())){ goodsorderIPage.getRecords().forEach(s->{ @@ -352,7 +371,6 @@ } return PageData.from(goodsorderIPage); } - @Override public long count(Goodsorder goodsorder) { @@ -376,6 +394,7 @@ 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.setEleBusinessArea(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.PARK_LAT_LNG_LIST).getCode()); homeResponse.setAdList(adMapper.selectList(new QueryWrapper<Ad>() .eq("isdeleted",Constants.ZERO) @@ -386,6 +405,7 @@ discountMapper.selectList(new QueryWrapper<Discount>().lambda() .eq(Discount::getIsdeleted,Constants.ZERO) .eq(Discount::getStatus,Constants.ZERO) + .apply(" now() BETWEEN start_date and ( end_date + INTERVAL '1 day' ) ") .orderByDesc(Discount::getId) .last(" limit 3 ") ) @@ -405,6 +425,7 @@ Goodsorder goodsorder = this.goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>() .eq("member_id",memberId) .eq("status",Constants.goodsorderStatus.pay) + .eq("type",0) .last(" limit 1 ")); homeResponse.setDepositStatus(Constants.ZERO); if(goodsorder!=null){ @@ -455,7 +476,7 @@ memberRidesResponse.setVoltageStatus(this.getVoltageStatus(bikes)); } //鏌ヨ褰撳墠鐨勯獞琛屽椁� - memberRidesResponse.setDiscountMember(this.getUseDiscount(memberId,Constants.ZERO)); + memberRidesResponse.setDiscountMember(this.getUseDiscount(memberId,Constants.ZERO,memberRides.getType())); homeResponse.setMemberRidesResponse(memberRidesResponse); } } @@ -466,11 +487,11 @@ @Override public Integer getVoltageStatus(Bikes bikes){ //浣庣數閲忕數鍘� - BigDecimal lowVoltage = new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.LOW_VOLTAGE).getCode()); + BigDecimal lowVoltage = new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.LOW_BIKE_VOLTAGE).getCode()); if(Objects.isNull(bikes)||Objects.isNull(bikes.getVoltage())||Objects.isNull(lowVoltage)){ return 0; } - return bikes.getVoltage().compareTo(lowVoltage)>0?0:1; + return bikes.getVoltage().compareTo(lowVoltage)>=0?0:1; } @@ -537,13 +558,16 @@ if(Constants.equalsInteger(goodsorder.getType(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED); } + goodsorder.setMoney(Constants.translateMoney(goodsorder.getMoney())); goodsorderDetailVO.setGoodsOrder(goodsorder); Member member = memberMapper.selectById(goodsorder.getMemberId()); if(Objects.nonNull(member)){ goodsorderDetailVO.setMember(member); } //鏌ヨ鍟嗗搧淇℃伅 - DiscountMember discountMember = discountMemberMapper.selectById(goodsorder.getObjId()); + DiscountMember discountMember = discountMemberMapper.selectOne(new QueryWrapper<DiscountMember>().lambda() + .eq(DiscountMember::getIsdeleted,Constants.ZERO) + .eq(DiscountMember::getGoodsorderId,goodsorder.getId())); if(Objects.nonNull(discountMember)){ goodsorderDetailVO.setDiscountMember(discountMember); } @@ -556,6 +580,13 @@ .eq(Refund::getObjId,goodsorder.getId()) .orderByDesc(Refund::getId) ); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(refunds)){ + for (Refund refund:refunds) { + if(Objects.nonNull(refund.getMoney())){ + refund.setMoney(Constants.translateMoney(refund.getMoney())); + } + } + } goodsorderDetailVO.setRefundList(refunds); return goodsorderDetailVO; @@ -615,7 +646,8 @@ freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); }catch (Exception e){ } - closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney(),goodsorder.getMemberId()).getAmount(); + + closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney(),goodsorder.getMemberId(),true).getAmount(); //瀹為檯缁撶畻浠锋牸锛岃褰曞湪鏈�楂樿溅鍨嬭褰曚笂 // memberRides.get(0).setActualPrice(closeMoney); } @@ -662,6 +694,31 @@ memberRidesJoinMapper.updateById(up); } } + int durationSum = 0; + int freeTime = 0; + try { + freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); + }catch (Exception e){ + } + //鏈�楂樹环鏍艰溅鍨嬬殑楠戣璁板綍 + //MemberRides topRides = this.getMaxRides(memberRides,durationSum,freeTime,true); + MemberRides topRides =null; + for(MemberRides rides : memberRides){ + if ( true && Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(rides.getStatus()))){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻"); + } + durationSum += Constants.formatIntegerNum(rides.getDuration());//绱楠戣锛堣璐癸級鏃堕暱 + if(durationSum-freeTime > 0 ){//鍙畻瓒呭嚭鍏嶈垂鏃堕暱鐨勬暟鎹� + if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum()) + && Constants.formatIntegerNum(rides.getDuration())>0)){ + topRides = rides; + } + } + } + //鏃犺秴杩囧厤璐规椂闀跨殑楠戣璁板綍 鏌ヨ鏈�鍚庝竴鏉¤褰� + if(Objects.isNull(topRides)){ + topRides = memberRidesJoinMapper.selectOne(new QueryWrapper<MemberRides>().lambda().eq(MemberRides::getOrdreId,goodsorder.getId()).orderByDesc(MemberRides::getCreateDate).last("limit 1")); + } // BigDecimal closeMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refund.getMoney())); //閫�娆句箰琛� // int type =Constants.formatIntegerNum(refund.getType()); @@ -669,10 +726,12 @@ update.setId(goodsorder.getId()); update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey()); update.setCloseMoney(closeMoney); + update.setParamId(Objects.nonNull(topRides)?topRides.getParamId():null); update.setCloseStatus(Constants.ONE); update.setCloseDate(new Date()); update.setCloseInfo(Constants.REFUND_TYPE.get(type).getInfo()); update.setCloseUserId(goodsorder.getEditor()); + update.setType(Constants.ZERO); if(Constants.REFUND_TYPE.PLAT_FORCE.getKey() == type){ //濡傛灉鏄己鍒剁粨绠� update.setCloseType(Constants.ONE); @@ -704,6 +763,23 @@ transactionsMapper.insert(transactions); //淇敼璁㈠崟淇℃伅 goodsorderMapper.updateById(update); + } + + public MemberRides getMaxRides(List<MemberRides> memberRides,Integer durationSum,Integer freeTime,boolean isClose){ + MemberRides topRides =null; + 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());//绱楠戣锛堣璐癸級鏃堕暱 + if(durationSum-freeTime > 0 ){//鍙畻瓒呭嚭鍏嶈垂鏃堕暱鐨勬暟鎹� + if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum()) + && Constants.formatIntegerNum(rides.getDuration())>0)){ + topRides = rides; + } + } + } + return topRides; } /** * 閫�娆炬垚鍔熷洖璋� @@ -779,95 +855,6 @@ transactionsMapper.insert(transactions); } - private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,int freeTime,boolean isClose,BigDecimal yjMoney,String memberId) { - RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); - ridesDetailResponse.setHaveDisCount(Constants.ZERO); - BigDecimal closeMoney = new BigDecimal(0.00); - int durationSum = 0; - MemberRides topRides =null; - - //鍙栨渶楂樿溅鍨嬭绠楁柟妗堢粨绠楄鍗� - 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());//绱楠戣锛堣璐癸級鏃堕暱 - if(durationSum-freeTime > 0 ){//鍙畻瓒呭嚭鍏嶈垂鏃堕暱鐨勬暟鎹� - if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum()) - && Constants.formatIntegerNum(rides.getDuration())>0)){ - topRides = rides; - } - } - } - - //璁$畻搴斾粯閲戦 - if( 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()))); - } - } - topRides.setActualPrice(closeMoney); - } - //鏌ヨ鏄惁瀛樺湪濂楅淇℃伅 - DiscountMember discountMember = this.getUseDiscount(memberId,durationSum); - //璁$畻鎶垫墸閲戦 - if(Objects.nonNull(discountMember) && discountMember.getSurplusTime() > Constants.ZERO && Objects.nonNull(topRides)){ - //瀛樺偍鎶垫墸璁板綍 - DiscountLog discountLog = new DiscountLog(); - discountLog.setIsdeleted(Constants.ZERO); - discountLog.setCreator(memberId); - discountLog.setCreateDate(new Date()); - discountLog.setDiscountMemberId(discountMember.getId()); - discountLog.setType(Constants.ZERO); - discountLog.setInfo("楠戣鎶垫墸"); - discountLog.setEditInfo("楠戣鎶垫墸"); - discountLog.setGoodsorderId(topRides.getOrdreId()); - //濡傛灉楠戣鏃堕棿灏忎簬绛変簬鍓╀綑鏃堕棿 鍒欑洿鎺ユ坊鍔� 楠戣鍗′娇鐢ㄦ暟鎹� 淇瀹為檯鏀粯閲戦 - if(discountMember.getSurplusTime() >= durationSum){ - discountLog.setRideTime(durationSum); - discountLog.setRidePrice(closeMoney); - discountLogMapper.insert(discountLog); - topRides.setActualPrice(BigDecimal.ZERO); - closeMoney = BigDecimal.ZERO; - }else{ - int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); - BigDecimal closeDisCountMoney = Constants.formatDecimalNum(topRides.getBasePrice()); - //濡傛灉鏄竴鍙d环鏂瑰紡锛屼环鏍肩洿鎺ヤ负涓�鍙d环baseMoney,濡傛灉涓嶆槸璁$畻姝e父浠锋牸 - Integer durationDisCountSum = durationSum - discountMember.getSurplusTime(); - discountLog.setRideTime(discountMember.getSurplusTime()); - if(baseTime != -1){//涓嶆槸涓�鍙d环 - if(durationDisCountSum > baseTime && Constants.formatIntegerNum(topRides.getUnitTime())>0){ - //濡傛灉瓒呭嚭浜嗚捣姝ヤ环鏍硷紝璁$畻瓒呭嚭浠锋牸 - BigDecimal unit = new BigDecimal(durationSum-baseTime).divide(new BigDecimal(topRides.getUnitTime()), 0, BigDecimal.ROUND_UP); - //璁$畻閲戦绱瓒呭嚭閮ㄩ棬浠锋牸锛堣秴鍑烘椂闂村崟浣�*瓒呭嚭鍗曚綅鏃堕棿浠锋牸锛� - closeDisCountMoney = closeDisCountMoney.add(unit.multiply(Constants.formatDecimalNum(topRides.getUnitPrice()))); - } - discountLog.setRidePrice(closeMoney.subtract(closeDisCountMoney)); - }else{ - discountLog.setRidePrice(BigDecimal.ZERO); - } - } - discountLogMapper.insert(discountLog); - ridesDetailResponse.setHaveDisCount(Constants.ONE); - ridesDetailResponse.setDisCountMoney(discountLog.getRidePrice()); - } - //濡傛灉璁㈠崟浠锋牸灏侀《浜嗭紝鍙栬鍗� 浠锋牸 - if(Constants.compareBigdecimal(closeMoney, yjMoney) ==1){ - closeMoney = yjMoney; - } - ridesDetailResponse.setDuration(durationSum); - ridesDetailResponse.setAmount(closeMoney); - ridesDetailResponse.setBikeType(topRides!=null?topRides.getParamName():"-"); - return ridesDetailResponse; - } - @Override public List<MemberRides> getMemberRidesForClose(String id) { MPJLambdaWrapper<MemberRides> wrapper = new MPJLambdaWrapper<>(); @@ -884,12 +871,113 @@ return memberRides; } + private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,int freeTime,boolean isClose,BigDecimal yjMoney,String memberId,Boolean unOver) { + RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); + ridesDetailResponse.setHaveDisCount(Constants.ZERO); + BigDecimal closeMoney = new BigDecimal(0.00); + int durationSum = 0; + //鏈�楂樹环鏍艰溅鍨嬬殑楠戣璁板綍 + //MemberRides topRides = this.getMaxRides(memberRides,durationSum,freeTime,isClose); + MemberRides topRides =null; + 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());//绱楠戣锛堣璐癸級鏃堕暱 + if(durationSum-freeTime > 0 ){//鍙畻瓒呭嚭鍏嶈垂鏃堕暱鐨勬暟鎹� + if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum()) + && Constants.formatIntegerNum(rides.getDuration())>0)){ + topRides = rides; + } + } + } + //璁$畻搴斾粯閲戦 + if( 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()))); + } + } + topRides.setActualPrice(closeMoney); + //2025骞�3鏈�18鏃�11:28:38 杩斿洖楠戣浠锋牸鏈�楂樼殑杞﹀瀷 + ridesDetailResponse.setParamId(topRides.getParamId()); + } + //鏌ヨ鏄惁瀛樺湪濂楅淇℃伅 + DiscountMember discountMember = this.getUseDiscount(memberId,durationSum,Objects.nonNull(topRides)?topRides.getType():null); + //璁$畻鎶垫墸閲戦 + //unOver 鏄惁鏈粨绠� 鏈粨绠楃殑璁㈠崟鏍规嵁褰撳墠濂楅鏌ヨ 宸茬粨绠楃殑璁㈠崟鏍规嵁宸茬敓鎴愮殑鏁版嵁杩涜鏌ヨ + if(Objects.nonNull(discountMember) && Objects.nonNull(topRides) && unOver){ + //瀛樺偍鎶垫墸璁板綍 + DiscountLog discountLog = new DiscountLog(); + discountLog.setIsdeleted(Constants.ZERO); + discountLog.setCreator(memberId); + discountLog.setCreateDate(new Date()); + discountLog.setDiscountMemberId(discountMember.getId()); + discountLog.setType(Constants.ZERO); + discountLog.setInfo("楠戣鎶垫墸"); + discountLog.setEditInfo("楠戣鎶垫墸"); + discountLog.setGoodsorderId(topRides.getOrdreId()); + //濡傛灉楠戣鏃堕棿灏忎簬绛変簬鍓╀綑鏃堕棿 鍒欑洿鎺ユ坊鍔� 楠戣鍗′娇鐢ㄦ暟鎹� 淇瀹為檯鏀粯閲戦 + if(Constants.equalsInteger(discountMember.getLimitType(),Constants.ZERO) || discountMember.getSurplusTime() >= durationSum){ + discountLog.setRideTime(durationSum); + discountLog.setRidePrice(closeMoney); + topRides.setActualPrice(BigDecimal.ZERO); + closeMoney = BigDecimal.ZERO; + }else{ + int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); + BigDecimal closeDisCountMoney = Constants.formatDecimalNum(topRides.getBasePrice()); + //鍑忓幓浼樻儬鏃堕暱鍓╀綑鏃堕暱 + Integer durationDisCountSum = durationSum - discountMember.getSurplusTime(); + discountLog.setRideTime(durationDisCountSum<=Constants.ZERO?discountMember.getSurplusTime():Constants.ZERO); + //濡傛灉鏄竴鍙d环鏂瑰紡锛屼环鏍肩洿鎺ヤ负涓�鍙d环baseMoney,濡傛灉涓嶆槸璁$畻姝e父浠锋牸 + if(baseTime != -1){//涓嶆槸涓�鍙d环 + if(durationDisCountSum > baseTime && Constants.formatIntegerNum(topRides.getUnitTime())>0){ + //濡傛灉瓒呭嚭浜嗚捣姝ヤ环鏍硷紝璁$畻瓒呭嚭浠锋牸 + BigDecimal unit = new BigDecimal(durationSum-baseTime).divide(new BigDecimal(topRides.getUnitTime()), 0, BigDecimal.ROUND_UP); + //璁$畻閲戦绱瓒呭嚭閮ㄩ棬浠锋牸锛堣秴鍑烘椂闂村崟浣�*瓒呭嚭鍗曚綅鏃堕棿浠锋牸锛� + closeDisCountMoney = closeDisCountMoney.add(unit.multiply(Constants.formatDecimalNum(topRides.getUnitPrice()))); + } + discountLog.setRidePrice(durationDisCountSum<=Constants.ZERO?closeMoney.subtract(closeDisCountMoney):BigDecimal.ZERO); + }else{ + discountLog.setRidePrice(BigDecimal.ZERO); + } + } + if(isClose&&discountLog.getRideTime()>Constants.ZERO){ + discountLogMapper.insert(discountLog); + } + ridesDetailResponse.setHaveDisCount(discountLog.getRideTime()>Constants.ZERO?Constants.ONE:Constants.ZERO); + ridesDetailResponse.setDisCountMoney(discountLog.getRidePrice()); + }else if(Objects.nonNull(discountMember) && Objects.nonNull(topRides) + && !unOver ){ + //宸茶繕杞﹀垯鏌ヨ鏄惁鏈� 濂楅鍗′娇鐢ㄨ褰� + List<DiscountLog> discountLogList = discountLogMapper.selectList(new QueryWrapper<DiscountLog>().lambda().eq(DiscountLog::getGoodsorderId,topRides.getOrdreId()).eq(DiscountLog::getType,Constants.ZERO) + .eq(DiscountLog::getIsdeleted,Constants.ZERO)); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(discountLogList)){ + ridesDetailResponse.setHaveDisCount(Constants.ONE); + ridesDetailResponse.setDisCountMoney(discountLogList.stream().map(i->i.getRidePrice()).reduce(BigDecimal.ZERO,BigDecimal::add)); + } + } + //濡傛灉璁㈠崟浠锋牸灏侀《浜嗭紝鍙栬鍗� 浠锋牸 + if(Constants.compareBigdecimal(closeMoney, yjMoney) ==1){ + closeMoney = yjMoney; + } + ridesDetailResponse.setDuration(durationSum); + ridesDetailResponse.setAmount(closeMoney); + ridesDetailResponse.setBikeType(topRides!=null?topRides.getParamName():"-"); + return ridesDetailResponse; + } + @Override public void backGoodsorder(GoodsorderBackDTO goodsorderBackDTO) { LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(Objects.isNull(goodsorderBackDTO) || StringUtils.isBlank(goodsorderBackDTO.getOrderId()) - || StringUtils.isBlank(goodsorderBackDTO.getReason()) || Objects.isNull(goodsorderBackDTO.getBackType()) || Objects.isNull(goodsorderBackDTO.getMoney())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); @@ -992,6 +1080,7 @@ model.setPayMoney(new BigDecimal(0.00)); model.setRefundMoney(new BigDecimal(0.00)); model.setClosedMoney(new BigDecimal(0.00)); + model.setDiscountMoney(new BigDecimal(0.00)); model.setUnClosedMoney(new BigDecimal(0.00)); model.setClosedNum(0); model.setUnClosedNum(0); @@ -1006,28 +1095,36 @@ } queryWrapper.lambda().eq(Goodsorder::getPayStatus, Constants.ONE);//宸叉敮浠� queryWrapper.lambda().eq(Goodsorder::getIsdeleted, Constants.ZERO); - queryWrapper.lambda().groupBy(Goodsorder::getStatus); - queryWrapper.select( "status ","count(id) as count_num" + queryWrapper.lambda().groupBy(Goodsorder::getStatus,Goodsorder::getType); + queryWrapper.select( "type","status ","count(id) as count_num" ,"sum(money) as money","sum(close_money) as close_money" ); //鎸夎鍗曠姸鎬佸垎缁勭粺璁� List<Goodsorder> detailList = goodsorderMapper.selectList(queryWrapper); for(Goodsorder goodsorder : detailList){ - if(Constants.formatIntegerNum(goodsorder.getStatus()) == Constants.GOODSORDER_STATUS.CLOSE.getKey()){ - //宸茬粨绠� - model.setClosedNum(model.getClosedNum()+goodsorder.getCountNum()); - //淇敼bug 缁撶畻鏀跺叆 = 鏀粯閲戦-閫�娆�-鏈粨绠� + if(Constants.equalsInteger(goodsorder.getType(),Constants.ZERO)){ + //濡傛灉鏄獞琛岃鍗曟娂閲戯紝璁$畻楠戣鏀跺叆 + if(Constants.formatIntegerNum(goodsorder.getStatus()) == Constants.GOODSORDER_STATUS.CLOSE.getKey()){ + //宸茬粨绠� + model.setClosedNum(model.getClosedNum()+goodsorder.getCountNum()); + //淇敼bug 缁撶畻鏀跺叆 = 鏀粯閲戦-閫�娆�-鏈粨绠� // model.setClosedMoney(model.getClosedMoney().add(Constants.translateMoney(goodsorder.getCloseMoney()))); - model.setPayNum(model.getPayNum()+goodsorder.getCountNum()); - model.setPayMoney(model.getPayMoney().add(Constants.translateMoney(goodsorder.getMoney()))); - }else if(Constants.formatIntegerNum(goodsorder.getStatus()) == Constants.GOODSORDER_STATUS.HAVING_PAY.getKey()){ - //宸叉敮浠樻湭缁撶畻 - model.setUnClosedNum(model.getUnClosedNum()+goodsorder.getCountNum()); - model.setUnClosedMoney(model.getUnClosedMoney().add(Constants.translateMoney(goodsorder.getMoney()))); + model.setPayNum(model.getPayNum()+goodsorder.getCountNum()); + model.setPayMoney(model.getPayMoney().add(Constants.translateMoney(goodsorder.getMoney()))); + }else if(Constants.formatIntegerNum(goodsorder.getStatus()) == Constants.GOODSORDER_STATUS.HAVING_PAY.getKey()){ + //宸叉敮浠樻湭缁撶畻 + model.setUnClosedNum(model.getUnClosedNum()+goodsorder.getCountNum()); + model.setUnClosedMoney(model.getUnClosedMoney().add(Constants.translateMoney(goodsorder.getMoney()))); - model.setPayNum(model.getPayNum()+goodsorder.getCountNum()); - model.setPayMoney(model.getPayMoney().add(Constants.translateMoney(goodsorder.getMoney()))); + model.setPayNum(model.getPayNum()+goodsorder.getCountNum()); + model.setPayMoney(model.getPayMoney().add(Constants.translateMoney(goodsorder.getMoney()))); + } + }else{ + //濂楅鍗℃敹鍏ョ疮璁� (浜ゆ槗绗旀暟鍜屼氦鏄撻噾棰濓級 + model.setDiscountNum(model.getDiscountNum()+goodsorder.getCountNum()); + model.setDiscountMoney(model.getDiscountMoney().add(Constants.translateMoney(goodsorder.getMoney()))); } + } QueryWrapper<Refund> queryWrapper2 = new QueryWrapper<>(); if(Objects.nonNull(param.getStartDate())) { @@ -1045,7 +1142,7 @@ model.setRefundNum(Constants.formatIntegerNum(refund.getCountNum())); model.setRefundMoney(Constants.translateMoney(Constants.formatDecimalNum(refund.getMoney()))); } - model.setClosedMoney(model.getPayMoney().subtract(model.getRefundMoney()).subtract(model.getUnClosedMoney())); + model.setClosedMoney(model.getPayMoney().add(model.getDiscountMoney()).subtract(model.getRefundMoney()).subtract(model.getUnClosedMoney())); return model; } @Override @@ -1061,7 +1158,8 @@ .selectAs(BaseParam::getSortnum,MemberRides::getSortnum) .leftJoin(BaseParam.class,BaseParam::getId,MemberRides::getParamId) .eq(MemberRides::getOrdreId,id) - .in(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey(),Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()) + .in(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey() + ,Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey(),Constants.MEMBER_RIDES_STATUS.RIDES_PAUSING.getKey()) .orderByDesc(MemberRides::getCreateDate)); if (!CollectionUtils.isEmpty(memberRides)){ //棰勮缁撶畻浠锋牸鍜岃绠楁椂闀� @@ -1097,7 +1195,8 @@ return memberRidesResponse; }).collect(Collectors.toList()); //绱鍜岄绠楃粨绠楅噾棰� - RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,freeTime,false,goodsorder.getMoney(),goodsorder.getMemberId()); + RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,freeTime,false,goodsorder.getMoney(),goodsorder.getMemberId(), + Constants.equalsInteger(goodsorder.getStatus(),Constants.GOODSORDER_STATUS.CLOSE.getKey())?false:true); if(Constants.formatIntegerNum(goodsorder.getStatus())!= Constants.goodsorderStatus.pay){ //濡傛灉闈炲凡鏀粯浣嗘湭缁撶畻锛屼娇鐢ㄨ鍗曢噾棰� ridesDetailResponse.setAmount(goodsorder.getCloseMoney()); @@ -1119,6 +1218,7 @@ qry.setStatus(Constants.goodsorderStatus.pay); qry.setMemberId(memberId); qry.setIsdeleted(Constants.ZERO); + qry.setType(Constants.ZERO); if(goodsorderMapper.selectCount(new QueryWrapper<>(qry))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸叉敮浠樿繃瀹氶噾锛屾棤娉曢噸澶嶈鎿嶄綔"); } @@ -1174,8 +1274,13 @@ discountMember.setMemberId(memberId); discountMember.setStatus(Constants.TWO); discountMember.setGoodsorderId(goodsorderId); + if(!Constants.equalsInteger(discountMember.getUseType(),Constants.ZERO)){ + if(Constants.equalsInteger(discountMember.getUseType(),Constants.ONE)){ + discountMember.setUseStartDate(DateUtil.StringToDateFormat(DateUtil.getCurrDate(),"yyyy-MM-dd")); + } + discountMember.setUseEndDate( DateUtil.StringToDateFormat(DateUtil.getXDaysAfter(discountMember.getUseStartDate(),discountMember.getUseDays()-1),"yyyy-MM-dd")); + } discountMemberMapper.insert(discountMember); - Goodsorder goodsorder = new Goodsorder(); goodsorder.setId(goodsorderId); goodsorder.setCreateDate(new Date()); @@ -1207,7 +1312,7 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌濂楅淇℃伅"); } if(!(Constants.equalsInteger(discount.getIsdeleted(),Constants.ZERO) - ||Constants.equalsInteger(discount.getStatus(),Constants.ZERO))){ + && Constants.equalsInteger(discount.getStatus(),Constants.ZERO))){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"濂楅宸蹭笅鏋讹紝鏃犳硶杩涜璐拱锛岃鍒锋柊鏌ョ湅"); } if(!(discount.getStartDate().getTime() < System.currentTimeMillis() @@ -1215,7 +1320,7 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"濂楅寮�鏀炬椂闂存湭鍒�,鏃犳硶杩涜璐拱"); } //楠岃瘉鏄惁瓒呰繃浠婃棩鍙敭鍗栨暟閲� - if(Objects.nonNull(discount.getSaleDayLimit())){ + if(Objects.nonNull(discount.getSaleDayLimit())&&discount.getSaleDayLimit()>Constants.ZERO){ if(goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda() .eq(Goodsorder::getType,Constants.ONE) .eq(Goodsorder::getObjId,discount.getId()) @@ -1225,13 +1330,12 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"濂楅浠婃棩鍙戣閲忓凡鍞絼锛岃鏄庢棩鏌ョ湅锛�"); } } - if(Objects.nonNull(discount.getSaleLimit())){ + if(Objects.nonNull(discount.getSaleLimit())&&discount.getSaleLimit()>Constants.ZERO){ if(goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda() .eq(Goodsorder::getType,Constants.ONE) .eq(Goodsorder::getObjId,discount.getId()) .in(Goodsorder::getStatus,Constants.ZERO,Constants.ONE) - .apply(" EXTRACT(YEAR FROM create_date) = EXTRACT(YEAR FROM CURRENT_DATE) ") - )>=discount.getSaleDayLimit()){ + )>=discount.getSaleLimit()){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"濂楅鍙戣閲忓凡鍞絼锛�"); } } @@ -1240,8 +1344,8 @@ private Object getWxPayResponse(Goodsorder goodsorder,String openid){ + Object response = null; //璋冭捣鏀粯 - Object response = null; PrepayRequest request = new PrepayRequest(); request.setAttach("createGoodsOrder"); request.setDescription(Constants.equalsInteger(goodsorder.getType(),Constants.ZERO)?"妫灄鍏洯鑷杞﹂獞琛屾娂閲戞敮浠�":"妫灄鍏洯鑷杞﹁喘涔伴獞琛屽椁愭敮浠�"); @@ -1345,6 +1449,7 @@ public void autoCloseOrder( ) { Goodsorder goodsorder = new Goodsorder(); goodsorder.setIsdeleted(Constants.ZERO); + goodsorder.setType(Constants.ZERO); goodsorder.setStatus(Constants.goodsorderStatus.pay); List<Goodsorder> list = findList(goodsorder); if (!CollectionUtils.isEmpty(list)){ @@ -1361,13 +1466,14 @@ } }); } - } + @Override public void goodsOrderSettlement(String memberId) { Goodsorder goodsorder = this.goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>() .eq("member_id",memberId) .eq("status",Constants.goodsorderStatus.pay) + .eq("type",Constants.ZERO) .last(" limit 1 ")); if(Objects.isNull(goodsorder)){ throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"鏃犻獞琛岃鍗曡褰�"); @@ -1513,7 +1619,11 @@ * 鑾峰彇褰撳墠鍙娇鐢ㄧ殑濂楅 * @param memberId */ - public DiscountMember getUseDiscount(String memberId,Integer driveTime){ + @Override + public DiscountMember getUseDiscount(String memberId,Integer driveTime,Integer type){ + if(Objects.isNull(type)){ + return null; + } String today = DateUtil.getToday(); //鍒ゆ柇浠婂ぉ鏄惁涓鸿妭鍋囨棩 Holidays holidays = new Holidays(); @@ -1523,13 +1633,17 @@ Integer holiday = holidaysMapper.selectCount(new QueryWrapper<>(holidays))>0?1:0; List<DiscountMember> discountMemberList = discountMemberMapper.selectJoinList(DiscountMember.class,new MPJLambdaWrapper<DiscountMember>() .selectAll(DiscountMember.class) - .select(" select sum(d.ride_time) from discount_log d where and d.discount_member_id = discount_member.id " + - "and d.isdeleted = 0 and d.type = 0 and EXTRACT(DAY FROM d.create_date) = EXTRACT(DAY FROM CURRENT_DATE) " , DiscountMember::getUseTime)//鏌ヨ浠婃棩宸蹭娇鐢ㄦ椂闂� + .select(" ( select sum(d.ride_time) from discount_log d where d.discount_member_id = t.id " + + "and d.isdeleted = 0 and d.type = 0 and EXTRACT(DAY FROM d.create_date) = EXTRACT(DAY FROM CURRENT_DATE) ) " , DiscountMember::getUseTime)//鏌ヨ浠婃棩宸蹭娇鐢ㄦ椂闂� .eq(DiscountMember::getStatus,Constants.ZERO) .eq(DiscountMember::getMemberId,memberId) - .ge(DiscountMember::getUseStartDate, Utils.Date.getStart(DateUtil.stringToDate(today,"yyyy-MM-dd"))) - .le(DiscountMember::getUseEndDate, Utils.Date.getEnd(DateUtil.stringToDate(today,"yyyy-MM-dd"))) + .apply(" t.use_start_date <= '"+today+"' and t.use_end_date >= '"+today+"' ") + + .eq(Constants.equalsInteger(holiday,Constants.ZERO),DiscountMember::getUseWorkday,Constants.ONE) .eq(Constants.equalsInteger(holiday,Constants.ONE),DiscountMember::getUseHoliday,Constants.ONE) + + .eq(Constants.equalsInteger(type,Constants.ZERO),DiscountMember::getIsbike,Constants.ONE) + .eq(Constants.equalsInteger(type,Constants.ONE),DiscountMember::getIselecbike,Constants.ONE) .orderByDesc(DiscountMember::getLimitType) .orderByDesc(DiscountMember::getLimitTime) ); @@ -1555,22 +1669,23 @@ if(list.size()>Constants.ZERO){ //d1鍦ㄥ墠鍒欏崌搴� 鍙嶄箣闄嶅簭 list.sort((d1,d2)-> Integer.compare(d2.getSurplusTime(),d1.getSurplusTime())); + return list.get(Constants.ZERO); } - return list.get(Constants.ZERO); }else{ //鏃犳棤鏈熼檺鐨勫椁� 浼樺厛鏌ヨ鍓╀綑鏃堕暱澶т簬楠戣鏃堕暱鐨勪俊鎭�(鍙栨椂闂存渶灏忕殑濂楅) 鍐嶆煡璇㈠皬浜庨獞琛屾椂闀跨殑濂楅 List<DiscountMember> list = discountMemberList.stream().filter(i->i.getSurplusTime()>=driveTime).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ if(list.size()>Constants.ZERO){ //d1鍦ㄥ墠鍒欏崌搴� 鍙嶄箣闄嶅簭 - list.sort((d1,d2)-> Integer.compare(d2.getSurplusTime(),d1.getSurplusTime())); + list.sort((d1,d2)-> Integer.compare(d1.getSurplusTime(),d2.getSurplusTime())); + return list.get(Constants.ZERO); } - return list.get(Constants.ZERO); + } list = discountMemberList.stream().filter(i->i.getSurplusTime()<driveTime).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ if(list.size()>Constants.ZERO){ - list.sort((d1,d2)-> Integer.compare(d1.getSurplusTime(),d2.getSurplusTime())); + list.sort((d1,d2)-> Integer.compare(d2.getSurplusTime(),d1.getSurplusTime())); } return list.get(Constants.ZERO); } @@ -1580,4 +1695,96 @@ } + + @Override + public void autCancel(){ + goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda() + .set(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CANCEL.getKey()) + .set(Goodsorder::getEditDate,DateUtil.getCurrDateTime()) + .eq(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.UN_PAY.getKey()) + .apply(" NOW() >= create_date + INTERVAL '30 min' ") + ); + } + + + + @Override + public List<List<String>> getBikeIncomeReportVOList(Date startDate ,Date endDate){ + if( (Objects.isNull(startDate)||Objects.isNull(endDate)) + || startDate.getTime()>endDate.getTime() + || DateUtil.daysBetweenDates(endDate,startDate) > 30 + ) + { + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + System.out.println( DateUtil.daysBetweenDates(endDate,startDate)); + //鑾峰彇鎵�鏈夎溅鍨嬩俊鎭� + List<BaseParam> baseParamList = baseParamMapper.selectList(new QueryWrapper<BaseParam>().lambda().eq(BaseParam::getIsdeleted,Constants.ZERO) + .in(BaseParam::getType,Constants.THREE,Constants.FOUR) + .orderByAsc(BaseParam::getType,BaseParam::getSortnum) + ); + //鑾峰彇2涓棩鏈熶笅鎵�鏈夊ぉ鏁� + List<Date> dateList = DateUtil.getDateList(startDate,endDate); + //鏌ヨ鏃ユ湡鍐呯殑鎵�鏈夋暟鎹� + List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getType,Constants.ZERO) + .eq(Goodsorder::getIsdeleted,Constants.ZERO) + .eq(Goodsorder::getStatus,Constants.FOUR) + .isNotNull(Goodsorder::getParamId) + .ge(Goodsorder::getPayDate, Utils.Date.getStart(startDate)) + .le( Goodsorder::getPayDate, Utils.Date.getEnd(endDate)) + ); + + List<List<String>> parentList = new ArrayList<>(); + + for (BaseParam baseParam:baseParamList) { + List<String> dataChildList = new ArrayList<>(); + dataChildList.add(baseParam.getName()+"(鍏�)"); + BigDecimal totalAmount = BigDecimal.ZERO; + for (Date date:dateList) { + BigDecimal amount = goodsorderList.stream() + .filter(i->StringUtils.isNotBlank(i.getParamId())&&DateUtil.getShortDateStr(date).equals(DateUtil.getShortDateStr(i.getCreateDate()))&&baseParam.getId().equals(i.getParamId())) + .map(i->i.getCloseMoney()).reduce(BigDecimal.ZERO,BigDecimal::add); + amount = amount.divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP); + dataChildList.add(amount.toString()); + totalAmount = amount.add(totalAmount); + } + dataChildList.add("锟�"+totalAmount); + parentList.add(dataChildList); + } + + List<String> dataStrList = new ArrayList<>(); + dataStrList.add("鏃ユ湡"); + for (Date date:dateList) { + dataStrList.add(DateUtil.getShortDateStr(date)); + } + dataStrList.add("鎬昏"); + parentList.add(0,dataStrList); + + return parentList; + + } + + @Override + public void excel(Date startDate , Date endDate, HttpServletResponse response){ + List<List<String>> data = this.getBikeIncomeReportVOList(startDate,endDate); + try { + String fileName = "杞﹀瀷鏀跺叆鍒嗘瀽_"+System.currentTimeMillis(); + String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx"; + response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName); + response.setContentType("application/octet-stream"); + response.setHeader("eva-opera-type", "download"); + response.setHeader("eva-download-filename", encodeFileName); + ExcelExporter.exportList(data, fileName, response.getOutputStream()); + } catch (IOException e) { + throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e); + } + } + + + + + + + + } -- Gitblit v1.9.3