From 4e3e18cdb0d75c098b68353ef8c86cdd7c0f79b2 Mon Sep 17 00:00:00 2001 From: rk <94314517@qq.com> Date: 星期四, 21 八月 2025 15:27:34 +0800 Subject: [PATCH] 111 --- server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 722 +++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 509 insertions(+), 213 deletions(-) diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java index 8bd112f..1b5f608 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java @@ -17,6 +17,7 @@ import com.doumee.dao.business.*; import com.doumee.dao.business.model.*; import com.doumee.dao.dto.*; +import com.doumee.dao.vo.OrderReleaseVO; import com.doumee.service.business.OrdersService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -42,10 +43,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import java.util.*; import java.util.concurrent.TimeUnit; /** @@ -84,6 +82,9 @@ private WithdrawalOrdersMapper withdrawalOrdersMapper; @Autowired + private ReceiveWeightMapper receiveWeightMapper; + + @Autowired private WxMiniUtilService wxMiniUtilService; @Resource @@ -91,7 +92,8 @@ @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) - public Object create(Orders orders) { + public OrderReleaseVO create(Orders orders) { + OrderReleaseVO orderReleaseVO = new OrderReleaseVO(); Object objects = null; this.initVerification(orders); orders.setCreateTime(new Date()); @@ -99,6 +101,7 @@ orders.setPayStatus(Constants.ZERO); orders.setDeleted(Constants.ZERO); orders.setReleaseMemberId(orders.getMember().getId()); + orders.setCommentStatus(Constants.ZERO); //鏌ヨ鎵嬬画璐� Category platformCategory = categoryMapper.selectOne(new QueryWrapper<Category>().lambda().eq(Category::getType,Constants.THREE).eq(Category::getName,orders.getType()).eq(Category::getDeleted,Constants.ZERO).last("limit 1 ")); if(Objects.isNull(platformCategory)){ @@ -118,17 +121,20 @@ //鐢ㄩ璁㈠崟 if(Constants.equalsInteger(orders.getType(),Constants.TWO)){ orders.setStatus(Constants.ordersStatus.waitPay.getKey()); + orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); + orders.setPayAccount(orders.getEstimatedAccount()); //鍞よ捣鏀粯涓氬姟 objects = this.getWxPayResponse(orders,orders.getMember().getOpenid()); + orderReleaseVO.setObject(objects); }else{ orders.setStatus(Constants.ordersStatus.wait.getKey()); } ordersMapper.insert(orders); + orderReleaseVO.setId(orders.getId()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(orders.getMultifileList())){ List<Multifile> multifileList = orders.getMultifileList(); for (Multifile multifile:multifileList) { if(Objects.isNull(multifile) - || Objects.isNull(multifile.getObjType()) || StringUtils.isEmpty(multifile.getFileurl()) || StringUtils.isEmpty(multifile.getName())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"闄勪欢淇℃伅閿欒"); @@ -159,7 +165,7 @@ .replace("{param}",orderTypeInfo); this.saveOrderLog(orders,ordersLog, logInfo,orders.getReleaseMemberId(),null); - return objects; + return orderReleaseVO; } private Object getWxPayResponse(Orders orders,String openid){ @@ -175,10 +181,10 @@ Payer payer = new Payer(); payer.setSubOpenid(openid); request.setPayer(payer); - request.setOutTradeNo(orders.getCode()); + request.setOutTradeNo(orders.getOutTradeNo()); request.setNotifyUrl(WxMiniConfig.wxProperties.getNotifyUrl());//杩欎釜鍥炶皟url蹇呴』鏄痟ttps寮�澶寸殑 Amount amount = new Amount(); - amount.setTotal(orders.getEstimatedAccount().intValue()); + amount.setTotal(1);//orders.getPayAccount().intValue()); request.setAmount(amount); // PrepayResponse res = WxMiniConfig.wxPayService.prepay(request); // 璺熶箣鍓嶄笅鍗曠ず渚嬩竴鏍凤紝濉厖棰勪笅鍗曞弬鏁� @@ -219,11 +225,10 @@ || Objects.isNull(orders.getStartDate()) || Objects.isNull(orders.getEndDate()) || StringUtil.isBlank(orders.getLocation()) - || StringUtil.isBlank(orders.getLocationRemark()) || StringUtil.isBlank(orders.getLinkPhone()) || Objects.isNull(orders.getLat()) || Objects.isNull(orders.getLgt()) - || Objects.isNull(orders.getCategoryId()) + || (!Constants.equalsInteger(orders.getType(),Constants.TWO) && Objects.isNull(orders.getCategoryId())) || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Objects.isNull(orders.getWorkType())) || Objects.isNull(orders.getPriceNum1()) || Objects.isNull(orders.getEstimatedAccount()) @@ -263,9 +268,9 @@ for (WayInfoDTO wayInfoDTO:orders.getWayInfoDTOList()) { if(Objects.isNull(wayInfoDTO) ||StringUtils.isEmpty(wayInfoDTO.getLocation()) - ||StringUtils.isEmpty(wayInfoDTO.getProvince()) - ||StringUtils.isEmpty(wayInfoDTO.getCity()) - ||StringUtils.isEmpty(wayInfoDTO.getArea()) +// ||StringUtils.isEmpty(wayInfoDTO.getProvince()) +// ||StringUtils.isEmpty(wayInfoDTO.getCity()) +// ||StringUtils.isEmpty(wayInfoDTO.getArea()) ||Objects.isNull(wayInfoDTO.getLat()) ||Objects.isNull(wayInfoDTO.getLgt()) ){ @@ -302,6 +307,9 @@ + + + @Override public void deleteById(Integer id) { ordersMapper.deleteById(id); @@ -322,12 +330,40 @@ } @Override - @Transactional(rollbackFor = {BusinessException.class,Exception.class}) - public void updateById(Orders orders) { + public void update(Orders orders){ if(Objects.isNull(orders) - || Objects.isNull(orders.getId())){ + || Objects.isNull(orders.getId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } + Orders model = ordersMapper.selectById(orders.getId()); + if(!Constants.equalsInteger(model.getReleaseMemberId(),orders.getMember().getId())){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); + } + if(Constants.equalsInteger(model.getIsUpdate(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟宸蹭慨鏀癸紝寰呮帴鍗曟柟纭锛屾棤娉曡繘琛岃鎿嶄綔"); + } + if(!Constants.equalsInteger(model.getType(),Constants.TWO)){ + if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)||Constants.equalsInteger(model.getStatus(),Constants.ONE)){ + this.updateById(orders); + }else if(Constants.equalsInteger(model.getStatus(),Constants.TWO)){ + this.updOrderData(orders,model); + }else{ + throw new BusinessException(ResponseStatus.NOT_ALLOWED); + } + }else{ + throw new BusinessException(ResponseStatus.NOT_ALLOWED); + } + + + + } + + + +// @Override + @Transactional(rollbackFor = {BusinessException.class,Exception.class}) + public void updateById(Orders orders) { + Orders model = ordersMapper.selectById(orders.getId()); if(Constants.equalsInteger(model.getType(),Constants.TWO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"姝ょ被璁㈠崟鏃犳硶杩涜淇敼"); @@ -356,6 +392,7 @@ || StringUtils.isEmpty(multifile.getName())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"闄勪欢淇℃伅閿欒"); } + multifile.setId(null); multifile.setIsdeleted(Constants.ZERO); multifile.setCreateDate(new Date()); multifile.setObjId(orders.getId()); @@ -372,7 +409,7 @@ return; } for (Orders orders: orderss) { - this.updateById(orders); + //this.updateById(orders); } } @@ -398,28 +435,8 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY); } orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus())); + this.getPriceUnit(orders); - if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ - if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){ - orders.setPriceUnit("鍏�/鏂�"); - }else if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){ - orders.setPriceUnit("鍏�/浜�/澶�"); - }else{ - if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ - orders.setPriceUnit("鍏�/浜�/澶�"); - }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ - orders.setPriceUnit("鍏�/浜�/灏忔椂"); - }else{ - orders.setPriceUnit("鍏�/鏂�"); - } - } - }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ - if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ - orders.setPriceUnit("鍏�/澶�"); - }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ - orders.setPriceUnit("鍏�/娆�"); - } - } //闄勪欢淇℃伅 List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,orders.getId()) .eq(Multifile::getIsdeleted,Constants.ZERO).eq(Multifile::getObjType,Constants.ONE).orderByAsc(Multifile::getId)); @@ -450,6 +467,29 @@ return orders; } + public void getPriceUnit(Orders orders){ + if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ + if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){ + orders.setPriceUnit("鍏�/鏂�"); + }else if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){ + orders.setPriceUnit("鍏�/浜�/澶�"); + }else{ + if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ + orders.setPriceUnit("鍏�/浜�/澶�"); + }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ + orders.setPriceUnit("鍏�/浜�/灏忔椂"); + }else{ + orders.setPriceUnit("鍏�/鏂�"); + } + } + }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ + if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ + orders.setPriceUnit("鍏�/澶�"); + }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ + orders.setPriceUnit("鍏�/娆�"); + } + } + } @Override public Orders findOne(Orders orders) { QueryWrapper<Orders> wrapper = new QueryWrapper<>(orders); @@ -492,8 +532,11 @@ queryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(model.getCode()),Orders::getCode, model.getCode()); queryWrapper.eq(Objects.nonNull(model.getType()),Orders::getType, model.getType()); queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus, model.getStatus()); + queryWrapper.eq(Objects.nonNull(model.getCommentStatus()),Orders::getCommentStatus, model.getCommentStatus()); + queryWrapper.eq(Objects.nonNull(model.getReleaseMemberId()),Orders::getReleaseMemberId, model.getReleaseMemberId()); + queryWrapper.eq(Objects.nonNull(model.getAcceptMemberId()),Orders::getAcceptMemberId, model.getAcceptMemberId()); queryWrapper.eq(Objects.nonNull(model.getAcceptType()),Orders::getAcceptType, model.getAcceptType()); - queryWrapper.apply(org.apache.commons.lang3.StringUtils.isNotBlank(model.getReleaseName()),"m1.name", model.getReleaseName()); + queryWrapper.apply(org.apache.commons.lang3.StringUtils.isNotBlank(model.getReleaseName()),"m1.name like '%"+model.getReleaseName()+"%' or m1.TELEPHONE like '%"+model.getReleaseName()+"%' "); queryWrapper.apply(org.apache.commons.lang3.StringUtils.isNotBlank(model.getAcceptName()),"( i.LINK_NAME like '%"+model.getAcceptName()+"%' or i.company_name like '%"+model.getAcceptName()+"%' or i.TELEPHONE like '%"+model.getAcceptName()+"%' ) "); IPage<Orders> iPage = ordersMapper.selectJoinPage(page,Orders.class,queryWrapper); for (Orders orders:iPage.getRecords()) { @@ -586,26 +629,32 @@ if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎮ㄨ嚜宸辩殑璁㈠崟鏃犳硶杩涜璇ユ搷浣�"); } + member = memberMapper.selectById(member.getId()); //鏌ヨ鐢ㄦ埛鏄惁鏈夊搴旇韩浠� if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ if(!Constants.equalsInteger(member.getWorkerIdentity(),Constants.TWO)){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�"); + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鍓嶅線涓汉涓績杩涜韬唤璁よ瘉!"); } }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ if(!Constants.equalsInteger(member.getDriverIdentity(),Constants.TWO)){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�"); + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鍓嶅線涓汉涓績杩涜韬唤璁よ瘉!"); } }else{ if(!Constants.equalsInteger(member.getChefIdentity(),Constants.TWO)){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�"); + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鍓嶅線涓汉涓績杩涜韬唤璁よ瘉!"); } } - orders.setUpdateTime(new Date()); - orders.setAcceptType(Constants.ZERO); - orders.setAcceptTime(new Date()); - orders.setAcceptMemberId(member.getId()); - orders.setStatus(Constants.ordersStatus.accept.getKey()); - ordersMapper.updateById(orders); + + ordersMapper.update(new UpdateWrapper<Orders>().lambda().eq(Orders::getId,orders.getId()) + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getAcceptType,Constants.ZERO) + .set(Orders::getAcceptTime,new Date()) + .set(Orders::getAcceptMemberId,member.getId()) + .set(Orders::getStatus,Constants.ordersStatus.accept.getKey()) + ); + + + //鏇存柊鎺ュ崟閲� memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" publish_num = (publish_num + 1 )").eq(Member::getId,member.getId())); @@ -656,71 +705,68 @@ /** * 鍙戝崟鏂逛慨鏀硅鍗� - 宸叉帴鍗曠姸鎬� - * @param updOrderDataDTO */ - @Override +// @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) - public void updOrderData(UpdOrderDataDTO updOrderDataDTO){ - if(Objects.isNull(updOrderDataDTO) - || Objects.isNull(updOrderDataDTO.getOrderId()) - || Objects.isNull(updOrderDataDTO.getStartDate()) - || Objects.isNull(updOrderDataDTO.getEndDate())){ + public void updOrderData(Orders orders,Orders model){ + if(Objects.isNull(orders) + || Objects.isNull(orders.getStartDate()) + || Objects.isNull(orders.getEndDate())){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - Orders orders = ordersMapper.selectById(updOrderDataDTO.getOrderId()); - if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ - throw new BusinessException(ResponseStatus.DATA_EMPTY); - } - if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�"); - } - if(!Constants.equalsInteger(orders.getReleaseMemberId(),updOrderDataDTO.getMember().getId())){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); - } - if(Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟宸蹭慨鏀癸紝寰呮帴鍗曟柟纭锛屾棤娉曡繘琛岃鎿嶄綔"); - } - orders.setStartDate(updOrderDataDTO.getStartDate()); - orders.setEndDate(updOrderDataDTO.getEndDate()); - orders.setTotalDays(updOrderDataDTO.getTotalDays()); + model.setTotalDays(DateUtil.daysBetweenDates(orders.getEndDate(),orders.getStartDate())+1); + model.setStartDate(orders.getStartDate()); + model.setEndDate(orders.getEndDate()); //鐢ㄨ溅绫诲瀷 - if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ - if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)) { - orders.setPriceNum1(updOrderDataDTO.getTotalDays()); + if(Constants.equalsInteger(model.getType(),Constants.ONE)){ + if(Constants.equalsInteger(model.getCarType(),Constants.ZERO)) { + model.setPriceNum1(orders.getTotalDays()); } - }else if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ - if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)||(Constants.equalsInteger(orders.getWorkType(),Constants.TWO)&&Constants.equalsInteger(orders.getCarType(),Constants.ZERO))){ - orders.setPriceNum1(updOrderDataDTO.getTotalDays()); + }else if(Constants.equalsInteger(model.getType(),Constants.ZERO)){ + if(Constants.equalsInteger(model.getWorkType(),Constants.ONE)|| + (Constants.equalsInteger(model.getWorkType(),Constants.TWO)&&Constants.equalsInteger(model.getCarType(),Constants.ZERO))){ + model.setPriceNum1(orders.getTotalDays()); } }else{ - orders.setPriceNum1(updOrderDataDTO.getTotalDays()); + model.setPriceNum1(orders.getTotalDays()); } Long total = this.getTotal(orders); ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getStartDate,updOrderDataDTO.getStartDate()) - .set(Orders::getEndDate,updOrderDataDTO.getEndDate()) - .set(Orders::getTotalDays,updOrderDataDTO.getTotalDays()) + .set(Orders::getStartDate,model.getStartDate()) + .set(Orders::getEndDate,model.getEndDate()) + .set(Orders::getTotalDays,model.getTotalDays()) .set(Orders::getIsUpdate,Constants.ONE) - .set(Orders::getIsUpdateTime,"now()") - .set(Orders::getUpdateTime,"now()") + .set(Orders::getIsUpdateTime,new Date()) + .set(Orders::getUpdateTime,new Date()) .set(Orders::getEstimatedAccount,total) .eq(Orders::getId,orders.getId()) ); //鍒涘缓鎿嶄綔鏃ュ織 Constants.OrdersLog ordersLog = Constants.OrdersLog.UPD_ORDER; - this.saveOrderLog(orders,ordersLog, - ordersLog.getInfo(),updOrderDataDTO.getMember().getId(),null); + this.saveOrderLog(model,ordersLog, + ordersLog.getInfo(),orders.getMember().getId(),null); //TODO 閫氱煡鎺ュ崟浜� 璁㈠崟鍙戠敓鍙樻洿 } + @Override public Long getTotal(Orders orders){ + if(Objects.isNull(orders) + ||Objects.isNull(orders.getPrice()) + ||Objects.isNull(orders.getPriceNum1())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } if( (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO )) || Constants.equalsInteger(orders.getType(),Constants.ONE) + || Constants.equalsInteger(orders.getType(),Constants.TWO) ){ orders.setPriceNum2(Constants.ONE); + }else{ + if(Objects.isNull(orders.getPriceNum2())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } } return orders.getPrice() * orders.getPriceNum1() * orders.getPriceNum2(); } @@ -754,10 +800,10 @@ if(!Constants.equalsInteger(orders.getAcceptMemberId(),confirmUpdOrderDTO.getMember().getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); } - if( Constants.equalsInteger(confirmUpdOrderDTO.getStatus(),Constants.ONE)){ + if(!Constants.equalsInteger(confirmUpdOrderDTO.getStatus(),Constants.ONE)){ ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getIsUpdate,Constants.TWO) - .set(Orders::getUpdateTime,"now()") + .set(Orders::getUpdateTime,new Date()) .eq(Orders::getId,orders.getId()) ); //璁板綍鍚屾剰淇敼鐨勬棩蹇� @@ -767,38 +813,73 @@ }else{ ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getIsUpdate,Constants.TWO) - .set(Orders::getUpdateTime,"now()") + .set(Orders::getUpdateTime,new Date()) .set(Orders::getStatus,Constants.ordersStatus.wait.getKey()) .set(Orders::getAcceptMemberId,null) .set(Orders::getAcceptType,null) .eq(Orders::getId,orders.getId()) ); - memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum,"receive_num - 1").eq(Member::getId,confirmUpdOrderDTO.getMember().getId())); + memberMapper.update(new UpdateWrapper<Member>().lambda().setSql("receive_num = receive_num - 1").eq(Member::getId,confirmUpdOrderDTO.getMember().getId())); //璁板綍涓嶅悓鎰忎慨鏀圭殑鏃ュ織 Constants.OrdersLog ordersLog = Constants.OrdersLog.UPD_DISAGREE; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null); - //TODO 鍙戦�佷笉鍚屾剰鍙樻洿閫氱煡 - } } - /** - * 鍙戝崟鏂瑰彇娑堣鍗� - * @param orderId - * @param member - */ @Override - @Transactional(rollbackFor = {BusinessException.class,Exception.class}) - public void releaseCancelOrder(Integer orderId,Member member){ + public void cancelOrder(Integer orderId,Member member){ Orders orders = ordersMapper.selectById(orderId); if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } + if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){ + this.releaseCancelOrder(orders,member); + }else if(Constants.equalsInteger(orders.getAcceptMemberId(),member.getId())){ + this.receiveCancelOrder(orders,member); + }else{ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); + } + + } + + + @Override + public String cancelTips(Integer orderId,Member member){ + Orders orders = ordersMapper.selectById(orderId); + if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + + Integer totalCancelTimes = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIMES).getCode()); + Long cancelTimes = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() + .apply(" DATE(cancel_time) = DATE(NOW()) ") + .eq(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) + .eq(Orders::getReleaseMemberId,member.getId())); + //鏌ヨ鍙栨秷娆℃暟 + if(totalCancelTimes<=cancelTimes){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟,濡傞渶澶勭悊璇疯仈绯诲鏈�"); + } + + Integer cancelTimeHour = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIME).getCode()); + Long hours = DateUtil.getBetweenHours(new Date(),orders.getStartDate()); + if(hours < cancelTimeHour){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟锛屽闇�澶勭悊璇疯仈绯诲鏈�"); + } + return "浠婃棩杩樺彲涓诲姩鍙栨秷"+(totalCancelTimes-cancelTimes)+"娆★紝鏄惁纭鍙栨秷"; + + } + + /** + * 鍙戝崟鏂瑰彇娑堣鍗� + * @param member + */ + @Transactional(rollbackFor = {BusinessException.class,Exception.class}) + public void releaseCancelOrder(Orders orders,Member member){ if(!(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.wait.getKey()) ||Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.waitPay.getKey()) || Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey()))){ @@ -824,8 +905,8 @@ } ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) - .set(Orders::getUpdateTime,"now()") - .set(Orders::getCancelTime,"now()") + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getCancelTime,new Date()) .set(Orders::getCancelType,Constants.ZERO) .eq(Orders::getId,orders.getId()) ); @@ -862,38 +943,35 @@ } ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) - .set(Orders::getUpdateTime,"now()") - .set(Orders::getCancelTime,"now()") + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getCancelTime,new Date()) .set(Orders::getCancelType,Constants.ONE) .eq(Orders::getId,orders.getId()) ); //TODO 鍙戝崟鏂瑰彇娑堣鍗曢�氱煡鎺ュ崟鏂� //鍑忓皯鎺ュ崟閲� - memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum,"receive_num - 1").eq(Member::getId,orders.getAcceptMemberId())); + memberMapper.update(new UpdateWrapper<Member>().lambda().setSql("receive_num = (receive_num - 1) ").eq(Member::getId,orders.getAcceptMemberId())); } //鍑忓皯鍙戝崟閲� - memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getPublishNum,"publish_num - 1").eq(Member::getId,orders.getReleaseMemberId())); + memberMapper.update(new UpdateWrapper<Member>().lambda().setSql("publish_num = (publish_num - 1)").eq(Member::getId,orders.getReleaseMemberId())); //鏃ュ織瀛樺偍 Constants.OrdersLog ordersLog = Constants.OrdersLog.RELEASE_CANCEL; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),member.getId(),null); + + + } /** * 鎺ュ崟鏂瑰彇娑堟帴鍗� - * @param orderId * @param member */ - @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) - public void receiveCancelOrder(Integer orderId,Member member){ - Orders orders = ordersMapper.selectById(orderId); - if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ - throw new BusinessException(ResponseStatus.DATA_EMPTY); - } + public void receiveCancelOrder(Orders orders,Member member){ if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷"); } @@ -917,7 +995,7 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟锛屽闇�澶勭悊璇疯仈绯诲鏈�"); } ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getUpdateTime,"now()") + .set(Orders::getUpdateTime,new Date()) .set(Orders::getStatus,Constants.ordersStatus.wait.getKey()) .set(Orders::getAcceptMemberId,null) .set(Orders::getAcceptType,null) @@ -925,7 +1003,7 @@ ); //鍑忓皯鎺ュ崟閲� - memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum,"receive_num - 1").eq(Member::getId,orders.getAcceptMemberId())); + memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" receive_num = receive_num - 1 ").eq(Member::getId,orders.getAcceptMemberId())); //鏃ュ織瀛樺偍 Constants.OrdersLog ordersLog = Constants.OrdersLog.CANCEL; this.saveOrderLog(orders,ordersLog, @@ -942,7 +1020,7 @@ */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) - public Object doneOrder(DoneOrderDTO doneOrderDTO){ + public OrderReleaseVO doneOrder(DoneOrderDTO doneOrderDTO){ if(Objects.isNull(doneOrderDTO)||Objects.isNull(doneOrderDTO.getOrderId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } @@ -959,7 +1037,8 @@ if(!Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); } - orders.setPayAccount(doneOrderDTO.getAmount()); + OrderReleaseVO orderReleaseVO = new OrderReleaseVO(); + orderReleaseVO.setId(orders.getId()); Object object = null; //鐢ㄩ璁㈠崟 if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){ @@ -967,20 +1046,81 @@ //鎻愭垚閲戦 Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); orders.setReceiveAccount(orders.getPayAccount() - tcje); + orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); ordersMapper.updateById(orders); //鍞よ捣鏀粯涓氬姟 - object = this.getWxPayResponse(orders,orders.getMember().getOpenid()); + object = this.getWxPayResponse(orders,doneOrderDTO.getMember().getOpenid()); + orderReleaseVO.setObject(object); }else{ orders.setStatus(Constants.ordersStatus.done.getKey()); + orders.setFinishTime(new Date()); + ordersMapper.updateById(orders); + + Member member = memberMapper.selectById(orders.getAcceptMemberId()); + + //瀛樺偍娴佹按璁板綍 + MemberRevenue memberRevenue = new MemberRevenue(); + memberRevenue.setCreateTime(new Date()); + memberRevenue.setMemberId(orders.getAcceptMemberId()); + memberRevenue.setType(orders.getType()); + memberRevenue.setOptType(Constants.ONE); + memberRevenue.setBeforeAmount(member.getAmount()); + memberRevenue.setAmount(orders.getReceiveAccount()); + memberRevenue.setAfterAmount(member.getAmount() + orders.getReceiveAccount()); + if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ + memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()) + "-" + + (Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)?"閲囨憳宸�":(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"鍒嗘嫞宸�":"鍖呰宸�"))); + }else{ + memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); + } + memberRevenue.setObjId(orders.getId()); + memberRevenue.setObjType(Constants.ZERO); + memberRevenue.setStatus(Constants.ZERO); + memberRevenueMapper.insert(memberRevenue); + //鏃ュ織瀛樺偍 Constants.OrdersLog ordersLog = Constants.OrdersLog.DONE; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),doneOrderDTO.getMember().getId(),null); } - return object; + return orderReleaseVO; } + + @Override + public OrderReleaseVO reusePay(ReusePayDTO reusePayDTO){ + if(Objects.isNull(reusePayDTO)||Objects.isNull(reusePayDTO.getOrderId())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + Orders orders = ordersMapper.selectById(reusePayDTO.getOrderId()); + if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + if(!Constants.equalsInteger(orders.getType(),Constants.TWO)&&Objects.isNull(reusePayDTO.getAmount())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + + if(!((( Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.ZERO) ) + || ( !Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.THREE) )) + && Constants.equalsInteger(orders.getPayStatus(),Constants.ZERO) )){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆"); + } + OrderReleaseVO orderReleaseVO = new OrderReleaseVO(); + if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){ + orders.setPayAccount(reusePayDTO.getAmount()); + //鎻愭垚閲戦 + Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); + orders.setReceiveAccount(orders.getPayAccount() - tcje); + } + orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); + ordersMapper.updateById(orders); + //鍞よ捣鏀粯涓氬姟 + Object object = this.getWxPayResponse(orders,orders.getMember().getOpenid()); + orderReleaseVO.setObject(object); + orderReleaseVO.setId(orders.getId()); + return orderReleaseVO; + } @Override @@ -1059,26 +1199,23 @@ ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getCommentStatus,Constants.ONE) - .set(Orders::getUpdateTime,"now()") - .set(Orders::getCommentTime,"now()") + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getCommentTime,new Date()) .set(Orders::getCommentLevel,commentDTO.getLevel()) + .set(org.apache.commons.lang3.StringUtils.isNotBlank(commentDTO.getInfo()),Orders::getCommentInfo,commentDTO.getInfo()) .set(Orders::getCommentType,Constants.ZERO) .eq(Orders::getId,orders.getId()) ); - memberMapper.update(new UpdateWrapper<Member>().lambda() - .set(Member::getScore," ( total_score +" + commentDTO.getLevel() + " ) / (score_order_num + 1 )") - .set(Member::getTotalScore," total_score +" + commentDTO.getLevel()) - .set(Member::getScoreOrderNum," score_order_num + 1 " ).eq(Member::getId,orders.getAcceptMemberId()) + .setSql(" score = ( total_score +" + commentDTO.getLevel() + " ) / (score_order_num + 1 )") + .setSql(" total_score = total_score +" + commentDTO.getLevel()) + .setSql(" score_order_num = score_order_num + 1 " ).eq(Member::getId,orders.getAcceptMemberId()) ); - //鏃ュ織瀛樺偍 Constants.OrdersLog ordersLog = Constants.OrdersLog.COMMENT; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),orders.getAcceptMemberId(),null); } - - /** @@ -1090,7 +1227,7 @@ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public String payNotify(String preOrderId,String paymentNo){ - Orders orders = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda().eq(Orders::getCode,preOrderId).last("limit 1")); + Orders orders = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda().eq(Orders::getOutTradeNo,preOrderId).last("limit 1")); if(Constants.equalsInteger(orders.getType(),Constants.TWO)){ //鐢ㄩ璁㈠崟 濡傛灉宸茬粡娴佽浆鍒板凡鏀粯 鍒欑洿鎺ヨ繑鍥� if(!Constants.equalsInteger(orders.getStatus(),Constants.ZERO)){ @@ -1098,10 +1235,10 @@ }else{ //澶勭悊鏀粯瀹屾垚閫昏緫 ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getUpdateTime,"now()") - .set(Orders::getStatus,Constants.ordersStatus.wait) + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getStatus,Constants.ordersStatus.wait.getKey()) .set(Orders::getPayStatus,Constants.ONE) - .set(Orders::getPayTime,"now()") + .set(Orders::getPayTime,new Date()) .set(Orders::getPayMethod,Constants.ZERO) .set(Orders::getWxExternalNo,paymentNo) .eq(Orders::getId,orders.getId()) @@ -1119,13 +1256,13 @@ }else{ //澶勭悊鏀粯瀹屾垚閫昏緫 ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getUpdateTime,"now()") + .set(Orders::getUpdateTime,new Date()) .set(Orders::getStatus,Constants.FOUR) .set(Orders::getPayStatus,Constants.ONE) - .set(Orders::getPayTime,"now()") + .set(Orders::getPayTime,new Date()) .set(Orders::getPayMethod,Constants.ZERO) .set(Orders::getWxExternalNo,paymentNo) - .set(Orders::getFinishTime,"now()") + .set(Orders::getFinishTime,new Date()) .eq(Orders::getId,orders.getId()) ); @@ -1133,12 +1270,20 @@ //瀛樺偍娴佹按璁板綍 MemberRevenue memberRevenue = new MemberRevenue(); memberRevenue.setCreateTime(new Date()); + memberRevenue.setDeleted(Constants.ZERO); + memberRevenue.setTransactionNo(orders.getCode()); memberRevenue.setMemberId(orders.getAcceptMemberId()); memberRevenue.setType(orders.getType()); memberRevenue.setOptType(Constants.ONE); memberRevenue.setBeforeAmount(member.getAmount()); memberRevenue.setAmount(orders.getReceiveAccount()); memberRevenue.setAfterAmount(member.getAmount() + orders.getReceiveAccount()); + if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ + memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()) + "-" + + (Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)?"閲囨憳宸�":(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"鍒嗘嫞宸�":"鍖呰宸�"))); + }else{ + memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); + } memberRevenue.setObjId(orders.getId()); memberRevenue.setObjType(Constants.ZERO); memberRevenue.setStatus(Constants.ZERO); @@ -1146,8 +1291,8 @@ //鏇存柊鎺ュ崟鐢ㄦ埛鐨勪綑棰濅笌鍘嗗彶鎬婚噾棰� memberMapper.update(new UpdateWrapper<Member>().lambda() - .set(Member::getAmount,"amount + " + orders.getReceiveAccount() ) - .set(Member::getTotalAmount,"amount + " + orders.getReceiveAccount() ) + .setSql(" amount = ( amount + " + orders.getReceiveAccount() +")" ) + .setSql(" total_amount = ( amount + " + orders.getReceiveAccount() + ")" ) .eq(Member::getId,member.getId()) ); @@ -1157,6 +1302,7 @@ ordersLog.getInfo(),orders.getReleaseMemberId(),null); //TODO 閫氱煡鎺ュ崟鏂� 娆鹃」宸插埌璐� + } } return ("澶勭悊鎴愬姛!"); @@ -1169,73 +1315,124 @@ MPJLambdaWrapper<Orders> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); Orders model = pageWrap.getModel(); + if(Objects.isNull(model) + || Objects.isNull(model.getQueryLat()) + || Objects.isNull(model.getQueryLgt()) + || Objects.isNull(model.getQueryMyOrderType()) + ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + BigDecimal chefLat = model.getQueryLat(); + BigDecimal chefLgt = model.getQueryLgt(); + BigDecimal driverLat = model.getQueryLat(); + BigDecimal driverLgt = model.getQueryLgt(); + BigDecimal workerLat = model.getQueryLat(); + BigDecimal workerLgt = model.getQueryLgt(); + IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,model.getMember().getId()) + .eq(IdentityInfo::getType,Constants.ZERO) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + if(Objects.nonNull(wokerIdentityInfo)){ + workerLat = wokerIdentityInfo.getLat(); + workerLgt = wokerIdentityInfo.getLgt(); + } + IdentityInfo driverIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,model.getMember().getId()) + .eq(IdentityInfo::getType,Constants.ONE) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + if(Objects.nonNull(driverIdentityInfo)){ + driverLat = driverIdentityInfo.getLat(); + driverLgt = driverIdentityInfo.getLgt(); + } + IdentityInfo chefIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,model.getMember().getId()) + .eq(IdentityInfo::getType,Constants.TWO) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + if(Objects.nonNull(chefIdentityInfo)){ + chefLat = chefIdentityInfo.getLat(); + chefLgt = chefIdentityInfo.getLgt(); + } queryWrapper.selectAll(Orders.class) .select("c1.name",Orders::getCategoryName) .select("c2.name",Orders::getTransportTypeName) .leftJoin(" category c1 on t.category_id = c1.id ") - .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id "); + .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id ") + .select(" case when T.LGT IS NULL OR T.LAT IS NULL THEN 0 " + + " when t.TYPE = 0 then CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+workerLgt+", "+workerLat+" )) /1000,DECIMAL(15,2)) " + + " when t.TYPE = 1 then CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+driverLgt+", "+driverLat+" )) /1000,DECIMAL(15,2)) " + + " else CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+chefLgt+", "+chefLat+" )) /1000,DECIMAL(15,2)) end " , Orders::getDistance) + .eq(Objects.nonNull(model.getType()),Orders::getType,model.getType()); if(Objects.nonNull(model.getQueryMyOrderType())){ if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)){ //鍙戝崟鏂� 鎴戠殑璁㈠崟 queryWrapper.eq(Orders::getReleaseMemberId,model.getMember().getId()); + queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus,model.getStatus()); + queryWrapper.orderByDesc(Orders::getCreateTime); }else if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ONE)){ //鎺ュ崟鏂� 鎴戠殑璁㈠崟 queryWrapper.eq(Orders::getAcceptMemberId,model.getMember().getId()); + queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus,model.getStatus()); + queryWrapper.orderByDesc(Orders::getAcceptTime); }else{ + //鏌ヨ鐢ㄦ埛鐨勬帴鍗曟潈閲� + ReceiveWeight receiveWeight = receiveWeightMapper.selectOne(new QueryWrapper<ReceiveWeight>().lambda().eq(ReceiveWeight::getDeleted,Constants.ZERO).apply(" RECEIVE_MIN < "+model.getMember().getReceiveNum()+" and RECEIVE_MAX > " + model.getMember().getReceiveNum()).last(" limit 1 ")); + if(Objects.nonNull(receiveWeight)){ + queryWrapper.apply(" DATE_ADD(t.CREATE_TIME, INTERVAL "+receiveWeight.getDelayTime()+" MINUTE) < now() "); + } queryWrapper.eq(Orders::getStatus,Constants.ordersStatus.wait.getKey()); - //鎺ュ崟澶у巺 - queryWrapper.and(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO),i-> - i.eq(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO),Orders::getType,Constants.ZERO) - .or() - .eq(Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO),Orders::getType,Constants.ONE) - .or() - .eq(Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO),Orders::getType,Constants.TWO) - ); - - queryWrapper.apply(!(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO))," 1 = 2 " - ); - + queryWrapper.ne(Orders::getReleaseMemberId,model.getMember().getId()); + if(Objects.nonNull(model.getSortType())){ + if(Constants.equalsInteger(model.getSortType(),Constants.ZERO)){ + queryWrapper.orderByDesc(Orders::getCreateTime); + }else if(Constants.equalsInteger(model.getSortType(),Constants.ONE)){ + queryWrapper.orderByAsc(" distance "); + }else{ + queryWrapper.orderByDesc(Orders::getEstimatedAccount); + } + } } - } - for(PageWrap.SortData sortData: pageWrap.getSorts()) { - if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { - queryWrapper.orderByDesc(sortData.getProperty()); - } else { - queryWrapper.orderByAsc(sortData.getProperty()); - } - } + } IPage<Orders> iPage = ordersMapper.selectJoinPage(page,Orders.class,queryWrapper); - if(Objects.nonNull(model.getQueryMyOrderType())&&Constants.equalsInteger(model.getQueryMyOrderType(),Constants.TWO)){ - if(Constants.equalsInteger(model.getMember().getUseIdentity(),Constants.ONE)){ - model.getMember().setWorkerIdentityModel( - identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() - .eq(IdentityInfo::getMemberId,model.getMember().getId()) - .eq(IdentityInfo::getType,Constants.ZERO) - .eq(IdentityInfo::getAuditStatus,Constants.TWO) - .last("limit 1") - ) - ); - model.getMember().setDriverIdentityModel( - identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() - .eq(IdentityInfo::getMemberId,model.getMember().getId()) - .eq(IdentityInfo::getType,Constants.ONE) - .eq(IdentityInfo::getAuditStatus,Constants.TWO) - .last("limit 1") - ) - ); - model.getMember().setChefIdentityModel( - identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() - .eq(IdentityInfo::getMemberId,model.getMember().getId()) - .eq(IdentityInfo::getType,Constants.TWO) - .eq(IdentityInfo::getAuditStatus,Constants.TWO) - .last("limit 1") - ) - ); - } - for (Orders orders:iPage.getRecords()) { - this.getDistance(model.getMember(),orders); - } + for (Orders orders:iPage.getRecords()) { + this.getPriceUnit(orders); } +// if(Objects.nonNull(model.getQueryMyOrderType())&&Constants.equalsInteger(model.getQueryMyOrderType(),Constants.TWO)){ +// if(Constants.equalsInteger(model.getMember().getUseIdentity(),Constants.ONE)){ +// model.getMember().setWorkerIdentityModel( +// identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() +// .eq(IdentityInfo::getMemberId,model.getMember().getId()) +// .eq(IdentityInfo::getType,Constants.ZERO) +// .eq(IdentityInfo::getAuditStatus,Constants.TWO) +// .last("limit 1") +// ) +// ); +// model.getMember().setDriverIdentityModel( +// identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() +// .eq(IdentityInfo::getMemberId,model.getMember().getId()) +// .eq(IdentityInfo::getType,Constants.ONE) +// .eq(IdentityInfo::getAuditStatus,Constants.TWO) +// .last("limit 1") +// ) +// ); +// model.getMember().setChefIdentityModel( +// identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() +// .eq(IdentityInfo::getMemberId,model.getMember().getId()) +// .eq(IdentityInfo::getType,Constants.TWO) +// .eq(IdentityInfo::getAuditStatus,Constants.TWO) +// .last("limit 1") +// ) +// ); +// } +// for (Orders orders:iPage.getRecords()) { +// this.getDistance(model.getMember(),orders); +// } +// } return PageData.from(iPage); } @@ -1288,31 +1485,39 @@ @Override - public Orders getDetail(Integer id,Integer userType) { + public Orders getDetail(Integer id,Member member) { Orders orders = ordersMapper.selectJoinOne(Orders.class,new MPJLambdaWrapper<Orders>() .selectAll(Orders.class) + .select(" m1.name " , Orders::getReleaseName) + .select(" m1.telephone " , Orders::getReleasePhone) + .select(" case when i.AUTH_TYPE = 0 then i.LINK_NAME else i.COMPANY_NAME end " , Orders::getAcceptName) + .select(" i.TELEPHONE " , Orders::getAcceptPhone) .select("c1.name",Orders::getCategoryName) .select("c2.name",Orders::getTransportTypeName) + .select(" m2.SCORE " , Orders::getScore) + .select(" m1.PUBLISH_NUM " , Orders::getPublishNum) + .select(" m2.RECEIVE_NUM " , Orders::getReceiveNum) + .select(" m1.COVER_IMAGE " , Orders::getReleaseCoverImage) + .select(" m2.COVER_IMAGE " , Orders::getAcceptCoverImage) .leftJoin(" category c1 on t.category_id = c1.id ") .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id ") + .leftJoin("member m1 on t.RELEASE_MEMBER_ID = m1.id ") + .leftJoin("member m2 on t.ACCEPT_MEMBER_ID = m2.id ") + .leftJoin("identity_info i on m2.id = i.MEMBER_ID and i.TYPE = t.type and i.AUDIT_STATUS = 2 ") + .eq(Orders::getId,id) ); if(Objects.isNull(orders)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - if(Objects.nonNull(userType)){ - Member member = memberMapper.selectById( - Constants.equalsInteger(userType,Constants.ZERO)?orders.getReleaseMemberId():orders.getAcceptMemberId() - ); - if(Objects.nonNull(member)){ - if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getCoverImage())){ - //澶村儚淇℃伅 - String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() - +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode(); - member.setFullCoverImage(path + member.getCoverImage()); - } - orders.setMember(member); - } + //澶村儚淇℃伅 + String coverPath = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() + +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode(); + if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getReleaseCoverImage())){ + orders.setReleaseCoverImage(coverPath + orders.getReleaseCoverImage()); + } + if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getAcceptCoverImage())){ + orders.setAcceptCoverImage(coverPath + orders.getAcceptCoverImage()); } List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,orders.getId()) .eq(Multifile::getIsdeleted,Constants.ZERO).eq(Multifile::getObjType,Constants.ONE).orderByAsc(Multifile::getId)); @@ -1324,10 +1529,55 @@ } orders.setMultifileList(multifileList); } + orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus())); + orders.setCancelStatus(Constants.ZERO); + this.getPriceUnit(orders); + if(orders.getStatus() <= Constants.ordersStatus.accept.getKey()){ + if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){ + //鍒ゆ柇鏄惁鍙慨鏀� 宸插彇娑堟鏁� 涓� 鏃堕棿闄愬埗 + Integer totalCancelTimes = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIMES).getCode()); + Long cancelTimes = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() + .apply(" DATE(cancel_time) = DATE(NOW()) ") + .eq(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) + .eq(Orders::getReleaseMemberId,orders.getReleaseMemberId())); + //鏌ヨ鍙栨秷娆℃暟 + if(totalCancelTimes<=cancelTimes){ + orders.setCancelStatus(Constants.ONE); + return orders; + } + Integer cancelTimeHour = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIME).getCode()); + Long hours = DateUtil.getBetweenHours(new Date(),orders.getStartDate()); + if(hours < cancelTimeHour){ + orders.setCancelStatus(Constants.ONE); + return orders; + } + }else if(Constants.equalsInteger(orders.getAcceptMemberId(),member.getId())){ + //鍒ゆ柇鏄惁鍙慨鏀� 宸插彇娑堟鏁� 涓� 鏃堕棿闄愬埗 + Integer totalCancelTimes = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RECEIVE_CANCEL_TIMES).getCode()); + Long cancelTimes = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda() + .apply(" DATE(create_time) = DATE(NOW()) ") + .eq(OrderLog::getObjType,Constants.OrdersLog.CANCEL.getKey()) + .eq(OrderLog::getMemberId,member.getId())); + //鏌ヨ鍙栨秷娆℃暟 + if(totalCancelTimes<=cancelTimes){ + orders.setCancelStatus(Constants.ONE); + return orders; + } - + Integer cancelTimeHour = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RECEIVE_CANCEL_TIME).getCode()); + Long hours = DateUtil.getBetweenHours(new Date(),orders.getStartDate()); + if(hours < cancelTimeHour){ + orders.setCancelStatus(Constants.ONE); + return orders; + } + } + } else{ + orders.setCancelStatus(Constants.ONE); + } return orders; } + + public synchronized String getNextCode(Integer type){ @@ -1367,19 +1617,60 @@ } - - //todo 鑷姩娲惧崟 + /** + * 鑷姩娲惧崟 + */ + @Override public void autoGrabOrders(){ -// String autoConfirmTime = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.AUTO_DISPATCH_DISTANCE).getCode(); -// List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() -// .eq(Orders::getStatus,Constants.FOUR).eq(Orders::getCommentStatus,Constants.ZERO) -// .apply(" DATE_ADD(finish_time, INTERVAL 7 DAY) < now() ") -// .last("limit 100") -// ); + String autoConfirmTime = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.AUTO_DISPATCH).getCode(); + List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() + .eq(Orders::getStatus,Constants.ONE).eq(Orders::getCommentStatus,Constants.ZERO) + .apply(" DATE_ADD(create_time, INTERVAL "+autoConfirmTime+" MINUTE) < now() ") + .last("limit 100") + ); + for (Orders orders:ordersList) { + BigDecimal lat = orders.getLat(); + BigDecimal lgt = orders.getLgt(); + //鏌ヨ鑼冨洿鍐呯殑浼氬憳 + List<Member> memberList = memberMapper.selectList(new MPJLambdaWrapper<Member>().selectAll(Member.class) + .select(" ifnull((select r.level from receive_weight r where r.RECEIVE_MAX > t.RECEIVE_NUM and t.RECEIVE_NUM > r.RECEIVE_MIN limit 1 ),0) " ,Member::getLevel) + .select( " ifnull( (select CONVERT( ST_Distance_Sphere ( POINT ( ii.lgt, ii.lat ), POINT ( "+lgt+", "+lat+" )) /1000,DECIMAL(15,2)) from identity_info ii where ii.AUDIT_STATUS = 2 and type = 0 and ii.member_id = t.ID limit 1 ),0) ",Member::getDistance ) + .apply(" id in (" + + " select ii.member_id from identity_info ii where ii.AUDIT_STATUS = 2 and type = '"+orders.getType()+"' " + + " and ( CONVERT( ST_Distance_Sphere ( POINT ( ii.lgt, ii.lat ), POINT ( "+lgt+", "+lat+" )) /1000,DECIMAL(15,2))) < 100 " + + ") ") + .orderByDesc(Member::getLevel) + .orderByDesc(Member::getScore) + .orderByAsc(Member::getDistance) + .last(" limit 1 ") + ); + if(CollectionUtils.isEmpty(memberList)){ + continue; + } + Member member = memberList.get(Constants.ZERO); + //鑷姩娲惧崟 + Orders model = ordersMapper.selectById(orders.getStatus()); + if(!Constants.equalsInteger(model.getStatus(),Constants.ONE)){ + continue; + } + ordersMapper.update(new UpdateWrapper<Orders>().lambda().eq(Orders::getId,model.getId()) + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getAcceptType,Constants.ONE) + .set(Orders::getAcceptTime,new Date()) + .set(Orders::getAcceptMemberId,member.getId()) + .set(Orders::getStatus,Constants.ordersStatus.accept.getKey()) + ); + //鏇存柊鎺ュ崟閲� + memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" publish_num = (publish_num + 1 )").eq(Member::getId,member.getId())); + //鍒涘缓鎿嶄綔鏃ュ織 + Constants.OrdersLog ordersLog = Constants.OrdersLog.AUTO; + this.saveOrderLog(orders,ordersLog, + ordersLog.getInfo(),member.getId(),null); + } } //鑷姩璇勪环 璁㈠崟瀹屾垚7澶╁悗鑷姩璇勪环4鏄� @@ -1395,8 +1686,8 @@ for (Orders orders:ordersList) { ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getCommentStatus,Constants.ONE) - .set(Orders::getUpdateTime,"now()") - .set(Orders::getCommentTime,"now()") + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getCommentTime,new Date()) .set(Orders::getCommentLevel,Constants.FOUR) .set(Orders::getCommentType,Constants.ZERO) .eq(Orders::getId,orders.getId()) @@ -1430,7 +1721,7 @@ for (Orders orders:ordersList) { ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getIsUpdate,Constants.TWO) - .set(Orders::getUpdateTime,"now()") + .set(Orders::getUpdateTime,new Date()) .eq(Orders::getId,orders.getId()) ); //璁板綍鍚屾剰淇敼鐨勬棩蹇� @@ -1442,6 +1733,11 @@ } + @Override + public void initializeCode(){ + //鏇存柊缂撳瓨 + redisTemplate.opsForValue().set(Constants.RedisKeys.ORDER_CODE,0); + } -- Gitblit v1.9.3