| | |
| | | package com.stylefeng.guns.modular.smallLogistics.server.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.core.util.DateUtil; |
| | | import com.stylefeng.guns.core.util.ToolUtil; |
| | | import com.stylefeng.guns.modular.smallLogistics.dao.OrderLogisticsMapper; |
| | | import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics; |
| | |
| | | import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; |
| | | import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsSpreadService; |
| | | import com.stylefeng.guns.modular.system.dao.RegionMapper; |
| | | import com.stylefeng.guns.modular.system.dao.UserInfoMapper; |
| | | import com.stylefeng.guns.modular.system.model.*; |
| | | import com.stylefeng.guns.modular.system.service.*; |
| | | import com.stylefeng.guns.modular.system.model.Company; |
| | | import com.stylefeng.guns.modular.system.model.Driver; |
| | | import com.stylefeng.guns.modular.system.model.Income; |
| | | import com.stylefeng.guns.modular.system.model.Region; |
| | | import com.stylefeng.guns.modular.system.service.ICompanyService; |
| | | import com.stylefeng.guns.modular.system.service.IDriverService; |
| | | import com.stylefeng.guns.modular.system.service.IIncomeService; |
| | | import com.stylefeng.guns.modular.system.service.ISystemNoticeService; |
| | | import com.stylefeng.guns.modular.system.util.*; |
| | | import com.stylefeng.guns.modular.system.warpper.MerchantCouponListWarpper; |
| | | import com.stylefeng.guns.modular.taxi.model.OrderTaxi; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | | @Service |
| | |
| | | |
| | | @Autowired |
| | | private ALiSendSms aLiSendSms; |
| | | |
| | | @Resource |
| | | private UserInfoMapper userInfoMapper; |
| | | |
| | | @Autowired |
| | | private IMerchantActivityService merchantActivityService; |
| | | |
| | | @Autowired |
| | | private IMerchantActivitySlaveService merchantActivitySlaveService; |
| | | |
| | | @Autowired |
| | | private IUserMerchantCouponService userMerchantCouponService; |
| | | |
| | | @Autowired |
| | | private IMerchantCouponService merchantCouponService; |
| | | |
| | | @Autowired |
| | | private IAgreementService agreementService; |
| | | |
| | | |
| | | |
| | |
| | | orderLogistics.setTrackId(track); |
| | | |
| | | //调用移动的小号接口 |
| | | Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderLogistics.getRecipientPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); |
| | | Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); |
| | | Region region = regionMapper.query(geocode.get("districtCode")); |
| | | Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderLogistics.getRecipientPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1))); |
| | | if(String.valueOf(map.get("code")).equals("200")){ |
| | | orderLogistics.setTelX(map.get("telX")); |
| | | orderLogistics.setBindId(map.get("bindId")); |
| | |
| | | } |
| | | incomeService.saveData(1, orderLogistics.getCompanyId(), 2, orderLogistics.getId(), orderLogistics.getType(), d.doubleValue()); |
| | | incomeService.saveData(2, orderLogistics.getDriverId(), 2, orderLogistics.getId(), orderLogistics.getType(), c.doubleValue()); |
| | | /*driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driverService.updateById(driver);*/ |
| | | driverService.updateById(driver); |
| | | |
| | | |
| | | |
| | |
| | | } |
| | | }).start(); |
| | | |
| | | systemNoticeService.addSystemNotice(2, "您已成功抢得小件物流订单,请及时联系客户!", orderLogistics.getDriverId(), 1); |
| | | systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderLogistics.getUserId(), 1); |
| | | systemNoticeService.addSystemNotice(2, "您已成功抢得小件物流订单,请及时联系客户!", orderLogistics.getDriverId()); |
| | | systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderLogistics.getUserId()); |
| | | |
| | | |
| | | if (this.selectList(new EntityWrapper<OrderLogistics>().eq("driverId",uid)).size() == 1){ |
| | | return ResultUtil.success(agreementService.selectOne(new EntityWrapper<Agreement>().eq("type",17))); |
| | | } |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public ResultUtil process(Integer orderId, Integer state, Double lon, Double lat, String address, String driverImg) throws Exception { |
| | | public ResultUtil process(Integer orderId, Integer state, Double lon, Double lat, String address) throws Exception { |
| | | OrderLogistics orderLogistics = this.selectById(orderId); |
| | | UserInfo userInfo = userInfoMapper.selectById(orderLogistics.getUserId()); |
| | | switch (state){ |
| | | case 3://出发前往预约点 |
| | | orderLogistics.setState(3); |
| | | orderLogistics.setSetOutTime(new Date()); |
| | | systemNoticeService.addSystemNotice(1, "司机已出发,请耐心等待", orderLogistics.getUserId(), 1); |
| | | systemNoticeService.addSystemNotice(1, "司机已出发,请耐心等待", orderLogistics.getUserId()); |
| | | break; |
| | | case 4://到达预约点,等待客户上车 |
| | | orderLogistics.setState(4); |
| | | orderLogistics.setArriveTime(new Date()); |
| | | systemNoticeService.addSystemNotice(1, "司机已到达您设置的预约地点。", orderLogistics.getUserId(), 1); |
| | | systemNoticeService.addSystemNotice(1, "司机已到达您设置的预约地点。", orderLogistics.getUserId()); |
| | | break; |
| | | case 5://开始服务 |
| | | orderLogistics.setBoardingLon(lon); |
| | |
| | | pushUtil.pushDriverPosition(orderLogistics.getId(), orderLogistics.getType());//主动推送司机定位 |
| | | break; |
| | | case 6://结束服务(专车可以返回继续服务)不修改状态 |
| | | if(orderLogistics.getState()!=6){ |
| | | orderLogistics.setGetoffLon(lon); |
| | | orderLogistics.setGetoffLat(lat); |
| | | orderLogistics.setGetoffAddress(address); |
| | | orderLogistics.setGetoffTime(new Date()); |
| | | orderLogistics.setEndServiceTime(new Date()); |
| | | orderLogistics.setState(6); |
| | | orderLogistics.setDriverImg(driverImg); |
| | | orderLogistics.setGetoffLon(lon); |
| | | orderLogistics.setGetoffLat(lat); |
| | | orderLogistics.setGetoffAddress(address); |
| | | orderLogistics.setGetoffTime(new Date()); |
| | | orderLogistics.setEndServiceTime(new Date()); |
| | | orderLogistics.setState(6); |
| | | |
| | | //添加已收入明细 |
| | | // TODO: 2022/3/19 抽成按照订单金额计算,优先保证司机的收入,用户支付金额不够,则在平台收入中补贴司机收入 |
| | | //例如:订单金额10元,优惠3元,司机收入比例80%,平台收入比例20%。 |
| | | //司机收入:10 * 0.8 = 8 |
| | | //平台收入:7 - 8 = -1 |
| | | Company company = companyService.selectById(orderLogistics.getCompanyId()); |
| | | Double speMoney = orderLogistics.getType() == 4 ? company.getSameLogisticsMoney() : company.getCrossLogisticsMoney(); |
| | | Double orderMoney = orderLogistics.getOrderMoney(); |
| | | BigDecimal d = null; |
| | | BigDecimal c = null; |
| | | if(company.getIsSpeFixedOrProportional() == 2){//固定 |
| | | d = new BigDecimal(speMoney.compareTo(orderMoney) > 0 ? orderMoney : speMoney); |
| | | c = new BigDecimal(orderMoney).subtract(d); |
| | | } |
| | | if(company.getIsSpeFixedOrProportional() == 1){//比例 |
| | | c = new BigDecimal(orderMoney).multiply(new BigDecimal(1 - (speMoney / 100))).setScale(2, BigDecimal.ROUND_HALF_EVEN); |
| | | d = new BigDecimal(orderLogistics.getPayMoney()).subtract(c).setScale(2, BigDecimal.ROUND_HALF_EVEN); |
| | | } |
| | | |
| | | Income income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 1).eq("objectId", orderLogistics.getCompanyId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType())); |
| | | income.setMoney(d.doubleValue()); |
| | | incomeService.updateById(income); |
| | | income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", orderLogistics.getDriverId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType())); |
| | | income.setMoney(c.doubleValue()); |
| | | incomeService.updateById(income); |
| | | Driver driver = driverService.selectById(orderLogistics.getDriverId()); |
| | | driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driverService.updateById(driver); |
| | | |
| | | |
| | | //记录添加用户商家优惠券 |
| | | //订单数要加1,因为这里是后修改订单状态 |
| | | List<OrderLogistics> list = this.selectList(new EntityWrapper<OrderLogistics>().eq("userId", userInfo.getId()).eq("type", orderLogistics.getType()).eq("state", 9).eq("isDelete", 1)); |
| | | List<MerchantActivity> merchantActivities = merchantActivityService.selectList(new EntityWrapper<MerchantActivity>().eq("companyId", orderLogistics.getCompanyId()).eq("activityType", 1).eq("auditStatus", 2).eq("status", 1) |
| | | .eq("state", 1).like("orderType", "%" + orderLogistics.getType() + "%").where("((orderAmountFull is not null and orderAmountFull <= " + orderLogistics.getOrderMoney() + ") or (orderNumber is not null and orderNumber <= " + (list.size() + 1) + "))") |
| | | .in("id", merchantActivitySlaveService.selectList(new EntityWrapper<MerchantActivitySlave>().gt("laveNumber", 0)).stream().map(MerchantActivitySlave::getMerchantActivityId).collect(Collectors.toList())) |
| | | .notIn("id", userMerchantCouponService.selectList(new EntityWrapper<UserMerchantCoupon>().eq("userType", 1).eq("userId", userInfo.getId()).eq("state", 1)).stream().map(UserMerchantCoupon::getMerchantActivityId).collect(Collectors.toList())) |
| | | ); |
| | | List<MerchantCouponListWarpper> listWarppers = new ArrayList<>(); |
| | | if(merchantActivities.size() > 0){ |
| | | for(MerchantActivity merchantActivity :merchantActivities){ |
| | | List<MerchantActivitySlave> merchantActivitySlaves = merchantActivitySlaveService.selectList(new EntityWrapper<MerchantActivitySlave>().eq("merchantActivityId", merchantActivity.getId()).gt("laveNumber", 0)); |
| | | |
| | | for(MerchantActivitySlave merchantActivitySlave : merchantActivitySlaves){ |
| | | UserMerchantCoupon userMerchantCoupon = new UserMerchantCoupon(); |
| | | try { |
| | | userMerchantCoupon.setCode(UUIDUtil.getRandomCode(16)); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | userMerchantCoupon.setUserType(1); |
| | | userMerchantCoupon.setUserId(userInfo.getId()); |
| | | userMerchantCoupon.setMerchantActivityId(merchantActivity.getId()); |
| | | userMerchantCoupon.setMerchantCouponId(merchantActivitySlave.getMerchantCouponId()); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(new Date()); |
| | | calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + merchantActivity.getEffectiveDays()); |
| | | userMerchantCoupon.setEndTime(calendar.getTime()); |
| | | userMerchantCoupon.setStatus(1); |
| | | userMerchantCoupon.setState(1); |
| | | userMerchantCoupon.setCreateTime(new Date()); |
| | | userMerchantCouponService.insert(userMerchantCoupon); |
| | | |
| | | MerchantCoupon merchantCoupon = merchantCouponService.selectById(merchantActivitySlave.getMerchantCouponId()); |
| | | MerchantCouponListWarpper merchantCouponListWarpper = new MerchantCouponListWarpper(); |
| | | merchantCouponListWarpper.setId(merchantActivitySlave.getMerchantCouponId()); |
| | | merchantCouponListWarpper.setName(merchantCoupon.getName()); |
| | | merchantCouponListWarpper.setType(merchantCoupon.getType()); |
| | | merchantCouponListWarpper.setFullAmount(merchantCoupon.getFullAmount()); |
| | | merchantCouponListWarpper.setDiscount(merchantCoupon.getDiscount()); |
| | | listWarppers.add(merchantCouponListWarpper); |
| | | |
| | | merchantActivitySlave.setLaveNumber(merchantActivitySlave.getLaveNumber() - 1); |
| | | if(merchantActivitySlave.getLaveNumber() == 0){ |
| | | merchantActivity.setStatus(2); |
| | | } |
| | | } |
| | | if(merchantActivitySlaves.size() > 0){ |
| | | merchantActivitySlaveService.updateBatchById(merchantActivitySlaves); |
| | | } |
| | | } |
| | | merchantActivityService.updateBatchById(merchantActivities); |
| | | } |
| | | String value = redisUtil.getValue("merchantVoucher"); |
| | | JSONObject jsonObject = JSON.parseObject(value); |
| | | if(null == jsonObject){ |
| | | jsonObject = new JSONObject(); |
| | | } |
| | | jsonObject.put(userInfo.getPhone(), listWarppers); |
| | | redisUtil.setStrValue("merchantVoucher", jsonObject.toJSONString()); |
| | | Double orderMoney = orderLogistics.getOrderMoney(); |
| | | //添加已收入明细 |
| | | Company company = companyService.selectById(orderLogistics.getCompanyId()); |
| | | Double speMoney = orderLogistics.getType() == 4 ? company.getSameLogisticsMoney() : company.getCrossLogisticsMoney(); |
| | | BigDecimal d = null; |
| | | BigDecimal c = null; |
| | | if(company.getIsSpeFixedOrProportional() == 2){//固定 |
| | | d = new BigDecimal(speMoney); |
| | | c = new BigDecimal(orderMoney).subtract(d); |
| | | } |
| | | if(company.getIsSpeFixedOrProportional() == 1){//比例 |
| | | d = new BigDecimal(orderMoney).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN); |
| | | c = new BigDecimal(orderMoney).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); |
| | | } |
| | | |
| | | Income income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 1).eq("objectId", orderLogistics.getCompanyId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType())); |
| | | income.setMoney(income.getMoney() + d.doubleValue()); |
| | | incomeService.updateById(income); |
| | | income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", orderLogistics.getDriverId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType())); |
| | | income.setMoney(income.getMoney() + c.doubleValue()); |
| | | incomeService.updateById(income); |
| | | Driver driver = driverService.selectById(orderLogistics.getDriverId()); |
| | | driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driverService.updateById(driver); |
| | | |
| | | break; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | @Autowired |
| | | private ISysWithdrawalPoundageService sysWithdrawalPoundageService; |
| | | |
| | | @Autowired |
| | | private ISysTimeoutMoneyService sysTimeoutMoneyService; |
| | | |
| | | /** |
| | | * 验证取件码(小件物流) |
| | | * @param orderId |
| | |
| | | return ResultUtil.error("验证失败"); |
| | | } |
| | | orderLogistics.setState(9); |
| | | orderLogistics.setEndServiceTime(DateUtil.parseTime(DateUtil.getTime())); |
| | | |
| | | /// 超时,扣款订单的%费用 |
| | | SysTimeoutMoney sysTimeoutMoney = sysTimeoutMoneyService.selectOne(null); |
| | | if(orderLogistics.getArriveTimeExpect()!=null){ |
| | | if (new Date().getTime() > (orderLogistics.getArriveTimeExpect().getTime() + sysTimeoutMoney.getTimeOut())){ |
| | | double timeOutMoney = sysTimeoutMoney.getDeductMoney()*orderLogistics.getOrderMoney()/100; |
| | | orderLogistics.setTimeOutMoney(timeOutMoney); |
| | | |
| | | /// 超时扣款扣除司机余额和剩余业务金额 |
| | | Driver driver = driverService.selectById(orderLogistics.getDriverId()); |
| | | driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - timeOutMoney); |
| | | driver.setBalance(driver.getBalance() - timeOutMoney); |
| | | driverService.updateById(driver); |
| | | |
| | | |
| | | /// 存入平台收入 |
| | | Income income = new Income(); |
| | | income.setIncomeId(orderId); |
| | | income.setOrderType(orderLogistics.getType()); |
| | | income.setInsertTime(new Date()); |
| | | income.setMoney(timeOutMoney); |
| | | income.setUserType(1); |
| | | income.setType(7); |
| | | income.setObjectId(orderLogistics.getCompanyId()); |
| | | incomeService.insert(income); |
| | | } |
| | | } |
| | | |
| | | this.updateById(orderLogistics); |
| | | |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | |
| | | } |
| | | }).start(); |
| | | |
| | | systemNoticeService.addSystemNotice(2, "您已成功抢得出租车订单,请及时联系客户!", orderLogistics.getDriverId(), 1); |
| | | systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderLogistics.getUserId(), 1); |
| | | systemNoticeService.addSystemNotice(2, "您已成功抢得出租车订单,请及时联系客户!", orderLogistics.getDriverId()); |
| | | systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderLogistics.getUserId()); |
| | | |
| | | return ResultUtil.success(); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public void sendVerificationCode(Integer orderId) throws Exception { |
| | | // OrderLogistics orderLogistics = this.selectById(orderId); |
| | | // String random = ""; |
| | | // for(int i = 0; i < 6; i++){ |
| | | // random += Double.valueOf(Math.random() * 10).intValue(); |
| | | // } |
| | | // orderLogistics.setPickUpCode(random); |
| | | // this.updateById(orderLogistics); |
| | | OrderLogistics orderLogistics = this.selectById(orderId); |
| | | String random = ""; |
| | | for(int i = 0; i < 6; i++){ |
| | | random += Double.valueOf(Math.random() * 10).intValue(); |
| | | } |
| | | orderLogistics.setPickUpCode(random); |
| | | this.updateById(orderLogistics); |
| | | //发送短信 |
| | | // aLiSendSms.sendSms(orderLogistics.getRecipientPhone(), "SMS_229715276", "{\"code\":\"" + random + "\"}"); |
| | | aLiSendSms.sendSms(orderLogistics.getRecipientPhone(), "SMS_206737941", "{\"code\":\"" + random + "\"}"); |
| | | } |
| | | |
| | | @Override |
| | | public List<OrderLogistics> queryMaturity() throws Exception { |
| | | return orderLogisticsMapper.queryMaturity(); |
| | | } |
| | | |
| | | @Override |
| | | public List<OrderLogistics> taskMidAxbUnBindSend() throws Exception { |
| | | return this.baseMapper.taskMidAxbUnBindSend(); |
| | | } |
| | | } |