| | |
| | | import com.stylefeng.guns.modular.system.controller.util.UUIDUtil; |
| | | import com.stylefeng.guns.modular.system.dao.*; |
| | | import com.stylefeng.guns.modular.system.enums.OrderStateEnum; |
| | | import com.stylefeng.guns.modular.system.enums.PayStatusEnum; |
| | | import com.stylefeng.guns.modular.system.enums.StatusEnum; |
| | | import com.stylefeng.guns.modular.system.enums.UserTypeEnum; |
| | | import com.stylefeng.guns.modular.system.model.*; |
| | | import com.stylefeng.guns.modular.system.service.ITDriverService; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.modular.system.service.ITRegionService; |
| | | import org.apache.commons.io.FileUtils; |
| | | import org.apache.poi.hdf.extractor.TC; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.ui.Model; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.math.BigDecimal; |
| | | import java.net.URL; |
| | | import java.net.URLConnection; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.Period; |
| | | import java.time.ZoneId; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @Autowired |
| | | private TRegionMapper tRegionMapper; |
| | | @Autowired |
| | | private TRevenueMapper tRevenueMapper; |
| | | @Autowired |
| | | private ITRegionService itRegionService; |
| | | @Autowired |
| | | private HttpUtils httpUtils; |
| | | |
| | | @Autowired |
| | | private TRechargeRecordMapper tRechargeRecordMapper; |
| | | @Autowired |
| | | private TCashWithdrawalMapper tCashWithdrawalMapper; |
| | | |
| | | private Logger log = LoggerFactory.getLogger(this.getClass()); |
| | | @Override |
| | | public EntityWrapper<TDriver> getPageList(String createTime, String phone, Integer status) { |
| | | EntityWrapper<TDriver> wrapper = new EntityWrapper<>(); |
| | |
| | | // 开始,结束时间 |
| | | if(StringUtils.hasLength(createTime)){ |
| | | String[] split = createTime.split(" - "); |
| | | Date startTime = DateUtil.getDate_str4(split[0]); |
| | | Date endTime = DateUtil.getDate_str4(split[1]); |
| | | Date startTime = DateUtil.getDate_str3(split[0]+" 00:00:00"); |
| | | Date endTime = DateUtil.getDate_str3(split[1]+" 23:59:59"); |
| | | wrapper.between("createTime",startTime,endTime); |
| | | } |
| | | wrapper.orderBy(true,"approvalStatus"); |
| | |
| | | TDriverResp tDriverResp = new TDriverResp(); |
| | | BeanUtils.copyProperties(tDriver,tDriverResp); |
| | | |
| | | // 设置余额 |
| | | tDriverResp.setBalance(tDriver.getBackgroundBalance().add(tDriver.getBalance())); |
| | | if(Objects.nonNull(tDriver.getBackgroundBalance()) && Objects.nonNull(tDriver.getBalance()) && Objects.nonNull(tDriver.getCouponBalance())){ |
| | | // 设置余额 |
| | | tDriverResp.setBalance(tDriver.getBackgroundBalance().add(tDriver.getBalance()).add(tDriver.getCouponBalance())); |
| | | } |
| | | |
| | | // 所属代理商 |
| | | TAgent tAgent = tAgentMapper.selectById(tDriver.getAgentId()); |
| | |
| | | tDriverResp.setBranchName(tBranchOffice.getPrincipal()); |
| | | } |
| | | //累计订单量 |
| | | List<TOrder> cumulativeOrderCount = tOrders.stream().filter(order -> order.getDriverId().equals(tDriver.getId()) |
| | | && order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) && order.getState().equals(OrderStateEnum.FINISH.getCode())).collect(Collectors.toList()); |
| | | List<TOrder> cumulativeOrderCount = tOrders.stream().filter(order -> tDriver.getId().equals(order.getDriverId()) |
| | | && (order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) || order.getState().equals(OrderStateEnum.FINISH.getCode()))).collect(Collectors.toList()); |
| | | tDriverResp.setCumulativeOrderCount(cumulativeOrderCount.size()); |
| | | //当月订单量 |
| | | List<TOrder> monthOrderCount = tOrders.stream().filter(order -> order.getDriverId().equals(tDriver.getId()) |
| | | && order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) && order.getState().equals(OrderStateEnum.FINISH.getCode()) |
| | | List<TOrder> monthOrderCount = tOrders.stream().filter(order -> tDriver.getId().equals(order.getDriverId()) |
| | | && (order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) || order.getState().equals(OrderStateEnum.FINISH.getCode())) |
| | | && new SimpleDateFormat("yyyyMM").format(order.getCreateTime()).equals(monthDate)).collect(Collectors.toList()); |
| | | tDriverResp.setMonthOrderCount(monthOrderCount.size()); |
| | | // 拒单次数 |
| | |
| | | model.addAttribute("areaName",tDriver.getAreaName()); |
| | | model.addAttribute("integral",tDriver.getIntegral()); |
| | | model.addAttribute("score",tDriver.getScore()); |
| | | model.addAttribute("source",tDriver.getSource()); |
| | | model.addAttribute("createTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tDriver.getCreateTime())); |
| | | |
| | | // 计算驾龄 |
| | | if(Objects.nonNull(tDriver.getFirstCertificateTime())){ |
| | | ZoneId zoneId = ZoneId.systemDefault(); |
| | | LocalDate firstTime = tDriver.getFirstCertificateTime().toInstant().atZone(zoneId).toLocalDate(); |
| | | LocalDate now = tDriver.getFirstCertificateTime().toInstant().atZone(zoneId).toLocalDate(); |
| | | Period period = Period.between(firstTime, now); |
| | | model.addAttribute("drivingExperience",period.getYears()); |
| | | Period period = Period.between(LocalDate.now(), com.stylefeng.guns.modular.system.util.DateUtil.dateToLocalDate(tDriver.getFirstCertificateTime())); |
| | | model.addAttribute("drivingExperience",Math.max(Math.abs(period.getYears()), 1)); |
| | | }else { |
| | | model.addAttribute("drivingExperience",0); |
| | | } |
| | |
| | | |
| | | String monthDate = new SimpleDateFormat("yyyyMM").format(new Date()); |
| | | |
| | | if(Objects.nonNull(tDriver.getBackgroundBalance()) && Objects.nonNull(tDriver.getBalance())){ |
| | | if(Objects.nonNull(tDriver.getBackgroundBalance()) && Objects.nonNull(tDriver.getBalance()) && Objects.nonNull(tDriver.getCouponBalance())){ |
| | | // 设置余额 |
| | | tDriver.setBalance(tDriver.getBackgroundBalance().add(tDriver.getBalance())); |
| | | tDriver.setBalance(tDriver.getBackgroundBalance().add(tDriver.getBalance()).add(tDriver.getCouponBalance())); |
| | | model.addAttribute("balance",tDriver.getBalance()); |
| | | }else { |
| | | model.addAttribute("balance",BigDecimal.ZERO); |
| | |
| | | TDriver tDriver1 = tDriverMapper.selectById(tDriver.getInviterId()); |
| | | model.addAttribute("inviterName",tDriver1.getName()); |
| | | model.addAttribute("inviterPhone",tDriver1.getPhone()); |
| | | }else { |
| | | model.addAttribute("inviterName",""); |
| | | model.addAttribute("inviterPhone",""); |
| | | } |
| | | }else { |
| | | model.addAttribute("inviterName",""); |
| | | model.addAttribute("inviterPhone",""); |
| | | } |
| | | |
| | | // 查询当前用户邀请了哪些人 |
| | | List<TDriver> list = tDriverMapper.selectList(new EntityWrapper<TDriver>().eq("inviterId", tDriver.getId())); |
| | | if(!CollectionUtils.isEmpty(list)){ |
| | | List<TCashWithdrawal> tCashWithdrawals = tCashWithdrawalMapper.selectList(new EntityWrapper<TCashWithdrawal>() |
| | | .eq("type", UserTypeEnum.DRIVER.getCode()) |
| | | .eq("userDriverId", tDriver.getId()) |
| | | .eq("businessType", 11) |
| | | .eq("state", 2)); |
| | | Optional<BigDecimal> reduce = tCashWithdrawals.stream().map(TCashWithdrawal::getAmount).reduce(BigDecimal::add); |
| | | BigDecimal bigDecimal = BigDecimal.ZERO; |
| | | reduce.ifPresent(bigDecimal::add); |
| | | model.addAttribute("inviterCommission",bigDecimal.add(tDriver.getCommission())); |
| | | model.addAttribute("inviterCount",list.size()); |
| | | model.addAttribute("inviterCommission",0); |
| | | }else { |
| | | model.addAttribute("inviterCommission",0); |
| | | model.addAttribute("inviterCount",0); |
| | |
| | | |
| | | if(!CollectionUtils.isEmpty(tOrders)){ |
| | | //累计订单量 |
| | | List<TOrder> cumulativeOrderCount = tOrders.stream().filter(order -> order.getDriverId().equals(tDriver.getId()) |
| | | && order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) && order.getState().equals(OrderStateEnum.FINISH.getCode())).collect(Collectors.toList()); |
| | | List<TOrder> cumulativeOrderCount = tOrders.stream().filter(order -> tDriver.getId().equals(order.getDriverId()) |
| | | && (order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) || order.getState().equals(OrderStateEnum.FINISH.getCode()))).collect(Collectors.toList()); |
| | | model.addAttribute("cumulativeOrderCount",cumulativeOrderCount.size()); |
| | | //当月订单量 |
| | | List<TOrder> monthOrderCount = tOrders.stream().filter(order -> order.getDriverId().equals(tDriver.getId()) |
| | | && order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) && order.getState().equals(OrderStateEnum.FINISH.getCode()) |
| | | List<TOrder> monthOrderCount = tOrders.stream().filter(order -> tDriver.getId().equals(order.getDriverId()) |
| | | && (order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) || order.getState().equals(OrderStateEnum.FINISH.getCode())) |
| | | && new SimpleDateFormat("yyyyMM").format(order.getCreateTime()).equals(monthDate)).collect(Collectors.toList()); |
| | | model.addAttribute("monthOrderCount",monthOrderCount.size()); |
| | | // 拒单次数 |
| | | List<TOrderRefusal> driverRefusalList = tOrderRefusalMapper.selectList(new EntityWrapper<TOrderRefusal>().eq("driver_id", tDriver.getId())); |
| | | model.addAttribute("refusalCount",driverRefusalList.size()); |
| | | // todo 累计收入 |
| | | model.addAttribute("cumulativeIncome",0); |
| | | // 累计收入 司机提现记录加上余额减去充值金额,为累计收入 |
| | | List<TCashWithdrawal> tCashWithdrawals = tCashWithdrawalMapper.selectList(new EntityWrapper<TCashWithdrawal>() |
| | | .eq("type", UserTypeEnum.DRIVER.getCode()) |
| | | .eq("userDriverId", tDriver.getId()) |
| | | .eq("state", 2)); |
| | | BigDecimal balance = tDriver.getBalance(); |
| | | // if(!CollectionUtils.isEmpty(tCashWithdrawals)){ |
| | | // Optional<BigDecimal> reduce = tCashWithdrawals.stream().map(TCashWithdrawal::getAmount).reduce(BigDecimal::add); |
| | | // if(reduce.isPresent()){ |
| | | // balance = balance.add(reduce.get()); |
| | | // } |
| | | // } |
| | | // List<TRechargeRecord> tRechargeRecords = tRechargeRecordMapper.selectList(new EntityWrapper<TRechargeRecord>() |
| | | // .eq("type", UserTypeEnum.DRIVER.getCode()) |
| | | // .eq("userId", tDriver.getId()) |
| | | // .eq("payType", 1) |
| | | // .eq("payStatus", PayStatusEnum.FINISH.getCode())); |
| | | // if(!CollectionUtils.isEmpty(tRechargeRecords)){ |
| | | // Optional<BigDecimal> reduce = tRechargeRecords.stream().map(TRechargeRecord::getAmount).reduce(BigDecimal::add); |
| | | // if(reduce.isPresent()){ |
| | | // balance = balance.subtract(reduce.get()); |
| | | // } |
| | | // } |
| | | List<TRevenue> tRevenues = tRevenueMapper.selectList(new EntityWrapper<TRevenue>() |
| | | .eq("userType", 2) |
| | | .eq("userId", tDriver.getId())); |
| | | Optional<BigDecimal> reduce = tRevenues.stream().map(TRevenue::getAmount).reduce(BigDecimal::add); |
| | | // 减去充值金额 |
| | | if(reduce.isPresent()){ |
| | | model.addAttribute("cumulativeIncome", reduce.get()); |
| | | }else { |
| | | model.addAttribute("cumulativeIncome",0); |
| | | } |
| | | }else { |
| | | model.addAttribute("cumulativeOrderCount",0); |
| | | model.addAttribute("monthOrderCount",0); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public JSONObject ocr(String imgUrl) { |
| | | File file = new File(imgUrl); |
| | | public JSONObject ocr(File file) { |
| | | String result = httpUtils.ocr("2", file); |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | return jsonObject; |
| | | return JSONObject.parseObject(result); |
| | | } |
| | | |
| | | @Override |
| | |
| | | tDriver.setCityName(city.getName()); |
| | | tDriver.setCityCode(city.getCode()); |
| | | |
| | | TRegion area = tRegionMapper.selectById(split[2]); |
| | | if(Objects.isNull(area)){ |
| | | area = itRegionService.selectOne(new EntityWrapper<TRegion>().eq("name",split[2])); |
| | | // TRegion area = tRegionMapper.selectById(split[2]); |
| | | // if(Objects.isNull(area)){ |
| | | // area = itRegionService.selectOne(new EntityWrapper<TRegion>().eq("name",split[2])); |
| | | // } |
| | | // tDriver.setAreaName(area.getName()); |
| | | // tDriver.setAreaCode(area.getCode()); |
| | | TRegion area = null; |
| | | if(split.length>2){ |
| | | area = itRegionService.selectById(split[2]); |
| | | if(Objects.isNull(area)){ |
| | | area = itRegionService.selectOne(new EntityWrapper<TRegion>().eq("name",split[2])); |
| | | } |
| | | tDriver.setAreaName(area.getName()); |
| | | tDriver.setAreaCode(area.getCode()); |
| | | }else { |
| | | tDriver.setAreaName(city.getName()); |
| | | tDriver.setAreaCode(city.getCode()); |
| | | } |
| | | tDriver.setAreaName(area.getName()); |
| | | tDriver.setAreaCode(area.getCode()); |
| | | |
| | | // 通过省市查询代理商 |
| | | List<TAgent> tAgent = tAgentMapper.selectList(new EntityWrapper<TAgent>().eq("provinceCode", province.getCode()) |
| | | .eq("cityCode", city.getCode()) |
| | | .eq("status", 1) |
| | | .eq("status", StatusEnum.NORMAL.getCode()) |
| | | .last("LIMIT 1")); |
| | | if(!CollectionUtils.isEmpty(tAgent)){ |
| | | tDriver.setAgentId(tAgent.get(0).getId()); |
| | |
| | | return new SuccessTip(500, "该邀约人:"+tDriver.getInviterName()+"不存在"); |
| | | } |
| | | } |
| | | // 通过省市区查询分公司 |
| | | List<TBranchOffice> tBranchOffice = tBranchOfficeMapper.selectList(new EntityWrapper<TBranchOffice>().eq("provinceCode", province.getCode()) |
| | | .eq("cityCode", city.getCode()) |
| | | .eq("status", 1) |
| | | .eq("districtCode", area.getCode()) |
| | | .last("LIMIT 1")); |
| | | List<TBranchOffice> tBranchOffice; |
| | | if(split.length>2){ |
| | | // 通过省市区查询分公司 |
| | | tBranchOffice = tBranchOfficeMapper.selectList(new EntityWrapper<TBranchOffice>().eq("provinceCode", province.getCode()) |
| | | .eq("cityCode", city.getCode()) |
| | | .eq("status", StatusEnum.NORMAL.getCode()) |
| | | .eq("districtCode", area.getCode()) |
| | | .last("LIMIT 1")); |
| | | }else { |
| | | // 通过省市区查询分公司 |
| | | tBranchOffice = tBranchOfficeMapper.selectList(new EntityWrapper<TBranchOffice>().eq("provinceCode", province.getCode()) |
| | | .eq("cityCode", city.getCode()) |
| | | .eq("status", StatusEnum.NORMAL.getCode()) |
| | | .last("LIMIT 1")); |
| | | // tBranchOffice = tBranchOfficeMapper.selectList(new EntityWrapper<TBranchOffice>().eq("provinceCode", province.getCode()) |
| | | // .eq("cityCode", city.getCode()) |
| | | // .eq("status", StatusEnum.NORMAL.getCode()) |
| | | // .eq("districtCode", city.getCode()) |
| | | // .last("LIMIT 1")); |
| | | } |
| | | if(!CollectionUtils.isEmpty(tBranchOffice)){ |
| | | tDriver.setBranchOfficeId(tBranchOffice.get(0).getId()); |
| | | }else { |
| | |
| | | commissionResp.setConnectedPersons(connectedPersons.get()); |
| | | |
| | | // 已提现佣金 查询该司机的佣金提现记录 |
| | | commissionResp.setWithdrawnAmount(BigDecimal.ZERO); |
| | | |
| | | List<TCashWithdrawal> tCashWithdrawals = tCashWithdrawalMapper.selectList(new EntityWrapper<TCashWithdrawal>() |
| | | .eq("type", UserTypeEnum.DRIVER.getCode()) |
| | | .eq("userDriverId", driver.getId()) |
| | | .eq("businessType", 11) |
| | | .eq("state", 2)); |
| | | BigDecimal bigDecimal = BigDecimal.ZERO; |
| | | if(!CollectionUtils.isEmpty(tCashWithdrawals)){ |
| | | Optional<BigDecimal> reduce = tCashWithdrawals.stream().map(TCashWithdrawal::getAmount).reduce(BigDecimal::add); |
| | | if(reduce.isPresent()){ |
| | | bigDecimal.add(reduce.get()); |
| | | commissionResp.setWithdrawnAmount(bigDecimal); |
| | | } |
| | | }else { |
| | | commissionResp.setWithdrawnAmount(bigDecimal); |
| | | } |
| | | // 累计佣金 可提现佣金+已提现佣金 |
| | | commissionResp.setAccumulatedCommission(BigDecimal.ZERO); |
| | | |
| | | commissionResp.setAccumulatedCommission(bigDecimal.add(commissionResp.getCommission())); |
| | | commissionRespList.add(commissionResp); |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void driverCommissionDetail(Integer tDriverId, Model model) { |
| | | public void driverCommissionDetail(Integer tDriverId, Integer levelFlag,Model model) { |
| | | |
| | | // 查询司机 |
| | | TDriver driver = tDriverMapper.selectById(tDriverId); |
| | | |
| | | model.addAttribute("levelFlag",levelFlag); |
| | | // 司机信息封装 |
| | | model.addAttribute("driverId",tDriverId); |
| | | model.addAttribute("name",driver.getName()); |
| | |
| | | model.addAttribute("numberPromoters",0); |
| | | } |
| | | model.addAttribute("connectedPersons",connectedPersons.get()); |
| | | // 已提现佣金 查询该司机的佣金提现记录 |
| | | model.addAttribute("withdrawnAmount",BigDecimal.ZERO); |
| | | List<TCashWithdrawal> tCashWithdrawals = tCashWithdrawalMapper.selectList(new EntityWrapper<TCashWithdrawal>() |
| | | .eq("type", UserTypeEnum.DRIVER.getCode()) |
| | | .eq("userDriverId", driver.getId()) |
| | | .eq("businessType", 11) |
| | | .eq("state", 2)); |
| | | BigDecimal bigDecimal = BigDecimal.ZERO; |
| | | if(!CollectionUtils.isEmpty(tCashWithdrawals)){ |
| | | Optional<BigDecimal> reduce = tCashWithdrawals.stream().map(TCashWithdrawal::getAmount).reduce(BigDecimal::add); |
| | | if(reduce.isPresent()){ |
| | | bigDecimal.add(reduce.get()); |
| | | // 已提现佣金 查询该司机的佣金提现记录 |
| | | model.addAttribute("withdrawnAmount",bigDecimal); |
| | | } |
| | | }else { |
| | | // 已提现佣金 查询该司机的佣金提现记录 |
| | | model.addAttribute("withdrawnAmount",bigDecimal); |
| | | } |
| | | // commissionResp.setWithdrawnAmount(BigDecimal.ZERO); |
| | | // 累计佣金 可提现佣金+已提现佣金 |
| | | model.addAttribute("accumulatedCommission",BigDecimal.ZERO); |
| | | model.addAttribute("accumulatedCommission",bigDecimal.add(driver.getCommission())); |
| | | // commissionResp.setAccumulatedCommission(BigDecimal.ZERO); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void getDataStatistics(Integer agentId, Model model,Map<String, Object> map) { |
| | | // 司机总数 |
| | | Integer driverTotal = tDriverMapper.selectCount(new EntityWrapper<TDriver>() |
| | | .eq("agentId", agentId)); |
| | | // 司机最近一月数量 |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | LocalDateTime localDateTime = now.minusMonths(1); |
| | | Integer driverMonthTotal = tDriverMapper.selectCount(new EntityWrapper<TDriver>() |
| | | .eq("agentId", agentId) |
| | | .between("createTime", localDateTime, now)); |
| | | model.addAttribute("driverTotal",driverTotal); |
| | | model.addAttribute("driverMonthTotal",driverMonthTotal); |
| | | map.put("driverTotal",driverTotal); |
| | | map.put("driverMonthTotal",driverMonthTotal); |
| | | } |
| | | |
| | | @Override |
| | | public void getDataStatisticsByIds(List<Integer> ids, Model model, Map<String, Object> map) { |
| | | // 司机总数 |
| | | Integer driverTotal = tDriverMapper.selectCount(new EntityWrapper<TDriver>() |
| | | .in("agentId", ids)); |
| | | // 司机最近一月数量 |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | LocalDateTime localDate = now.minusMonths(1); |
| | | Integer driverMonthTotal = tDriverMapper.selectCount(new EntityWrapper<TDriver>() |
| | | .in("agentId", ids) |
| | | .between("createTime", localDate, now)); |
| | | model.addAttribute("driverTotal",driverTotal); |
| | | model.addAttribute("driverMonthTotal",driverMonthTotal); |
| | | map.put("driverTotal",driverTotal); |
| | | map.put("driverMonthTotal",driverMonthTotal); |
| | | } |
| | | } |