From 2304d7b140c5c5b4bf3a83f9ced8bff37d20c42e Mon Sep 17 00:00:00 2001 From: rk <94314517@qq.com> Date: 星期日, 28 九月 2025 16:45:33 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 1683 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 1,227 insertions(+), 456 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 8887d58..0610eea 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; @@ -27,10 +30,14 @@ import com.wechat.pay.java.service.partnerpayments.jsapi.model.Payer; import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayRequest; import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayWithRequestPaymentResponse; +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; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -38,17 +45,19 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +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 { @@ -77,15 +86,46 @@ private IdentityInfoMapper identityInfoMapper; @Autowired + 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)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈缃钩鍙伴厤缃俊鎭�"); + } + orders.setPlatformRata(new BigDecimal(platformCategory.getDetail()).divide(new BigDecimal("100"))); //璁㈠崟缂栧彿 orders.setCode(this.getNextCode(orders.getType())); Category category = categoryMapper.selectOne(new QueryWrapper<Category>().lambda() @@ -96,20 +136,30 @@ if(Objects.isNull(category)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鍙傛暟閰嶇疆閿欒,璇疯仈绯荤鐞嗗憳"); } + orders.setPayAccount(orders.getEstimatedAccount()); + Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); + orders.setReceiveAccount(orders.getPayAccount() - tcje); //鐢ㄩ璁㈠崟 if(Constants.equalsInteger(orders.getType(),Constants.TWO)){ - orders.setStatus(Constants.ZERO); + 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.ONE); + orders.setStatus(Constants.ordersStatus.wait.getKey()); } + orders.setOriginPriceNum1(orders.getPriceNum1()); + orders.setOriginPriceNum2(orders.getPriceNum2()); + orders.setOriginEstimatedAccount(orders.getEstimatedAccount()); + 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(),"闄勪欢淇℃伅閿欒"); @@ -122,11 +172,11 @@ multifileMapper.insert(multifileList); } //鏇存柊鐢ㄦ埛鍙戝崟閲� - memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum," (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; - String orderTypeInfo = "鐢ㄥ伐鍗�"; + String orderTypeInfo = Constants.getOrderInfo(orders);/*"鐢ㄥ伐鍗�"; if(!Constants.equalsInteger(orders.getType(),Constants.ZERO)){ orderTypeInfo = Constants.equalsInteger(orders.getType(),Constants.ONE)?"鐢ㄨ溅鍗�":"閫侀鍗�"; }else{ @@ -135,12 +185,12 @@ }else{ orderTypeInfo = orderTypeInfo + (Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"-鍒嗘嫞宸�":"-鍖呰宸�"); } - } + }*/ String logInfo = ordersLog.getInfo() .replace("{param}",orderTypeInfo); this.saveOrderLog(orders,ordersLog, logInfo,orders.getReleaseMemberId(),null); - return objects; + return orderReleaseVO; } private Object getWxPayResponse(Orders orders,String openid){ @@ -153,13 +203,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(orders.getPayAccount().intValue()); request.setAmount(amount); // PrepayResponse res = WxMiniConfig.wxPayService.prepay(request); // 璺熶箣鍓嶄笅鍗曠ず渚嬩竴鏍凤紝濉厖棰勪笅鍗曞弬鏁� @@ -200,11 +251,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()) - || Objects.isNull(orders.getTotalDays()) + || (!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()) @@ -212,19 +262,24 @@ ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } - if((Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO )) - || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) - &&Constants.equalsInteger(orders.getCarType(),Constants.TWO)) - || Constants.equalsInteger(orders.getType(),Constants.ONE) + Integer priceNum2 = orders.getPriceNum2(); + 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); + } + }else{ orders.setPriceNum2(Constants.ONE); } - if(Objects.isNull(orders.getPriceNum2())){ - throw new BusinessException(ResponseStatus.BAD_REQUEST); - } + orders.setTotalDays(DateUtil.daysBetweenDates(orders.getEndDate(),orders.getStartDate())+1); if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ if(Constants.equalsInteger(orders.getWorkType(),Constants.TWO) - && Objects.isNull(orders.getCarType())){ + && ( Objects.isNull(orders.getCarType()) ) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ @@ -233,6 +288,7 @@ || Objects.isNull(orders.getTransportNum()) || StringUtils.isEmpty(orders.getTransportUnit()) || StringUtils.isEmpty(orders.getLocationEnd()) + || StringUtils.isEmpty(orders.getCarUnit()) || Objects.isNull(orders.getLatEnd()) || Objects.isNull(orders.getLgtEnd()) || CollectionUtils.isEmpty(orders.getWayInfoDTOList()) @@ -242,9 +298,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()) ){ @@ -253,11 +309,18 @@ } 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); } Long sumPrice = 0L; +// List<CateringDTO> cateringDTOList = new ArrayList<>(); for (CateringDTO cateringDTO:orders.getCateringDTOList()) { if(Objects.isNull(cateringDTO) || StringUtils.isEmpty(cateringDTO.getName()) @@ -266,17 +329,37 @@ ){ 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())); } if(!orders.getEstimatedAccount().equals(this.getTotal(orders))){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閲戦璁$畻閿欒!"); } + orders.setPriceNum2(priceNum2); } + + + @@ -301,12 +384,38 @@ } @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(),"姝ょ被璁㈠崟鏃犳硶杩涜淇敼"); @@ -335,6 +444,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()); @@ -342,6 +452,10 @@ } multifileMapper.insert(multifileList); } + orders.setOriginPriceNum1(orders.getPriceNum1()); + orders.setOriginPriceNum2(orders.getPriceNum2()); + orders.setOriginEstimatedAccount(orders.getOriginEstimatedAccount()); + orders.setConfirmOtherFee(0L); ordersMapper.updateById(orders); } @@ -351,15 +465,87 @@ return; } for (Orders orders: orderss) { - this.updateById(orders); + //this.updateById(orders); } } @Override public Orders findById(Integer id) { - return ordersMapper.selectById(id); + 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) + .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::getDeleted,Constants.ZERO) + .eq(Orders::getId,id) + .orderByDesc(Orders::getId)); + if(Objects.isNull(orders)){ + 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("鍏�/鏂�"); + }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); @@ -375,176 +561,105 @@ @Override public PageData<Orders> findPage(PageWrap<Orders> pageWrap) { IPage<Orders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); - QueryWrapper<Orders> queryWrapper = new QueryWrapper<>(); + MPJLambdaWrapper<Orders> queryWrapper = new MPJLambdaWrapper<Orders>(); Utils.MP.blankToNull(pageWrap.getModel()); - if (pageWrap.getModel().getId() != null) { - queryWrapper.lambda().eq(Orders::getId, pageWrap.getModel().getId()); + Orders model = pageWrap.getModel(); + queryWrapper.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) + .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::getDeleted,Constants.ZERO) + .orderByDesc(Orders::getId) + ; + queryWrapper.ge(Objects.nonNull(model.getCreateTimeStart()),Orders::getCreateTime, Utils.Date.getStart(model.getCreateTimeStart())); + queryWrapper.le(Objects.nonNull(model.getCreateTimeEnd()),Orders::getCreateTime, Utils.Date.getEnd(model.getCreateTimeEnd())); + queryWrapper.ge(Objects.nonNull(model.getAcceptTimeStart()),Orders::getAcceptTime, Utils.Date.getStart(model.getAcceptTimeStart())); + queryWrapper.le(Objects.nonNull(model.getAcceptTimeEnd()),Orders::getAcceptTime, Utils.Date.getEnd(model.getAcceptTimeEnd())); + queryWrapper.ge(Objects.nonNull(model.getDoneTimeStart()),Orders::getFinishTime, Utils.Date.getStart(model.getDoneTimeStart())); + queryWrapper.le(Objects.nonNull(model.getDoneTimeEnd()),Orders::getFinishTime, Utils.Date.getEnd(model.getDoneTimeEnd())); + 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 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()) { + this.getOrderContent(orders); + orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus())); + orders.setEstimatedAccountYuan(Objects.nonNull(orders.getEstimatedAccount())&&orders.getEstimatedAccount()>0?orders.getEstimatedAccount()/100:0L); + orders.setPayAccountYuan(Objects.nonNull(orders.getPayAccount())&&orders.getPayAccount()>0?orders.getPayAccount()/100:0L); } - if (pageWrap.getModel().getDeleted() != null) { - queryWrapper.lambda().eq(Orders::getDeleted, pageWrap.getModel().getDeleted()); - } - if (pageWrap.getModel().getCreateUser() != null) { - queryWrapper.lambda().eq(Orders::getCreateUser, pageWrap.getModel().getCreateUser()); - } - if (pageWrap.getModel().getCreateTime() != null) { - queryWrapper.lambda().ge(Orders::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); - queryWrapper.lambda().le(Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); - } - if (pageWrap.getModel().getUpdateUser() != null) { - queryWrapper.lambda().eq(Orders::getUpdateUser, pageWrap.getModel().getUpdateUser()); - } - if (pageWrap.getModel().getUpdateTime() != null) { - queryWrapper.lambda().ge(Orders::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); - queryWrapper.lambda().le(Orders::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); - } - if (pageWrap.getModel().getRemark() != null) { - queryWrapper.lambda().eq(Orders::getRemark, pageWrap.getModel().getRemark()); - } - if (pageWrap.getModel().getReleaseMemberId() != null) { - queryWrapper.lambda().eq(Orders::getReleaseMemberId, pageWrap.getModel().getReleaseMemberId()); - } - if (pageWrap.getModel().getType() != null) { - queryWrapper.lambda().eq(Orders::getType, pageWrap.getModel().getType()); - } - if (pageWrap.getModel().getStartDate() != null) { - queryWrapper.lambda().ge(Orders::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())); - queryWrapper.lambda().le(Orders::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate())); - } - if (pageWrap.getModel().getEndDate() != null) { - queryWrapper.lambda().ge(Orders::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())); - queryWrapper.lambda().le(Orders::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate())); - } - if (pageWrap.getModel().getLocation() != null) { - queryWrapper.lambda().eq(Orders::getLocation, pageWrap.getModel().getLocation()); - } - if (pageWrap.getModel().getLocationRemark() != null) { - queryWrapper.lambda().eq(Orders::getLocationRemark, pageWrap.getModel().getLocationRemark()); - } - if (pageWrap.getModel().getLat() != null) { - queryWrapper.lambda().eq(Orders::getLat, pageWrap.getModel().getLat()); - } - if (pageWrap.getModel().getProvince() != null) { - queryWrapper.lambda().eq(Orders::getProvince, pageWrap.getModel().getProvince()); - } - if (pageWrap.getModel().getCity() != null) { - queryWrapper.lambda().eq(Orders::getCity, pageWrap.getModel().getCity()); - } - if (pageWrap.getModel().getArea() != null) { - queryWrapper.lambda().eq(Orders::getArea, pageWrap.getModel().getArea()); - } - if (pageWrap.getModel().getLgt() != null) { - queryWrapper.lambda().eq(Orders::getLgt, pageWrap.getModel().getLgt()); - } - if (pageWrap.getModel().getCategoryId() != null) { - queryWrapper.lambda().eq(Orders::getCategoryId, pageWrap.getModel().getCategoryId()); - } - if (pageWrap.getModel().getWorkType() != null) { - queryWrapper.lambda().eq(Orders::getWorkType, pageWrap.getModel().getWorkType()); - } - if (pageWrap.getModel().getPriceNum1() != null) { - queryWrapper.lambda().eq(Orders::getPriceNum1, pageWrap.getModel().getPriceNum1()); - } - if (pageWrap.getModel().getPriceNum2() != null) { - queryWrapper.lambda().eq(Orders::getPriceNum2, pageWrap.getModel().getPriceNum2()); - } - if (pageWrap.getModel().getSupplement() != null) { - queryWrapper.lambda().eq(Orders::getSupplement, pageWrap.getModel().getSupplement()); - } - if (pageWrap.getModel().getPrice() != null) { - queryWrapper.lambda().eq(Orders::getPrice, pageWrap.getModel().getPrice()); - } - if (pageWrap.getModel().getEstimatedAccount() != null) { - queryWrapper.lambda().eq(Orders::getEstimatedAccount, pageWrap.getModel().getEstimatedAccount()); - } - if (pageWrap.getModel().getPayAccount() != null) { - queryWrapper.lambda().eq(Orders::getPayAccount, pageWrap.getModel().getPayAccount()); - } - if (pageWrap.getModel().getCarType() != null) { - queryWrapper.lambda().eq(Orders::getCarType, pageWrap.getModel().getCarType()); - } - if (pageWrap.getModel().getTransportTypeId() != null) { - queryWrapper.lambda().eq(Orders::getTransportTypeId, pageWrap.getModel().getTransportTypeId()); - } - if (pageWrap.getModel().getTransportNum() != null) { - queryWrapper.lambda().eq(Orders::getTransportNum, pageWrap.getModel().getTransportNum()); - } - if (pageWrap.getModel().getTransportUnit() != null) { - queryWrapper.lambda().eq(Orders::getTransportUnit, pageWrap.getModel().getTransportUnit()); - } - if (pageWrap.getModel().getLocationEnd() != null) { - queryWrapper.lambda().eq(Orders::getLocationEnd, pageWrap.getModel().getLocationEnd()); - } - if (pageWrap.getModel().getLatEnd() != null) { - queryWrapper.lambda().eq(Orders::getLatEnd, pageWrap.getModel().getLatEnd()); - } - if (pageWrap.getModel().getLgtEnd() != null) { - queryWrapper.lambda().eq(Orders::getLgtEnd, pageWrap.getModel().getLgtEnd()); - } - if (pageWrap.getModel().getWayInfo() != null) { - queryWrapper.lambda().eq(Orders::getWayInfo, pageWrap.getModel().getWayInfo()); - } - if (pageWrap.getModel().getCode() != null) { - queryWrapper.lambda().eq(Orders::getCode, pageWrap.getModel().getCode()); - } - if (pageWrap.getModel().getStatus() != null) { - queryWrapper.lambda().eq(Orders::getStatus, pageWrap.getModel().getStatus()); - } - if (pageWrap.getModel().getAcceptTime() != null) { - queryWrapper.lambda().ge(Orders::getAcceptTime, Utils.Date.getStart(pageWrap.getModel().getAcceptTime())); - queryWrapper.lambda().le(Orders::getAcceptTime, Utils.Date.getEnd(pageWrap.getModel().getAcceptTime())); - } - if (pageWrap.getModel().getAcceptMemberId() != null) { - queryWrapper.lambda().eq(Orders::getAcceptMemberId, pageWrap.getModel().getAcceptMemberId()); - } - if (pageWrap.getModel().getAcceptType() != null) { - queryWrapper.lambda().eq(Orders::getAcceptType, pageWrap.getModel().getAcceptType()); - } - if (pageWrap.getModel().getWorkStartTime() != null) { - queryWrapper.lambda().ge(Orders::getWorkStartTime, Utils.Date.getStart(pageWrap.getModel().getWorkStartTime())); - queryWrapper.lambda().le(Orders::getWorkStartTime, Utils.Date.getEnd(pageWrap.getModel().getWorkStartTime())); - } - if (pageWrap.getModel().getFinishTime() != null) { - queryWrapper.lambda().ge(Orders::getFinishTime, Utils.Date.getStart(pageWrap.getModel().getFinishTime())); - queryWrapper.lambda().le(Orders::getFinishTime, Utils.Date.getEnd(pageWrap.getModel().getFinishTime())); - } - if (pageWrap.getModel().getPlatformRata() != null) { - queryWrapper.lambda().eq(Orders::getPlatformRata, pageWrap.getModel().getPlatformRata()); - } - if (pageWrap.getModel().getWxExternalNo() != null) { - queryWrapper.lambda().eq(Orders::getWxExternalNo, pageWrap.getModel().getWxExternalNo()); - } - if (pageWrap.getModel().getCommentStatus() != null) { - queryWrapper.lambda().eq(Orders::getCommentStatus, pageWrap.getModel().getCommentStatus()); - } - if (pageWrap.getModel().getCommentInfo() != null) { - queryWrapper.lambda().eq(Orders::getCommentInfo, pageWrap.getModel().getCommentInfo()); - } - if (pageWrap.getModel().getCommentLevel() != null) { - queryWrapper.lambda().eq(Orders::getCommentLevel, pageWrap.getModel().getCommentLevel()); - } - if (pageWrap.getModel().getCommentTime() != null) { - queryWrapper.lambda().ge(Orders::getCommentTime, Utils.Date.getStart(pageWrap.getModel().getCommentTime())); - queryWrapper.lambda().le(Orders::getCommentTime, Utils.Date.getEnd(pageWrap.getModel().getCommentTime())); - } - if (pageWrap.getModel().getCommentType() != null) { - queryWrapper.lambda().eq(Orders::getCommentType, pageWrap.getModel().getCommentType()); - } - if (pageWrap.getModel().getCancelTime() != null) { - queryWrapper.lambda().ge(Orders::getCancelTime, Utils.Date.getStart(pageWrap.getModel().getCancelTime())); - queryWrapper.lambda().le(Orders::getCancelTime, Utils.Date.getEnd(pageWrap.getModel().getCancelTime())); - } - if (pageWrap.getModel().getIsUpdate() != null) { - queryWrapper.lambda().eq(Orders::getIsUpdate, pageWrap.getModel().getIsUpdate()); - } - for(PageWrap.SortData sortData: pageWrap.getSorts()) { - if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { - queryWrapper.orderByDesc(sortData.getProperty()); - } else { - queryWrapper.orderByAsc(sortData.getProperty()); + return PageData.from(iPage); + } + + public void getOrderContent(Orders orders){ + if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ + orders.setOrderContent(Constants.workType.getName(orders.getWorkType()) +" | " + orders.getCategoryName()); + if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){ + if(Objects.nonNull(orders.getPriceNum1())){ + orders.setOrderContent(orders.getOrderContent()+" | " +orders.getPriceNum1()+"鏂�"); + } + }else if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){ + if(Objects.nonNull(orders.getPriceNum2())) { + orders.setOrderContent(orders.getOrderContent() + " | " + orders.getPriceNum2() + "浜�"); + } + }else{ + if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)||Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ + if(Objects.nonNull(orders.getPriceNum2())) { + orders.setOrderContent(orders.getOrderContent() + " | " + orders.getPriceNum2() + "浜�"); + } + }else{ + if(Objects.nonNull(orders.getPriceNum1())) { + orders.setOrderContent(orders.getOrderContent() + " | " + orders.getPriceNum1() + "鏂�"); + } + } + } + }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ + if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getCategoryName())){ + orders.setOrderContent( orders.getCategoryName() + + (StringUtils.isEmpty(orders.getTransportTypeName())?"":" | " + orders.getTransportTypeName() ) + + (Objects.isNull(orders.getTransportNum())?null:" | " + orders.getTransportNum() +"鏂�")); + } + + if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ + if(Objects.nonNull(orders.getPriceNum2())) { + orders.setOrderContent(orders.getOrderContent() + " | 鐢ㄨ溅" + orders.getPriceNum1() + "澶�"); + } + }else{ + if(Objects.nonNull(orders.getPriceNum2())) { + orders.setOrderContent(orders.getOrderContent() + " | 鐢ㄨ溅" + orders.getPriceNum1() + "娆�"); + } + } + }else{ + if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getWayInfo())){ + List<CateringDTO> cateringDTOList = JSONArray.parseArray(orders.getWayInfo(),CateringDTO.class); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(cateringDTOList)){ + for (CateringDTO cateringDTO:cateringDTOList) { + if(StringUtils.isEmpty(orders.getOrderContent())){ + orders.setOrderContent(cateringDTO.getName()+(new BigDecimal(cateringDTO.getPrice().toString()).divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP))+" 闇�"+cateringDTO.getNum()+"浠�"); + }else{ + orders.setOrderContent(orders.getOrderContent()+" | "+cateringDTO.getName()+(new BigDecimal(cateringDTO.getPrice().toString()).divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP))+" 闇�"+cateringDTO.getNum()+"浠�"); + } + } + } } } - return PageData.from(ordersMapper.selectPage(page, queryWrapper)); + } + + @Override public long count(Orders orders) { @@ -564,41 +679,63 @@ if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - if(!Constants.equalsInteger(orders.getStatus(),Constants.ONE)){ + if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.wait.getKey())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�"); } 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.TWO); - 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().set(Member::getPublishNum," (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); + } + } @@ -617,17 +754,20 @@ if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){ + if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�"); } - if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){ + if(!Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); } if(Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟淇敼寰呯‘璁わ紝鏃犳硶杩涜璇ユ搷浣�"); } + if(orders.getStartDate().getTime()>System.currentTimeMillis()){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鏈埌寮�濮嬫椂闂存棤娉曡繘琛岃鎿嶄綔"); + } orders.setUpdateTime(new Date()); - orders.setStatus(Constants.THREE); + orders.setStatus(Constants.ordersStatus.doing.getKey()); orders.setWorkStartTime(new Date()); ordersMapper.updateById(orders); @@ -640,77 +780,182 @@ /** * 鍙戝崟鏂逛慨鏀硅鍗� - 宸叉帴鍗曠姸鎬� - * @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()) - || Objects.isNull(updOrderDataDTO.getTotalDays())){ + 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.TWO)){ - 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); + Long tcje = Long.valueOf(new BigDecimal(total.toString()).multiply(model.getPlatformRata()).intValue()); + Long reciveTotal = total - tcje; 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::getUpdateTime,"now()") + .set(Orders::getIsUpdateTime,new Date()) + .set(Orders::getUpdateTime,new Date()) .set(Orders::getEstimatedAccount,total) + .set(Orders::getOriginEstimatedAccount,total) + .set(Orders::getReceiveAccount,reciveTotal) .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 閫氱煡鎺ュ崟浜� 璁㈠崟鍙戠敓鍙樻洿 - } - - - public Long getTotal(Orders orders){ - if( - (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO )) || - (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) - &&Constants.equalsInteger(orders.getCarType(),Constants.TWO)) - || Constants.equalsInteger(orders.getType(),Constants.ONE) - ){ - orders.setPriceNum2(Constants.ONE); + //閫氱煡鎺ュ崟浜� 璁㈠崟鍙戠敓鍙樻洿 + 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); + } } - return orders.getPrice() * orders.getPriceNum1() * orders.getPriceNum2(); + } + + @Override + public Long getTotal(Orders orders){ + if(Objects.isNull(orders) + ||Objects.isNull(orders.getPrice()) + ||Objects.isNull(orders.getPriceNum1()) + ||Objects.isNull(orders.getType()) + ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + BigDecimal bigDecimalPrice = BigDecimal.ZERO; + if( + (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO )) + || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Objects.nonNull(orders.getCarType()) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO ) && Constants.equalsInteger(orders.getCarType(),Constants.TWO)) + || Constants.equalsInteger(orders.getType(),Constants.ONE) + || Constants.equalsInteger(orders.getType(),Constants.TWO) + ){ + bigDecimalPrice = orders.getPrice().multiply(new BigDecimal(orders.getPriceNum1().toString())); + }else{ + if(Objects.isNull(orders.getPriceNum2())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + bigDecimalPrice = orders.getPrice().multiply(new BigDecimal(orders.getPriceNum1().toString())).multiply(new BigDecimal(orders.getPriceNum2().toString())); + } + if(Objects.nonNull(orders.getConfirmOtherFee())){ + bigDecimalPrice = bigDecimalPrice.add(new BigDecimal(orders.getConfirmOtherFee().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()); + orders.setConfirmOtherFee(confirmUpdOrderDTO.getConfirmOtherFee()); + Long totalFee = this.getTotal(orders);//閲嶆柊璁$畻璐圭敤 + Long payFee = totalFee;//閲嶆柊璁$畻璐圭敤 + Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); + Long reciveTotal = payFee - tcje; + //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,reciveTotal) + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getConfirmFeeTime,new Date()) + .eq(Orders::getId,orders.getId()) + ); + //璁板綍鍚屾剰淇敼鐨勬棩蹇� + Constants.OrdersLog ordersLog = Constants.OrdersLog.FEE_CONFIRM; + this.saveOrderLog(orders,ordersLog, + ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null); + + //寰俊閫氱煡 + Member member = memberMapper.selectById(orders.getReleaseMemberId()); + if(Objects.nonNull(member)&& org.apache.commons.lang3.StringUtils.isNotBlank(member.getOpenid())){ + sendWxMessage.waitPayMessage(member.getOpenid(),orders); + } + + } /** * 鎺ュ崟鏂瑰鐞嗚鍗曚慨鏀� @@ -731,19 +976,19 @@ if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){ + if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�"); } if(!Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟淇敼鐘舵�佸凡娴佽浆锛屾棤娉曡繘琛岃鎿嶄綔"); } - if(Constants.equalsInteger(orders.getAcceptMemberId(),confirmUpdOrderDTO.getMember().getId())){ + 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()) ); //璁板綍鍚屾剰淇敼鐨勬棩蹇� @@ -753,44 +998,84 @@ }else{ ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getIsUpdate,Constants.TWO) - .set(Orders::getUpdateTime,"now()") - .set(Orders::getStatus,Constants.ONE) + .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.getStatus(),Constants.ONE) - ||Constants.equalsInteger(orders.getStatus(),Constants.ZERO) - || Constants.equalsInteger(orders.getStatus(),Constants.TWO))){ + 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()))){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷"); } - if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){ + if(!Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); } //寰呮敮浠樼敤椁愯鍗�/寰呮帴鍗曡鍗曡繘琛屽彇娑� @@ -800,19 +1085,19 @@ //閫�娆句笟鍔� WithdrawalOrders withdrawalOrders = new WithdrawalOrders(); withdrawalOrders.setCreateTime(new Date()); + withdrawalOrders.setDeleted(Constants.ZERO); withdrawalOrders.setMemberId(orders.getReleaseMemberId()); withdrawalOrders.setAmount(orders.getPayAccount()); - withdrawalOrders.setWxExternalNo("refund_"+orders.getCode()); - withdrawalOrders.setStatus(Constants.ONE); + withdrawalOrders.setStatus(Constants.ZERO); withdrawalOrders.setDoneTime(new Date()); withdrawalOrders.setType(Constants.ONE); withdrawalOrders.setObjId(orders.getId()); wxMiniUtilService.wxRefund(withdrawalOrders,orders); } ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getStatus,99) - .set(Orders::getUpdateTime,"now()") - .set(Orders::getCancelTime,"now()") + .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getCancelTime,new Date()) .set(Orders::getCancelType,Constants.ZERO) .eq(Orders::getId,orders.getId()) ); @@ -821,17 +1106,17 @@ 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,99) + .eq(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) .eq(Orders::getReleaseMemberId,orders.getReleaseMemberId())); //鏌ヨ鍙栨秷娆℃暟 if(totalCancelTimes<=cancelTimes){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟,濡傞渶澶勭悊璇疯仈绯诲鏈�"); + 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+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟锛屽闇�澶勭悊璇疯仈绯诲鏈�"); + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟"); } if(Constants.equalsInteger(orders.getType(),Constants.TWO)){ @@ -848,43 +1133,57 @@ wxMiniUtilService.wxRefund(withdrawalOrders,orders); } ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getStatus,99) - .set(Orders::getUpdateTime,"now()") - .set(Orders::getCancelTime,"now()") + .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) + .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()); + //鍙戦�佸井淇¢�氱煡 + orders.setCancelTime(new Date()); + 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); - } - if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){ + public void receiveCancelOrder(Orders orders,Member member){ + if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷"); } - if(Constants.equalsInteger(orders.getAcceptMemberId(),member.getId())){ + if(!Constants.equalsInteger(orders.getAcceptMemberId(),member.getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); } //鍒ゆ柇鏄惁鍙慨鏀� 宸插彇娑堟鏁� 涓� 鏃堕棿闄愬埗 @@ -895,31 +1194,43 @@ .eq(OrderLog::getMemberId,member.getId())); //鏌ヨ鍙栨秷娆℃暟 if(totalCancelTimes<=cancelTimes){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟,濡傞渶澶勭悊璇疯仈绯诲鏈�"); + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟"); } Integer cancelTimeHour = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RECEIVE_CANCEL_TIME).getCode()); Long hours = DateUtil.getBetweenHours(new Date(),orders.getStartDate()); if(hours < cancelTimeHour){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟锛屽闇�澶勭悊璇疯仈绯诲鏈�"); + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟"); } ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getUpdateTime,"now()") - .set(Orders::getStatus,Constants.ONE) + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getCancelTime,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,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()); + //鍙戦�佸井淇¢�氱煡 + orders.setCancelTime(new Date()); + sendWxMessage.cancelMessage(openIdList,orders,Constants.TWO); + } + //鐭俊閫氱煡 + aliSmsService.businessSendSms(Constants.smsContent.receiveCancel.getKey(),member.getTelephone(),orders,null, + null,categoryMapper); } @@ -929,7 +1240,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); } @@ -940,33 +1251,132 @@ if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - if(!Constants.equalsInteger(orders.getStatus(),Constants.THREE)){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷"); + if(Constants.equalsInteger(orders.getType(),Constants.orderType.scd.getKey())){ + if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.doing.getKey())){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷"); + } + }else{ + if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.feeconfirm.getKey())){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷"); + } } - if(Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){ + + if(!Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔"); } + 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 = (new BigDecimal(orders.getPayAccount().toString()).multiply(Constants.formatBigDecimal(orders.getPlatformRata())).setScale(0,RoundingMode.HALF_UP).longValue()); 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,payMember.getOpenid()); + orderReleaseVO.setObject(object); }else{ - orders.setStatus(Constants.FOUR); + 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.FIVE) )) + && Constants.equalsInteger(orders.getPayStatus(),Constants.ZERO) )){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆"); + } + Member payMember = memberMapper.selectById(reusePayDTO.getMember().getId()); + if(Objects.isNull(payMember)){ + 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); + } + orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); + ordersMapper.updateById(orders); + //鍞よ捣鏀粯涓氬姟 + Object object = this.getWxPayResponse(orders,payMember.getOpenid()); + orderReleaseVO.setObject(object); + orderReleaseVO.setId(orders.getId()); + return orderReleaseVO; + } @Override @@ -976,8 +1386,8 @@ if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - if(!(Constants.equalsInteger(orders.getStatus(),Constants.ONE)||Constants.equalsInteger(orders.getStatus(),Constants.TWO) - ||Constants.equalsInteger(orders.getStatus(),Constants.THREE))){ + if(!(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.wait.getKey())||Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey()) + ||Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.doing.getKey())||Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.waitPay.getKey()))){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷"); } //濡傛灉宸叉敮浠� 鍒欓渶瑕佽繘琛岄��娆� @@ -995,17 +1405,21 @@ } //鍑忓皯鍙戝崟閲� - 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 = ifnull(publish_num,0) - 1") + .eq(Member::getId,orders.getReleaseMemberId())); if(Constants.equalsInteger(orders.getStatus(),Constants.TWO)||Constants.equalsInteger(orders.getStatus(),Constants.THREE)){ //鍑忓皯鎺ュ崟閲� - 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 = ifnull(receive_num,0) - 1") + .eq(Member::getId,orders.getAcceptMemberId())); } - + Date date = new Date(); ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getStatus,99) - .set(Orders::getUpdateTime,"now()") - .set(Orders::getCancelTime,"now()") + .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) + .set(Orders::getUpdateTime,date) + .set(Orders::getCancelTime,date) .set(Orders::getCancelType,Constants.TWO) .eq(Orders::getId,orders.getId()) ); @@ -1014,6 +1428,34 @@ 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()); + //鍙戦�佸井淇¢�氱煡 + 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); + } + } + } @@ -1032,7 +1474,7 @@ ||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - if(!Constants.equalsInteger(orders.getStatus(),Constants.FOUR)){ + if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.done.getKey())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇勪环"); } if(Constants.equalsInteger(orders.getCommentStatus(),Constants.ONE)){ @@ -1041,26 +1483,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); } - - /** @@ -1072,7 +1512,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)){ @@ -1080,9 +1520,11 @@ }else{ //澶勭悊鏀粯瀹屾垚閫昏緫 ordersMapper.update(new UpdateWrapper<Orders>().lambda() - .set(Orders::getUpdateTime,"now()") - .set(Orders::getStatus,Constants.ONE) + .set(Orders::getUpdateTime,new Date()) + .set(Orders::getStatus,Constants.ordersStatus.wait.getKey()) .set(Orders::getPayStatus,Constants.ONE) + .set(Orders::getPayTime,new Date()) + .set(Orders::getPayMethod,Constants.ZERO) .set(Orders::getWxExternalNo,paymentNo) .eq(Orders::getId,orders.getId()) ); @@ -1094,16 +1536,18 @@ } }else{ //闈炵敤椁愮被璁㈠崟 - if(!Constants.equalsInteger(orders.getStatus(),Constants.THREE)){ + if(!Constants.equalsInteger(orders.getStatus(),Constants.FIVE)){ return ("澶勭悊鎴愬姛!"); }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,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()) ); @@ -1111,12 +1555,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); @@ -1124,8 +1576,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()) ); @@ -1134,7 +1586,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 ("澶勭悊鎴愬姛!"); @@ -1147,67 +1615,100 @@ MPJLambdaWrapper<Orders> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); Orders model = pageWrap.getModel(); + if(Objects.isNull(model) + || 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 ") + .eq(Objects.nonNull(model.getType()),Orders::getType,model.getType()) + .eq(Objects.nonNull(model.getCommentStatus()),Orders::getCommentStatus,model.getCommentStatus());; + if(!(Objects.isNull(model.getQueryLat())||Objects.isNull(model.getQueryLgt()))){ + queryWrapper.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); + } 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())&&!Constants.equalsInteger(model.getStatus(),Constants.ordersStatus.waitPay.getKey()),Orders::getStatus,model.getStatus()); + queryWrapper.in(Objects.nonNull(model.getStatus())&&Constants.equalsInteger(model.getStatus(),Constants.ordersStatus.waitPay.getKey()),Orders::getStatus,model.getStatus(),Constants.ordersStatus.feeconfirm.getKey()); + 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.in(Objects.nonNull(model.getStatus())&&Constants.equalsInteger(model.getStatus(),Constants.ordersStatus.waitPay.getKey()),Orders::getStatus,model.getStatus(),Constants.ordersStatus.feeconfirm.getKey()); + queryWrapper.orderByDesc(Orders::getAcceptTime); }else{ - //鎺ュ崟澶у巺 - queryWrapper.and(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.eq(Orders::getStatus,Constants.ONE); + //鏌ヨ鐢ㄦ埛鐨勬帴鍗曟潈閲� 鎺ュ崟澶у巺 + 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.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") - ) + for (Orders orders:iPage.getRecords()) { + this.getPriceUnit(orders); + if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)||Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ONE)){ + orders.setStatusName( + Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)?Constants.ordersStatus.getName(orders.getStatus()): + Constants.ordersStatus.getInfo(orders.getStatus()) ); - 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); @@ -1218,72 +1719,83 @@ //瀹氫綅璺濈 public void getDistance(Member member,Orders orders){ + try{ + if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ + if(Objects.nonNull(member.getWorkerIdentityModel())&&Objects.nonNull(member.getWorkerIdentityModel().getLgt()) + &&Objects.nonNull(member.getWorkerIdentityModel().getLat())){ + orders.setDistance( + GeoUtils.haversineDistance( + orders.getLgt().doubleValue(),orders.getLat().doubleValue(), + member.getWorkerIdentityModel().getLgt().doubleValue(), + member.getWorkerIdentityModel().getLat().doubleValue() + ) + ); + } - if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ - if(Objects.nonNull(member.getWorkerIdentityModel())&&Objects.nonNull(member.getWorkerIdentityModel().getLgt()) - &&Objects.nonNull(member.getWorkerIdentityModel().getLat())){ - orders.setDistance( - GeoUtils.haversineDistance( - orders.getLgt().doubleValue(),orders.getLat().doubleValue(), - member.getWorkerIdentityModel().getLgt().doubleValue(), - member.getWorkerIdentityModel().getLat().doubleValue() - ) - ); + }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ + if(Objects.nonNull(member.getDriverIdentityModel())&&Objects.nonNull(member.getDriverIdentityModel().getLgt()) + &&Objects.nonNull(member.getDriverIdentityModel().getLat())) { + orders.setDistance( + GeoUtils.haversineDistance( + orders.getLgt().doubleValue(), orders.getLat().doubleValue(), + member.getDriverIdentityModel().getLgt().doubleValue(), + member.getDriverIdentityModel().getLat().doubleValue() + ) + ); + } + }else{ + if(Objects.nonNull(member.getChefIdentityModel())&&Objects.nonNull(member.getChefIdentityModel().getLgt()) + &&Objects.nonNull(member.getChefIdentityModel().getLat())) { + orders.setDistance( + GeoUtils.haversineDistance( + orders.getLgt().doubleValue(),orders.getLat().doubleValue(), + member.getChefIdentityModel().getLgt().doubleValue(), + member.getChefIdentityModel().getLat().doubleValue() + ) + ); + } } - - }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ - if(Objects.nonNull(member.getDriverIdentityModel())&&Objects.nonNull(member.getDriverIdentityModel().getLgt()) - &&Objects.nonNull(member.getDriverIdentityModel().getLat())) { - orders.setDistance( - GeoUtils.haversineDistance( - orders.getLgt().doubleValue(), orders.getLat().doubleValue(), - member.getDriverIdentityModel().getLgt().doubleValue(), - member.getDriverIdentityModel().getLat().doubleValue() - ) - ); - } - }else{ - if(Objects.nonNull(member.getChefIdentityModel())&&Objects.nonNull(member.getChefIdentityModel().getLgt()) - &&Objects.nonNull(member.getChefIdentityModel().getLat())) { - orders.setDistance( - GeoUtils.haversineDistance( - orders.getLgt().doubleValue(),orders.getLat().doubleValue(), - member.getChefIdentityModel().getLgt().doubleValue(), - member.getChefIdentityModel().getLat().doubleValue() - ) - ); - } + }catch (Exception e){ + orders.setDistance(0L); } } @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)); @@ -1295,8 +1807,68 @@ } 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)){ + String autoConfirmTime = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.AUTO_CONFIRM).getCode(); + orders.setConfirmCountdown(DateUtil.getXMinuteAfterDate(orders.getIsUpdateTime(),Integer.valueOf(autoConfirmTime)).getTime() - System.currentTimeMillis()); + if(orders.getConfirmCountdown()<=Constants.ZERO){ + orders.setConfirmCountdown(0L); + } + } + if(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.waitPay.getKey())){ + orders.setCancelCountdown(DateUtil.getXMinuteAfterDate(orders.getCreateTime(),15).getTime() - System.currentTimeMillis()); + if(orders.getCancelCountdown()<=Constants.ZERO){ + orders.setCancelCountdown(0L); + } + } + this.getPriceUnit(orders); + orders.setCanStart(Constants.ZERO); + if(orders.getStatus() <= Constants.ordersStatus.accept.getKey()){ + if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){ + if(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())&&orders.getStartDate().getTime() <= System.currentTimeMillis()){ + orders.setCanStart(Constants.ONE); + } + //鍒ゆ柇鏄惁鍙慨鏀� 宸插彇娑堟鏁� 涓� 鏃堕棿闄愬埗 + 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; } @@ -1304,19 +1876,218 @@ public synchronized String getNextCode(Integer type){ -// String prefix = "YG"; -// if(!Constants.equalsInteger(type,Constants.ZERO)){ -// prefix = (Constants.equalsInteger(type,Constants.ONE)?"YC-":"SC-"); -// } -// prefix = DateUtil.getDate(new Date(),"yyyyMMdd") +"-"; -// Integer countNum = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.ORDER_CODE, Integer.class); -// countNum = Constants.formatIntegerNum(countNum)+1; -// //鏇存柊缂撳瓨 -// RedisUtil.addObject(redisTemplate,Constants.RedisKeys.ORDER_CODE,countNum); -// String nextIndex =Integer.toString( countNum ); -// return prefix + org.apache.commons.lang3.StringUtils.leftPad(nextIndex,3,"0"); - return null; + String prefix = "YG"; + if(!Constants.equalsInteger(type,Constants.ZERO)){ + prefix = (Constants.equalsInteger(type,Constants.ONE)?"YH-":"DC-"); + } + prefix = prefix + DateUtil.getCurrDateTimeShort() +"-"; + + Integer countNum = (Integer) redisTemplate.opsForValue().get(Constants.RedisKeys.ORDER_CODE);//RedisUtil.getObject(redisTemplate, Constants.RedisKeys.ORDER_CODE, Integer.class); + countNum = Constants.formatIntegerNum(countNum)+1; + //鏇存柊缂撳瓨 + redisTemplate.opsForValue().set(Constants.RedisKeys.ORDER_CODE,countNum); + String nextIndex =Integer.toString( countNum ); + return prefix + org.apache.commons.lang3.StringUtils.leftPad(nextIndex,3,"0"); } + @Override + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) + public void refundCallback(RefundNotification refundNotification){ + WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectById(refundNotification.getOutRefundNo()); + if(Objects.isNull(withdrawalOrders)||!Constants.equalsInteger(withdrawalOrders.getStatus(),Constants.ZERO)){ + return; + } + withdrawalOrders.setWxExternalNo(refundNotification.getTransactionId()); + withdrawalOrders.setUpdateTime(new Date()); + withdrawalOrders.setDoneTime(withdrawalOrders.getUpdateTime()); + if (!"SUCCESS".equals(refundNotification.getRefundStatus().name())) { + // 濡傛灉閫�娆剧姸鎬佷笉姝g‘锛屼慨鏀归��娆惧崟鐘舵�� + withdrawalOrders.setStatus(Constants.TWO); + }else{ + withdrawalOrders.setStatus(Constants.ONE); + } + //鏇存柊閫�娆惧崟鐘舵�� + withdrawalOrdersMapper.updateById(withdrawalOrders); + } + + + /** + * 鑷姩娲惧崟 + */ + @Override + public void autoGrabOrders(){ + 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(),orders.getReleaseMemberId()); +// 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(releaseMember.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鏄� + @Override + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) + public void autoComment(){ + 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") + ); + + for (Orders orders:ordersList) { + ordersMapper.update(new UpdateWrapper<Orders>().lambda() + .set(Orders::getCommentStatus,Constants.ONE) + .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()) + ); + + memberMapper.update(new UpdateWrapper<Member>().lambda() + .setSql(" score = ( ( total_score +" + Constants.FOUR + " ) / (score_order_num + 1 ) ) ") + .setSql(" total_score = ( total_score +" + Constants.FOUR + ")") + .setSql(" score_order_num = ( score_order_num + 1 ) " ).eq(Member::getId,orders.getAcceptMemberId()) + ); + + //鏃ュ織瀛樺偍 + Constants.OrdersLog ordersLog = Constants.OrdersLog.AUTO_COMMENT; + this.saveOrderLog(orders,ordersLog, + ordersLog.getInfo(),orders.getAcceptMemberId(),null); + } + } + + + //鑷姩纭 璁㈠崟淇敼鍚庤嫢鏈鐞� 鏍规嵁閰嶇疆鑷姩澶勭悊 + @Override + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) + public void autoConfirm(){ + String autoConfirmTime = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.AUTO_CONFIRM).getCode(); + List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() + .eq(Orders::getStatus,Constants.ordersStatus.accept.getKey()) + .eq(Orders::getIsUpdate,Constants.ONE) + .apply(" DATE_ADD(IS_UPDATE_TIME, INTERVAL "+autoConfirmTime+" MINUTE) < now() ") + .last("limit 100") + ); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ordersList)){ + for (Orders orders:ordersList) { + ordersMapper.update(new UpdateWrapper<Orders>().lambda() + .set(Orders::getIsUpdate,Constants.TWO) + .set(Orders::getUpdateTime,new Date()) + .eq(Orders::getId,orders.getId()) + ); + //璁板綍鍚屾剰淇敼鐨勬棩蹇� + Constants.OrdersLog ordersLog = Constants.OrdersLog.AUTO_AGREE; + this.saveOrderLog(orders,ordersLog, + ordersLog.getInfo(),null,null); + } + } + } + + + + //鑷姩鍙栨秷 璁㈠崟鏈敮浠� + @Override + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) + public void autoCancelWaitPay(){ + List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() + .eq(Orders::getStatus,Constants.ordersStatus.waitPay) + .apply(" DATE_ADD(CREATE_TIME, INTERVAL 15 MINUTE) < now() ") + .last("limit 100") + ); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ordersList)){ + for (Orders orders:ordersList) { + ordersMapper.update(new UpdateWrapper<Orders>().lambda() + .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey()) + .set(Orders::getUpdateTime,DateUtil.getCurrDateTime()) + .set(Orders::getCancelTime,DateUtil.getCurrDateTime()) + .set(Orders::getCancelType,Constants.TWO) + .eq(Orders::getId,orders.getId()) + ); + //璁板綍鍚屾剰淇敼鐨勬棩蹇� + Constants.OrdersLog ordersLog = Constants.OrdersLog.SYSTEM_CANCEL; + this.saveOrderLog(orders,ordersLog, + ordersLog.getInfo(),orders.getAcceptMemberId(),null); + } + } + } + + + @Override + public void initializeCode(){ + //鏇存柊缂撳瓨 + redisTemplate.opsForValue().set(Constants.RedisKeys.ORDER_CODE,0); + } + + + } -- Gitblit v1.9.3