From 77b52c06afdb843ee67c6e938afab0458143d76f Mon Sep 17 00:00:00 2001 From: doum <doum> Date: 星期五, 05 九月 2025 10:48:48 +0800 Subject: [PATCH] 前端 --- server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 1058 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 820 insertions(+), 238 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..f015f0c 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 @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; +import com.doumee.config.wx.SendWxMessage; import com.doumee.config.wx.WxMiniConfig; import com.doumee.config.wx.WxMiniUtilService; import com.doumee.core.constants.Constants; @@ -17,6 +18,8 @@ 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.AliSmsService; import com.doumee.service.business.OrdersService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -30,6 +33,7 @@ import com.wechat.pay.java.service.refund.model.RefundNotification; import jodd.util.StringUtil; import lombok.With; +import lombok.extern.slf4j.Slf4j; import nonapi.io.github.classgraph.json.Id; import org.apache.poi.sl.image.ImageHeaderEMF; import org.checkerframework.checker.units.qual.A; @@ -42,17 +46,17 @@ 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.math.RoundingMode; +import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * 璁㈠崟淇℃伅璁板綍Service瀹炵幇 * @author 姹熻箘韫� * @date 2025/07/09 12:00 */ +@Slf4j @Service public class OrdersServiceImpl implements OrdersService { @@ -84,21 +88,37 @@ private WithdrawalOrdersMapper withdrawalOrdersMapper; @Autowired + private ReceiveWeightMapper receiveWeightMapper; + + @Autowired private WxMiniUtilService wxMiniUtilService; + + @Autowired + private SendWxMessage sendWxMessage; + + @Autowired + private AliSmsService aliSmsService; @Resource private RedisTemplate<String,Object> redisTemplate; @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); + Member member = memberMapper.selectById(orders.getMember().getId()); + if(Objects.isNull(member)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛淇℃伅寮傚父"); + } + orders.setCreateTime(new Date()); orders.setUpdateTime(orders.getUpdateTime()); 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)){ @@ -117,18 +137,28 @@ } //鐢ㄩ璁㈠崟 if(Constants.equalsInteger(orders.getType(),Constants.TWO)){ + orders.setPayAccount(orders.getEstimatedAccount()); + Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); + orders.setReceiveAccount(orders.getPayAccount() - tcje); orders.setStatus(Constants.ordersStatus.waitPay.getKey()); + orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); //鍞よ捣鏀粯涓氬姟 - objects = this.getWxPayResponse(orders,orders.getMember().getOpenid()); + objects = this.getWxPayResponse(orders,member.getOpenid()); + orderReleaseVO.setObject(objects); }else{ orders.setStatus(Constants.ordersStatus.wait.getKey()); } + orders.setOriginPriceNum1(orders.getPriceNum1()); + orders.setOriginPriceNum2(orders.getPriceNum2()); + orders.setOriginEstimatedAccount(orders.getOriginEstimatedAccount()); + orders.setConfirmOtherFee(0l); 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(),"闄勪欢淇℃伅閿欒"); @@ -141,7 +171,7 @@ multifileMapper.insert(multifileList); } //鏇存柊鐢ㄦ埛鍙戝崟閲� - memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" receive_num = ( receive_num + 1 )").eq(Member::getId,orders.getMember().getId())); + memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" PUBLISH_NUM = ( ifnull(PUBLISH_NUM,0) + 1 )").eq(Member::getId,orders.getMember().getId())); //鍒涘缓鎿嶄綔鏃ュ織 Constants.OrdersLog ordersLog = Constants.OrdersLog.UPLOAD; @@ -159,7 +189,7 @@ .replace("{param}",orderTypeInfo); this.saveOrderLog(orders,ordersLog, logInfo,orders.getReleaseMemberId(),null); - return objects; + return orderReleaseVO; } private Object getWxPayResponse(Orders orders,String openid){ @@ -172,13 +202,14 @@ request.setSpAppid(WxMiniConfig.wxProperties.getAppId()); request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId()); request.setSubAppid(WxMiniConfig.wxProperties.getSubAppId()); + 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 +250,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()) @@ -231,9 +261,12 @@ ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } - if( (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) && - ( Constants.equalsInteger(orders.getCarType(),Constants.ZERO) || Constants.equalsInteger(orders.getCarType(),Constants.ONE) )) - || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ONE)) + if( (Constants.equalsInteger(orders.getType(),Constants.ZERO) + && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) && + ( Constants.equalsInteger(orders.getCarType(),Constants.ZERO) + || Constants.equalsInteger(orders.getCarType(),Constants.ONE) )) + || (Constants.equalsInteger(orders.getType(),Constants.ZERO) + && Constants.equalsInteger(orders.getWorkType(),Constants.ONE)) ){ if(Objects.isNull(orders.getPriceNum2())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); @@ -263,9 +296,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()) ){ @@ -274,6 +307,12 @@ } orders.setWayInfo(JSONObject.toJSONString(orders.getWayInfoDTOList())); }else{ + List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda().eq(Category::getDeleted,Constants.ZERO) + .eq(Category::getType,Constants.TWO) + ); + if(CollectionUtils.isEmpty(categoryList)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"椁愭爣淇℃伅閿欒"); + } //鐢ㄩ璁㈠崟 if(CollectionUtils.isEmpty(orders.getCateringDTOList())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); @@ -287,9 +326,22 @@ ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢ㄩ鏍囧噯鏁版嵁閿欒"); } + //椁愭爣淇℃伅 + List<Category> categories = categoryList.stream().filter(i->Constants.equalsInteger(i.getId(),cateringDTO.getId())).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(categories)){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢ㄩ鏍囧噯鏁版嵁閿欒锛岃鍒锋柊閲嶈瘯"); + } + Category category = categories.get(Constants.ZERO); + List<String> priceList = JSONArray.parseArray(category.getDetail(),String.class ); + if(CollectionUtils.isEmpty(priceList)){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢ㄩ鏍囧噯鏁版嵁閿欒锛岃鍒锋柊閲嶈瘯"); + } + if(priceList.stream().filter(i->((Long.valueOf(i)*100)+"").equals((cateringDTO.getPrice()+""))).collect(Collectors.toList()).size()==Constants.ZERO){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢ㄩ鏍囧噯鏁版嵁閿欒锛岃鍒锋柊閲嶈瘯"); + } sumPrice = sumPrice + (cateringDTO.getPrice() * cateringDTO.getNum()) ; } - if(!sumPrice.equals(orders.getPrice())){ + if(new BigDecimal(sumPrice.toString()).compareTo(orders.getPrice())!=Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍗曚环璁$畻閿欒"); } orders.setWayInfo(JSONObject.toJSONString(orders.getCateringDTOList())); @@ -298,6 +350,9 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閲戦璁$畻閿欒!"); } } + + + @@ -322,12 +377,41 @@ } @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 +440,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()); @@ -363,6 +448,10 @@ } multifileMapper.insert(multifileList); } + orders.setOriginPriceNum1(orders.getPriceNum1()); + orders.setOriginPriceNum2(orders.getPriceNum2()); + orders.setOriginEstimatedAccount(orders.getOriginEstimatedAccount()); + orders.setConfirmOtherFee(0l); ordersMapper.updateById(orders); } @@ -372,7 +461,7 @@ return; } for (Orders orders: orderss) { - this.updateById(orders); + //this.updateById(orders); } } @@ -398,7 +487,39 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY); } orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus())); + this.getPriceUnit(orders); + //闄勪欢淇℃伅 + 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)); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ + String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() + +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ORDERS_FILES).getCode(); + for (Multifile multifile:multifileList) { + multifile.setFileurlFull(path + multifile.getFileurl()); + } + orders.setMultifileList(multifileList); + } + //璁㈠崟娴佽浆璁板綍 + List<OrderLog> orderLogList = orderLogMapper.selectList(new QueryWrapper<OrderLog>().lambda() + .eq(OrderLog::getDeleted,Constants.ZERO) + .eq(OrderLog::getOrderId,orders.getId()) + .orderByAsc(OrderLog::getCreateTime) + ); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(orderLogList)){ + for (OrderLog orderLog:orderLogList) { + if(Constants.equalsInteger(orderLog.getOptUserType(),Constants.ZERO)&& org.apache.commons.lang3.StringUtils.isNotBlank(orders.getReleaseName())){ + orderLog.setLogInfo(orderLog.getLogInfo().replace("{userName}",orders.getReleaseName())); + }else if(Constants.equalsInteger(orderLog.getOptUserType(),Constants.ONE)&& org.apache.commons.lang3.StringUtils.isNotBlank(orders.getAcceptName())){ + orderLog.setLogInfo(orderLog.getLogInfo().replace("{userName}",orders.getAcceptName())); + } + } + orders.setOrderLogList(orderLogList); + } + return orders; + } + + public void getPriceUnit(Orders orders){ if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){ orders.setPriceUnit("鍏�/鏂�"); @@ -420,36 +541,7 @@ 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)); - if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ - String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() - +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ORDERS_FILES).getCode(); - for (Multifile multifile:multifileList) { - multifile.setFileurlFull(path + multifile.getFileurl()); - } - orders.setMultifileList(multifileList); - } - //璁㈠崟娴佽浆璁板綍 - List<OrderLog> orderLogList = orderLogMapper.selectList(new QueryWrapper<OrderLog>().lambda() - .eq(OrderLog::getDeleted,Constants.ZERO) - .eq(OrderLog::getOrderId,orders.getId()) - .orderByAsc(OrderLog::getCreateTime) - ); - if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(orderLogList)){ - for (OrderLog orderLog:orderLogList) { - if(Constants.equalsInteger(orderLog.getOptUserType(),Constants.ZERO)){ - orderLog.setLogInfo(orderLog.getLogInfo().replace("{userName}",orders.getReleaseName())); - }else if(Constants.equalsInteger(orderLog.getOptUserType(),Constants.ONE)){ - orderLog.setLogInfo(orderLog.getLogInfo().replace("{userName}",orders.getAcceptName())); - } - } - orders.setOrderLogList(orderLogList); - } - return orders; } - @Override public Orders findOne(Orders orders) { QueryWrapper<Orders> wrapper = new QueryWrapper<>(orders); @@ -492,8 +584,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,35 +681,57 @@ 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())); + memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" RECEIVE_NUM = (ifnull(RECEIVE_NUM,0) + 1 )").eq(Member::getId,member.getId())); //鍒涘缓鎿嶄綔鏃ュ織 Constants.OrdersLog ordersLog = Constants.OrdersLog.RECEIVE; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),member.getId(),null); - //TODO 寰俊鍏紬鍙锋彁閱� 宸叉帴鍗曟彁閱� + IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,member.getId()) + .eq(IdentityInfo::getType,orders.getType()) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + Member releaseMember = memberMapper.selectById(orders.getReleaseMemberId()); + + if(Objects.nonNull(releaseMember)){ + if(org.apache.commons.lang3.StringUtils.isNotBlank(releaseMember.getOpenid())&&Objects.nonNull(wokerIdentityInfo)){ + //鍙戦�佸井淇¢�氱煡 + sendWxMessage.acceptMessage(releaseMember.getOpenid(),orders,wokerIdentityInfo.getLinkName(),wokerIdentityInfo.getTelephone()); + } + if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getLinkPhone())){ + //鐭俊閫氱煡 + aliSmsService.businessSendSms(Constants.smsContent.accept.getKey(),orders.getLinkPhone(),orders,null, + wokerIdentityInfo,categoryMapper); + } + } @@ -656,75 +773,165 @@ /** * 鍙戝崟鏂逛慨鏀硅鍗� - 宸叉帴鍗曠姸鎬� - * @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) + .set(Orders::getOriginEstimatedAccount,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 閫氱煡鎺ュ崟浜� 璁㈠崟鍙戠敓鍙樻洿 + //閫氱煡鎺ュ崟浜� 璁㈠崟鍙戠敓鍙樻洿 + Member member = memberMapper.selectById(model.getAcceptMemberId()); + if(Objects.nonNull(member)){ + if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getOpenid())){ + model.setStartDate(orders.getStartDate()); + model.setEndDate(orders.getEndDate()); + //鍙戦�佸井淇¢�氱煡 + sendWxMessage.orderUpdMessage(member.getOpenid(),model); + } + IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,member.getId()) + .eq(IdentityInfo::getType,orders.getType()) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + if(Objects.nonNull(wokerIdentityInfo)){ + //鐭俊閫氱煡 + aliSmsService.businessSendSms(Constants.smsContent.orderUpd.getKey(),wokerIdentityInfo.getTelephone(),orders,null, + null,categoryMapper); + } + } + } + @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.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(); + BigDecimal bigDecimalPrice = orders.getPrice(). + multiply(new BigDecimal(orders.getPriceNum1().toString())) + .multiply(new BigDecimal(orders.getPriceNum2().toString())); + return bigDecimalPrice.divide(new BigDecimal("1"),0,BigDecimal.ROUND_HALF_UP).longValue();//orders.getPrice() * orders.getPriceNum1() * orders.getPriceNum2(); } + + /** + * 鎺ュ崟鏂圭‘璁よ鍗曡垂鐢� + */ + @Override + @Transactional(rollbackFor = {BusinessException.class,Exception.class}) + public void confirmFee(ConfirmFeeOrderDTO confirmUpdOrderDTO){ + if(Objects.isNull(confirmUpdOrderDTO) + || Objects.isNull(confirmUpdOrderDTO.getOrderId()) + || Objects.isNull(confirmUpdOrderDTO.getPriceNum1())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + Orders orders = ordersMapper.selectById(confirmUpdOrderDTO.getOrderId()); + if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + if(!Constants.equalsInteger(orders.getAcceptMemberId(),confirmUpdOrderDTO.getMember().getId())){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); + } + if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.doing.getKey())){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�"); + } + //绫诲瀷:0=鐢ㄥ伐锛�1=杩愯揣锛�2=璁㈤ + if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ + //鐢ㄥ伐绫诲瀷:0=閲囨憳宸ワ紱1=鍒嗘嫞宸ワ紱2=鍖呰宸ワ紱锛堢敤宸ヨ鍗曪級 + if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){ + //1=鍒嗘嫞宸� + if( Objects.isNull(confirmUpdOrderDTO.getPriceNum2())){//蹇呴』鏈夌敤宸ユ暟閲忥紙浜猴級 + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + }else if(Constants.equalsInteger(orders.getWorkType(),Constants.TWO)){ + //鍖呰宸� 鐢ㄨ溅绫诲瀷(鐢ㄥ伐鍖呰/杩愯揣浣跨敤):0=澶�;1=娆�/灏忔椂;2=閲嶉噺 + if( !Constants.equalsInteger(orders.getCarType(),Constants.TWO) + && Objects.isNull(confirmUpdOrderDTO.getPriceNum2())){ + //涓嶆槸鎸夐噸閲忚璐圭殑锛屽繀椤绘湁鐢ㄥ伐鏁伴噺锛堜汉锛� + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + } + }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ + //杩愯揣璁㈠崟 + + }else{ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ヨ鍗曚笉鏀寔璇ユ搷浣滐紝璇疯繑鍥炲埛鏂伴噸璇曪紒"); + } + orders.setPriceNum1(confirmUpdOrderDTO.getPriceNum1()); + orders.setPriceNum2(confirmUpdOrderDTO.getPriceNum2()); + Long totalFee = this.getTotal(orders);//閲嶆柊璁$畻璐圭敤 + Long payFee = totalFee+Constants.formatLongNum(confirmUpdOrderDTO.getConfirmOtherFee());//閲嶆柊璁$畻璐圭敤 + BigDecimal recFee = new BigDecimal(payFee).multiply((new BigDecimal(1).subtract(Constants.formatBigDecimal(orders.getPlatformRata())))).setScale(0, RoundingMode.HALF_UP) ; + ordersMapper.update(new UpdateWrapper<Orders>().lambda() + .set(Orders::getPriceNum1,confirmUpdOrderDTO.getPriceNum1()) + .set(Orders::getPriceNum2,confirmUpdOrderDTO.getPriceNum2()) + .set(Orders::getConfirmFeeRemark,confirmUpdOrderDTO.getConfirmFeeRemark()) + .set(Orders::getConfirmOtherFee,confirmUpdOrderDTO.getConfirmOtherFee()) + .set(Orders::getEstimatedAccount,totalFee) + .set(Orders::getStatus,Constants.ordersStatus.feeconfirm.getKey()) + .set(Orders::getPayAccount,payFee) + .set(Orders::getReceiveAccount,recFee.longValue()) + .set(Orders::getUpdateTime,new Date()) + .eq(Orders::getId,orders.getId()) + ); + //璁板綍鍚屾剰淇敼鐨勬棩蹇� + Constants.OrdersLog ordersLog = Constants.OrdersLog.FEE_CONFIRM; + this.saveOrderLog(orders,ordersLog, + ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null); + + } /** * 鎺ュ崟鏂瑰鐞嗚鍗曚慨鏀� @@ -754,10 +961,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 +974,78 @@ }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 鍙戦�佷笉鍚屾剰鍙樻洿閫氱煡 - } + //鐭俊閫氱煡 + aliSmsService.businessSendSms(!Constants.equalsInteger(confirmUpdOrderDTO.getStatus(),Constants.ONE)? + Constants.smsContent.agreeUpd.getKey():Constants.smsContent.disAgreeUpd.getKey() + ,orders.getLinkPhone(),null,null, + null,categoryMapper); } - /** - * 鍙戝崟鏂瑰彇娑堣鍗� - * @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()))){ @@ -814,6 +1061,7 @@ //閫�娆句笟鍔� WithdrawalOrders withdrawalOrders = new WithdrawalOrders(); withdrawalOrders.setCreateTime(new Date()); + withdrawalOrders.setDeleted(Constants.ZERO); withdrawalOrders.setMemberId(orders.getReleaseMemberId()); withdrawalOrders.setAmount(orders.getPayAccount()); withdrawalOrders.setStatus(Constants.ZERO); @@ -824,8 +1072,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 +1110,51 @@ } 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); + + List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda() + .and(i->i.eq(Member::getId,orders.getReleaseMemberId()).or().eq(Member::getId,orders.getAcceptMemberId())) + ); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(members)){ + List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList()); + //鍙戦�佸井淇¢�氱煡 + sendWxMessage.cancelMessage(openIdList,orders,Constants.ONE); + } + + IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,orders.getAcceptMemberId()) + .eq(IdentityInfo::getType,orders.getType()) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + if(Objects.nonNull(wokerIdentityInfo)){ + //鐭俊閫氱煡 + aliSmsService.businessSendSms(Constants.smsContent.releaseCancel.getKey(),wokerIdentityInfo.getTelephone(),orders,null, + null,categoryMapper); + } } /** * 鎺ュ崟鏂瑰彇娑堟帴鍗� - * @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 +1178,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,14 +1186,24 @@ ); //鍑忓皯鎺ュ崟閲� - 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, ordersLog.getInfo(),member.getId(),null); - //TODO 鎺ュ崟鏂瑰彇娑堣鍗曢�氱煡 + List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda() + .and(i->i.eq(Member::getId,orders.getReleaseMemberId()).or().eq(Member::getId,orders.getAcceptMemberId())) + ); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(members)){ + List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList()); + //鍙戦�佸井淇¢�氱煡 + sendWxMessage.cancelMessage(openIdList,orders,Constants.TWO); + } + //鐭俊閫氱煡 + aliSmsService.businessSendSms(Constants.smsContent.receiveCancel.getKey(),member.getTelephone(),orders,null, + null,categoryMapper); } @@ -942,7 +1213,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,28 +1230,111 @@ if(!Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); } - orders.setPayAccount(doneOrderDTO.getAmount()); + Member payMember = memberMapper.selectById(doneOrderDTO.getMember().getId()); + if(Objects.isNull(payMember)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛淇℃伅寮傚父"); + } + + OrderReleaseVO orderReleaseVO = new OrderReleaseVO(); + orderReleaseVO.setId(orders.getId()); Object object = null; //鐢ㄩ璁㈠崟 if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){ orders.setPayAccount(doneOrderDTO.getAmount()); //鎻愭垚閲戦 - Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); + Long tcje = (new BigDecimal(orders.getPayAccount().toString()).multiply(Constants.formatBigDecimal(orders.getPlatformRata())).setScale(0,RoundingMode.HALF_UP).longValue()); 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,payMember.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); + + sendWxMessage.revenueMessage(member.getOpenid(),orders); + + //鐭俊閫氱煡鎺ュ崟鏂� + if(Objects.nonNull(orders.getAcceptMemberId())){ + IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,orders.getAcceptMemberId()) + .eq(IdentityInfo::getType,orders.getType()) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + if(Objects.nonNull(wokerIdentityInfo)){ + aliSmsService.businessSendSms(Constants.smsContent.pay.getKey(),wokerIdentityInfo.getTelephone(),orders,null, + null,categoryMapper); + } + } } - 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 @@ -1032,6 +1386,33 @@ Constants.OrdersLog ordersLog = Constants.OrdersLog.SYSTEM_CANCEL; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),null,loginUserInfo.getId()); + + List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda() + .and(i->i.eq(Member::getId,orders.getReleaseMemberId()).or().eq(Member::getId,orders.getAcceptMemberId())) + ); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(members)){ + List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList()); + orders.setCancelTime(new Date()); + //鍙戦�佸井淇¢�氱煡 + sendWxMessage.cancelMessage(openIdList,orders,Constants.ZERO); + } + //鐭俊閫氱煡鍙戝崟鏂� + aliSmsService.businessSendSms(Constants.smsContent.platformCancel.getKey(),orders.getLinkPhone(),orders,null, + null,categoryMapper); + //鐭俊閫氱煡鎺ュ崟鏂� + if(Objects.nonNull(orders.getAcceptMemberId())){ + IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,orders.getAcceptMemberId()) + .eq(IdentityInfo::getType,orders.getType()) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + if(Objects.nonNull(wokerIdentityInfo)){ + aliSmsService.businessSendSms(Constants.smsContent.platformCancel2.getKey(),wokerIdentityInfo.getTelephone(),orders,null, + null,categoryMapper); + } + } + } @@ -1059,26 +1440,24 @@ 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 = ( ifnull(total_score,0) +" + commentDTO.getLevel() + " ) / (ifnull(score_order_num,0) + 1 )") + .setSql(" total_score = ifnull(total_score,0) +" + commentDTO.getLevel()) + .setSql(" score_order_num = ifnull(score_order_num,0) + 1 " ) + .eq(Member::getId,orders.getAcceptMemberId()) ); - //鏃ュ織瀛樺偍 Constants.OrdersLog ordersLog = Constants.OrdersLog.COMMENT; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),orders.getAcceptMemberId(),null); } - - /** @@ -1090,7 +1469,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 +1477,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 +1498,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 +1512,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 +1533,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()) ); @@ -1156,7 +1543,23 @@ this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),orders.getReleaseMemberId(),null); - //TODO 閫氱煡鎺ュ崟鏂� 娆鹃」宸插埌璐� + // 閫氱煡鎺ュ崟鏂� 娆鹃」宸插埌璐� + sendWxMessage.revenueMessage(member.getOpenid(),orders); + + //鐭俊閫氱煡鎺ュ崟鏂� + if(Objects.nonNull(orders.getAcceptMemberId())){ + IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,orders.getAcceptMemberId()) + .eq(IdentityInfo::getType,orders.getType()) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + if(Objects.nonNull(wokerIdentityInfo)){ + aliSmsService.businessSendSms(Constants.smsContent.pay.getKey(),wokerIdentityInfo.getTelephone(),orders,null, + null,categoryMapper); + } + } + } } return ("澶勭悊鎴愬姛!"); @@ -1169,73 +1572,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 +1742,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 +1786,59 @@ } orders.setMultifileList(multifileList); } + orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus())); + orders.setCancelStatus(Constants.ZERO); + if(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())&&Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){ + orders.setConfirmCountdown(DateUtil.getXMinuteAfterDate(orders.getIsUpdateTime(),60).getTime() - System.currentTimeMillis()); + } + 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 +1878,85 @@ } - - //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::getDeleted,Constants.ZERO) + .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.getList(lgt,lat,orders.getType()); +// memberMapper.selectList(new MPJLambdaWrapper<Member>() +// .select(Member::getId,Member::getScore) +// .select(" ifnull((select r.level from receive_weight r where r.RECEIVE_MAX > RECEIVE_NUM and 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 = 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(" level , score ") +// .orderByAsc(Member::getDistance) +// .last(" limit 1 ") +// ); + if(CollectionUtils.isEmpty(memberList)){ + continue; + } + Member member = memberList.get(Constants.ZERO); + Member releaseMember = memberMapper.selectById(orders.getReleaseMemberId()); + //鑷姩娲惧崟 + Orders model = ordersMapper.selectById(orders.getId()); + if(!Constants.equalsInteger(model.getStatus(),Constants.ONE) || Constants.equalsInteger(model.getId(),model.getReleaseMemberId())){ + //濡傛灉璁㈠崟宸插垹闄� 骞朵笖闈炲彂甯冩柟 + 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(" RECEIVE_NUM = (ifnull(RECEIVE_NUM,0) + 1 )").eq(Member::getId,member.getId())); + //鍒涘缓鎿嶄綔鏃ュ織 + Constants.OrdersLog ordersLog = Constants.OrdersLog.AUTO; + this.saveOrderLog(orders,ordersLog, + ordersLog.getInfo(),member.getId(),null); + IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() + .eq(IdentityInfo::getMemberId,member.getId()) + .eq(IdentityInfo::getType,orders.getType()) + .eq(IdentityInfo::getAuditStatus,Constants.TWO) + .last("limit 1") + ); + //閫氱煡鍙戝崟鏂� + if(org.apache.commons.lang3.StringUtils.isNotBlank(releaseMember.getOpenid())&&Objects.nonNull(wokerIdentityInfo)){ + //鍙戦�佸井淇¢�氱煡 + sendWxMessage.acceptMessage(releaseMember.getOpenid(),orders,wokerIdentityInfo.getLinkName(),wokerIdentityInfo.getTelephone()); + } + + //閫氱煡鎺ュ崟鏂� + sendWxMessage.autoDispatchMessage(member.getOpenid(),orders,GeoUtils.haversineDistance( + orders.getLgt().doubleValue(), orders.getLat().doubleValue(), + wokerIdentityInfo.getLgt().doubleValue(), + wokerIdentityInfo.getLat().doubleValue() + )); + + aliSmsService.businessSendSms(Constants.smsContent.dispatch.getKey(),orders.getLinkPhone(),orders,null, + null,categoryMapper); + } } //鑷姩璇勪环 璁㈠崟瀹屾垚7澶╁悗鑷姩璇勪环4鏄� @@ -1395,8 +1972,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 +2007,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 +2019,11 @@ } + @Override + public void initializeCode(){ + //鏇存柊缂撳瓨 + redisTemplate.opsForValue().set(Constants.RedisKeys.ORDER_CODE,0); + } -- Gitblit v1.9.3