diff --git a/src/main/java/com/bonus/gzcar/business/backstage/controller/HomeIndexController.java b/src/main/java/com/bonus/gzcar/business/backstage/controller/HomeIndexController.java new file mode 100644 index 0000000..2063d26 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/controller/HomeIndexController.java @@ -0,0 +1,96 @@ +package com.bonus.gzcar.business.backstage.controller; + +/** + * @className:HomeIndexController + * @author:cwchen + * @date:2025-01-15-16:22 + * @version:1.0 + * @description:首页 + */ + +import com.bonus.gzcar.business.backstage.entity.BackParamsDto; +import com.bonus.gzcar.business.backstage.entity.HomeProDetailVo; +import com.bonus.gzcar.business.backstage.service.HomeIndexService; +import com.bonus.gzcar.manager.annotation.DecryptAndVerify; +import com.bonus.gzcar.manager.core.entity.EncryptedReq; +import com.bonus.gzcar.manager.webResult.ServerResponse; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "首页") +@RestController +@RequestMapping("/backstage/homeIndex/") +@Slf4j +public class HomeIndexController { + + @Resource(name = "HomeIndexService") + private HomeIndexService service; + + @ApiOperation(value = "首页-数据预览") + @PostMapping("getDataPreviewData") + @DecryptAndVerify(decryptedClass = BackParamsDto.class) + public ServerResponse getDataPreviewData(EncryptedReq dto) { + return service.getDataPreviewData(dto.getData()); + } + + @ApiOperation(value = "首页-用车数量") + @PostMapping("getVehiclesUsedNum") + @DecryptAndVerify(decryptedClass = BackParamsDto.class) + public ServerResponse getVehiclesUsedNum(EncryptedReq dto) { + return service.getVehiclesUsedNum(dto.getData()); + } + + @ApiOperation(value = "首页-工程排名") + @PostMapping("getProRanking") + @DecryptAndVerify(decryptedClass = BackParamsDto.class) + public ServerResponse getProRanking(EncryptedReq dto) { + return service.getProRanking(dto.getData()); + } + + @ApiOperation(value = "首页-供应商统计") + @PostMapping("getSupStatistics") + @DecryptAndVerify(decryptedClass = BackParamsDto.class) + public ServerResponse getSupStatistics(EncryptedReq dto) { + return service.getSupStatistics(dto.getData()); + } + + @ApiOperation(value = "首页-租赁金额(运输车辆)") + @PostMapping("getLeaseMoneyByCar") + @DecryptAndVerify(decryptedClass = BackParamsDto.class) + public ServerResponse getLeaseMoneyByCar(EncryptedReq dto) { + return service.getLeaseMoneyByCar(dto.getData()); + } + + @ApiOperation(value = "首页-租赁金额(吊车)") + @PostMapping("getLeaseMoneyByCrane") + @DecryptAndVerify(decryptedClass = BackParamsDto.class) + public ServerResponse getLeaseMoneyByCrane(EncryptedReq dto) { + return service.getLeaseMoneyByCrane(dto.getData()); + } + + @ApiOperation(value = "首页-二级页面-分公司数据") + @PostMapping("getCompanyData") + @DecryptAndVerify(decryptedClass = BackParamsDto.class) + public ServerResponse getCompanyData(EncryptedReq dto) { + return service.getCompanyData(dto.getData()); + } + + @ApiOperation(value = "首页-二级页面-工程详情") + @GetMapping("getProDetails") + @DecryptAndVerify(decryptedClass = BackParamsDto.class) + public PageInfo getProDetails(EncryptedReq dto) { + PageHelper.startPage(dto.getPageNum(),dto.getPageSize()); + List list = service.getProDetails(dto.getData());; + return new PageInfo<>(list); + } +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/entity/BackParamsDto.java b/src/main/java/com/bonus/gzcar/business/backstage/entity/BackParamsDto.java new file mode 100644 index 0000000..e63c3ec --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/entity/BackParamsDto.java @@ -0,0 +1,44 @@ +package com.bonus.gzcar.business.backstage.entity; + +import lombok.Data; + +/** + * @className:BackParamsDto + * @author:cwchen + * @date:2024-12-17-10:52 + * @version:1.0 + * @description:web-接受参数 + */ +@Data +public class BackParamsDto { + + /**分公司*/ + private String companyId; + /**派车状态 1.已派车 2.待派车*/ + private String dispatchStatus; + /**年份*/ + private String year; + /**月份*/ + private String month; + /**年月*/ + private String yearMonth; + /**付款状态 1.已付款 2.未付款*/ + private String payStatus; + /**类型 1.车辆 2.吊车*/ + private String type; + /**工程名称*/ + private String proName; + /**计划编号*/ + private String code; + /**供应商名称*/ + private String supName; + /**名称*/ + private String name; + /**规格*/ + private String model; + /**开始日期*/ + private String startTime; + /**结束日期*/ + private String endTime; + +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeDataPreviewVo.java b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeDataPreviewVo.java new file mode 100644 index 0000000..677b864 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeDataPreviewVo.java @@ -0,0 +1,45 @@ +package com.bonus.gzcar.business.backstage.entity; + +import lombok.Data; + +/** + * @className:HomeDataPreviewVo + * @author:cwchen + * @date:2025-01-15-18:36 + * @version:1.0 + * @description:首页-数据预览-vo + */ +@Data +public class HomeDataPreviewVo { + + /**工程数量*/ + private int proNum; + /**工程数量-今日领用工程数量*/ + private int lyProNum; + + /**需求计划数*/ + private int planNum; + /**需求计划数-今日新增*/ + private int addPlanNum; + + /**运输车量*/ + private int carNum; + /**运输车量-待派车量*/ + private int noDispatchCarNum; + + /**吊车量*/ + private int craneNum; + /**吊车量-待派车量*/ + private int noDispatchCraneNum; + + /**已付款金额*/ + private double payMoney; + /**已付款金额-需求计划*/ + private int payPlanNum; + + /**预估金额*/ + private double estimateMoney; + /**已付款金额-需求计划*/ + private int estimatePlanNum; + +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeLeaseMoneyVo.java b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeLeaseMoneyVo.java new file mode 100644 index 0000000..8ce50e2 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeLeaseMoneyVo.java @@ -0,0 +1,21 @@ +package com.bonus.gzcar.business.backstage.entity; + +import lombok.Data; + +/** + * @className:HomeLeaseMoneyVo + * @author:cwchen + * @date:2025-01-16-15:44 + * @version:1.0 + * @description:首页-租赁金额 + */ +@Data +public class HomeLeaseMoneyVo { + + /**合同金额*/ + private double contractMoney; + /**付款金额*/ + private double payMoney; + /**付款金额/合同金额 比率*/ + private double progress; +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeProDetailVo.java b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeProDetailVo.java new file mode 100644 index 0000000..0d58ece --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeProDetailVo.java @@ -0,0 +1,39 @@ +package com.bonus.gzcar.business.backstage.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +/** + * @className:HomeProDetailVo + * @author:cwchen + * @date:2025-01-16-16:34 + * @version:1.0 + * @description:首页-工程详情-vo + */ +@Data +public class HomeProDetailVo { + + /**工程ID*/ + private String proId; + /**工程名称*/ + @Excel(name = "序号", width = 10.0, orderNum = "0") + private String proName; + /**计划数*/ + private int planNum; + /**已派车计划*/ + private int dispatchPlanNum; + /**待派车计划*/ + private int noDispatchPlanNum; + /**派车状态*/ + private String dispatchStatus; + /**应派车数量*/ + private int shouldDispatchNum; + /**已派车数量*/ + private int dispatchNum; + /**待派车数量*/ + private int noDispatchNum; + /**已派车金额*/ + private double money; + /**所属分公司*/ + private String companyName; +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeProRankingVo.java b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeProRankingVo.java new file mode 100644 index 0000000..85c40e7 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeProRankingVo.java @@ -0,0 +1,24 @@ +package com.bonus.gzcar.business.backstage.entity; + +import lombok.Data; + +/** + * @className:HomeProRankingVo + * @author:cwchen + * @date:2025-01-16-14:19 + * @version:1.0 + * @description:工程排名-vo + */ +@Data +public class HomeProRankingVo { + /**工程id*/ + private String proId; + /**工程名称*/ + private String proName; + /**申请量*/ + private int applyNum; + /**派车量*/ + private int dispatchNum; + /**待派量*/ + private int noDispatchNum; +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeSupStatisticsVo.java b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeSupStatisticsVo.java new file mode 100644 index 0000000..209d583 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/entity/HomeSupStatisticsVo.java @@ -0,0 +1,33 @@ +package com.bonus.gzcar.business.backstage.entity; + +import lombok.Data; + +/** + * @className:HomeSupStatisticsVo + * @author:cwchen + * @date:2025-01-16-14:48 + * @version:1.0 + * @description:首页-供应商统计 + */ +@Data +public class HomeSupStatisticsVo { + + /**合同ID*/ + private Long id; + /**合同类型 1.车辆 2.吊车*/ + private int type; + /**供应商名称*/ + private String supName; + /**供应商合同占比*/ + private double contractRatio; + /**供应商合同金额*/ + private double contractMoney; + /**已租赁数量*/ + private int leaseNum; + /**已租赁金额*/ + private double leaseMoney; + /**租赁进度*/ + private double leaseProgress; + /**最新派车时间*/ + private String dispatchTime; +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/mapper/HomeIndexMapper.java b/src/main/java/com/bonus/gzcar/business/backstage/mapper/HomeIndexMapper.java new file mode 100644 index 0000000..8b5afb5 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/mapper/HomeIndexMapper.java @@ -0,0 +1,102 @@ +package com.bonus.gzcar.business.backstage.mapper; + +import com.bonus.gzcar.business.backstage.entity.BackParamsDto; +import com.bonus.gzcar.business.backstage.entity.HomeProRankingVo; +import com.bonus.gzcar.business.backstage.entity.HomeSupStatisticsVo; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * @className:HomeIndexMapper + * @author:cwchen + * @date:2025-01-15-16:24 + * @version:1.0 + * @description:首页 + */ +@Repository(value = "HomeIndexMapper") +public interface HomeIndexMapper { + /** + * 数据预览-工程数量 + * + * @param dto + * @return Integer + * @author cwchen + * @date 2025/1/16 9:27 + */ + List getProNum(BackParamsDto dto); + + /** + * 数据预览-需求计划数 + * + * @param dto + * @return Integer + * @author cwchen + * @date 2025/1/16 9:27 + */ + List getNeedNum(BackParamsDto dto); + + /** + * 数据预览-运输车量 + * + * @param dto + * @param type + * @return Integer + * @author cwchen + * @date 2025/1/16 9:27 + */ + List> getCarNumList(@Param("params") BackParamsDto dto, @Param("type") String type); + + /** + * 首页-用车数量 + * + * @param dto + * @param yearMonth + * @return Integer + * @author cwchen + * @date 2025/1/16 13:34 + */ + List getVehiclesUsedNum(@Param("params") BackParamsDto dto, @Param("yearMonth") String yearMonth, @Param("type") String type); + + /** + * 首页-工程排名 + * + * @param dto + * @return List + * @author cwchen + * @date 2025/1/16 14:24 + */ + List getProRanking(BackParamsDto dto); + + /** + * 首页-供应商统计 + * + * @param data + * @return List + * @author cwchen + * @date 2025/1/16 14:53 + */ + List getSupStatistics(BackParamsDto data); + + /** + * 首页-租赁金额(运输车辆)、吊车 + * + * @param dto + * @param type + * @return HomeLeaseMoneyVo + * @author cwchen + * @date 2025/1/16 15:49 + */ + List getLeaseMoney(@Param("params") BackParamsDto dto, @Param("type") int type); + + /** + * 首页-二级页面-分公司数据 + * @param dto + * @return List> + * @author cwchen + * @date 2025/1/16 16:41 + */ + List> getCompanyData(BackParamsDto dto); +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/service/HomeIndexService.java b/src/main/java/com/bonus/gzcar/business/backstage/service/HomeIndexService.java new file mode 100644 index 0000000..a3f7f25 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/service/HomeIndexService.java @@ -0,0 +1,91 @@ +package com.bonus.gzcar.business.backstage.service; + +import com.bonus.gzcar.business.backstage.entity.BackParamsDto; +import com.bonus.gzcar.business.backstage.entity.HomeProDetailVo; +import com.bonus.gzcar.manager.webResult.ServerResponse; + +import java.util.List; + +/** + * @className:HomeIndexService + * @author:cwchen + * @date:2025-01-15-16:22 + * @version:1.0 + * @description:首页 + */ +public interface HomeIndexService { + /** + * 首页-数据预览 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/1/15 18:34 + */ + ServerResponse getDataPreviewData(BackParamsDto data); + + /** + * 首页-用车数量 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/1/16 13:09 + */ + ServerResponse getVehiclesUsedNum(BackParamsDto data); + + /** + * 首页-工程排名 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/1/16 14:18 + */ + ServerResponse getProRanking(BackParamsDto data); + + /** + * 首页-供应商统计 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/1/16 14:47 + */ + ServerResponse getSupStatistics(BackParamsDto data); + + /** + *首页-租赁金额(运输车辆) + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/1/16 15:43 + */ + ServerResponse getLeaseMoneyByCar(BackParamsDto data); + + /** + *首页-租赁金额(吊车) + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/1/16 15:43 + */ + ServerResponse getLeaseMoneyByCrane(BackParamsDto data); + + + /** + * 首页-二级页面-分公司数据 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/1/16 16:39 + */ + ServerResponse getCompanyData(BackParamsDto data); + + /** + * 首页-二级页面-工程详情 + * @param data + * @return List + * @author cwchen + * @date 2025/1/16 16:37 + */ + List getProDetails(BackParamsDto data); + + +} diff --git a/src/main/java/com/bonus/gzcar/business/backstage/service/HomeIndexServiceImpl.java b/src/main/java/com/bonus/gzcar/business/backstage/service/HomeIndexServiceImpl.java new file mode 100644 index 0000000..3f0ae26 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/business/backstage/service/HomeIndexServiceImpl.java @@ -0,0 +1,348 @@ +package com.bonus.gzcar.business.backstage.service; + +import com.bonus.gzcar.business.backstage.entity.*; +import com.bonus.gzcar.business.backstage.mapper.HomeIndexMapper; +import com.bonus.gzcar.manager.common.util.DateTimeHelper; +import com.bonus.gzcar.manager.webResult.ServerResponse; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.Future; +import java.util.stream.Collectors; + +/** + * @className:HomeIndexServiceImpl + * @author:cwchen + * @date:2025-01-15-16:23 + * @version:1.0 + * @description:首页 + */ +@Service(value = "HomeIndexService") +@Slf4j +public class HomeIndexServiceImpl implements HomeIndexService { + + @Resource(name = "HomeIndexMapper") + private HomeIndexMapper mapper; + + @Resource(name = "testTaskExecutor") + private ThreadPoolTaskExecutor testTaskExecutor; + + @Override + public ServerResponse getDataPreviewData(BackParamsDto dto) { + HomeDataPreviewVo vo = new HomeDataPreviewVo(); + List fList = new ArrayList<>(2); + List fList2 = new ArrayList<>(2); + List fList3 = new ArrayList<>(2); + List fList4 = new ArrayList<>(2); + List fList5 = new ArrayList<>(2); + List fList6 = new ArrayList<>(2); + try { + Future> future = testTaskExecutor.submit(() -> { + log.info("数据概览-工程数量{}", Thread.currentThread().getName()); + List dataList = new ArrayList<>(2); + dataList = mapper.getProNum(dto); + return dataList; + }); + Future> future2 = testTaskExecutor.submit(() -> { + log.info("数据概览-需求计划数{}", Thread.currentThread().getName()); + List dataList = new ArrayList<>(2); + dataList = mapper.getNeedNum(dto); + return dataList; + }); + Future> future3 = testTaskExecutor.submit(() -> { + log.info("数据概览-运输车量{}", Thread.currentThread().getName()); + List dataList = new ArrayList<>(2); + List> carNumList = mapper.getCarNumList(dto, "1"); + if (CollectionUtils.isNotEmpty(carNumList)) { + int carNum = 0, noDispatchCarNum = 0; + for (Map map : carNumList) { + Integer needNum = map.get("needNum"); + Integer dispatchNum = map.get("dispatchNum"); + carNum += needNum; + noDispatchCarNum += (needNum - dispatchNum); + } + dataList.add(0, carNum); + dataList.add(1, noDispatchCarNum); + } else { + dataList.add(0, 0); + dataList.add(1, 0); + } + return dataList; + }); + Future> future4 = testTaskExecutor.submit(() -> { + log.info("数据概览-吊车量{}", Thread.currentThread().getName()); + List dataList = new ArrayList<>(2); + List> carNumList = mapper.getCarNumList(dto, "2"); + if (CollectionUtils.isNotEmpty(carNumList)) { + int craneNum = 0, noDispatchCraneNum = 0; + for (Map map : carNumList) { + Integer needNum = map.get("needNum"); + Integer dispatchNum = map.get("dispatchNum"); + craneNum += needNum; + noDispatchCraneNum += (needNum - dispatchNum); + } + dataList.add(0, craneNum); + dataList.add(1, noDispatchCraneNum); + } else { + dataList.add(0, 0); + dataList.add(1, 0); + } + return dataList; + }); + Future> future5 = testTaskExecutor.submit(() -> { + log.info("数据概览-已付款金额{}", Thread.currentThread().getName()); + List dataList = new ArrayList<>(2); + dataList.add(0, 0.0); + dataList.add(1, 0); + return dataList; + }); + Future> future6 = testTaskExecutor.submit(() -> { + log.info("数据概览-应付款金额{}", Thread.currentThread().getName()); + List dataList = new ArrayList<>(2); + dataList.add(0, 0.0); + dataList.add(1, 0); + return dataList; + }); + fList = future.get(); + fList2 = future2.get(); + fList3 = future3.get(); + fList4 = future4.get(); + fList5 = future5.get(); + fList6 = future6.get(); + vo = setHomeDataPreviewVo(vo, fList, fList2, fList3, fList4, fList5, fList6); + } catch (Exception e) { + log.error(e.toString(), e); + } + return ServerResponse.createSuccess(vo); + } + + /** + * 数据预览赋值 + * + * @param vo + * @param fList + * @param fList2 + * @param fList3 + * @param fList4 + * @param fList5 + * @param fList6 + * @return HomeDataPreviewVo + * @author cwchen + * @date 2025/1/16 9:21 + */ + public HomeDataPreviewVo setHomeDataPreviewVo(HomeDataPreviewVo vo, List fList, + List fList2, List fList3, + List fList4, List fList5, List fList6) { + vo.setProNum(fList.get(0)); + vo.setLyProNum(fList.get(1)); + vo.setPlanNum(fList2.get(0)); + vo.setAddPlanNum(fList2.get(1)); + vo.setCarNum(fList3.get(0)); + vo.setNoDispatchCarNum(fList3.get(1)); + vo.setCraneNum(fList4.get(0)); + vo.setNoDispatchCraneNum(fList4.get(1)); + vo.setPayMoney((Double) fList5.get(0)); + vo.setPayPlanNum((Integer) fList5.get(1)); + vo.setEstimateMoney((Double) fList6.get(0)); + vo.setEstimatePlanNum((Integer) fList6.get(1)); + return vo; + } + + @Override + public ServerResponse getVehiclesUsedNum(BackParamsDto dto) { + List> dataList = new ArrayList<>(12); + List yearMonthList = DateTimeHelper.getYearMonthByNear12(); + for (String yearMonth : yearMonthList) { + Map map = new HashMap<>(2); + map.put("yearMonth", yearMonth); + try { + Future> future = testTaskExecutor.submit(new Callable>() { + @Override + public List call() throws Exception { + List valueList = new ArrayList<>(2); + List list = mapper.getVehiclesUsedNum(dto, yearMonth, "1"); + List list2 = mapper.getVehiclesUsedNum(dto, yearMonth, "2"); + valueList.add(0, handleValueList(list)); + valueList.add(1, handleValueList(list2)); + return valueList; + } + }); + List valueList = future.get(); + map.put("value", valueList.get(0)); + map.put("value2", valueList.get(1)); + } catch (Exception e) { + log.error(e.toString(), e); + } + dataList.add(map); + } + return ServerResponse.createSuccess(dataList); + } + + public static Integer handleValueList(List list) { + int valueData = 0; + if (CollectionUtils.isNotEmpty(list)) { + for (Integer value : list) { + valueData += value; + } + } + return valueData; + } + + @Override + public ServerResponse getProRanking(BackParamsDto dto) { + List dataList = new ArrayList(); + List sortList = new ArrayList(); + List list = new ArrayList(); + try { + list = mapper.getProRanking(dto); + if (CollectionUtils.isNotEmpty(list)) { + Map> mapData = list.stream().collect(Collectors.groupingBy(item -> { + return (String) item.getProId(); + })); + mapData.forEach((k, v) -> { + HomeProRankingVo vo = new HomeProRankingVo(); + // 申请量、派车量、待派车量累加 + int applyNum = 0, dispatchNum = 0, noDispatchNum = 0; + for (int i = 0; i < v.size(); i++) { + applyNum += v.get(i).getApplyNum(); + dispatchNum += v.get(i).getDispatchNum(); + noDispatchNum += v.get(i).getApplyNum() - v.get(i).getDispatchNum(); + } + vo.setProId(v.get(0).getProId()); + vo.setProName(v.get(0).getProName()); + vo.setApplyNum(applyNum); + vo.setDispatchNum(dispatchNum); + vo.setNoDispatchNum(noDispatchNum); + dataList.add(vo); + }); + } + } catch (Exception e) { + log.error(e.toString(), e); + } + sortList = dataList.stream().sorted(Comparator.comparing(HomeProRankingVo::getApplyNum).reversed()).collect(Collectors.toList()); + return ServerResponse.createSuccess(sortList); + } + + @Override + public ServerResponse getSupStatistics(BackParamsDto data) { + List> sortList = new ArrayList<>(); + List list = new ArrayList(); + try { + list = mapper.getSupStatistics(data); + if (CollectionUtils.isNotEmpty(list)) { + Map> mapData = list.stream().collect(Collectors.groupingBy(item -> { + return item.getId(); + })); + mapData.forEach((k, v) -> { + Map map = new HashMap<>(); + List dataList = new ArrayList<>(); + for (int i = 0; i < v.size(); i++) { + HomeSupStatisticsVo vo = v.get(i); + vo.setDispatchTime(vo.getDispatchTime() == null ? "--" : vo.getDispatchTime()); + dataList.add(vo); + } + map.put("id", v.get(0).getId()); + map.put("type", v.get(0).getType()); + map.put("list", dataList); + sortList.add(map); + }); + } + } catch (Exception e) { + log.error(e.toString(), e); + } + return ServerResponse.createSuccess(sortList); + } + + @Override + public ServerResponse getLeaseMoneyByCar(BackParamsDto dto) { + HomeLeaseMoneyVo vo = new HomeLeaseMoneyVo(); + try { + // 合同金额 + List list = mapper.getLeaseMoney(dto, 1); + if (CollectionUtils.isNotEmpty(list)) { + double v = handleMoney(list); + vo.setContractMoney(v); + } + double progress = handleProgress(vo.getContractMoney(), vo.getPayMoney()); + vo.setProgress(progress); + } catch (Exception e) { + log.error(e.toString(), e); + } + return ServerResponse.createSuccess(vo); + } + + @Override + public ServerResponse getLeaseMoneyByCrane(BackParamsDto dto) { + HomeLeaseMoneyVo vo = new HomeLeaseMoneyVo(); + try { + // 合同金额 + List list = mapper.getLeaseMoney(dto, 2); + if (CollectionUtils.isNotEmpty(list)) { + double v = handleMoney(list); + vo.setContractMoney(v); + } + double progress = handleProgress(vo.getContractMoney(), vo.getPayMoney()); + vo.setProgress(progress); + } catch (Exception e) { + log.error(e.toString(), e); + } + return ServerResponse.createSuccess(vo); + } + + public double handleMoney(List list) { + BigDecimal initBd = new BigDecimal("0"); + if (CollectionUtils.isNotEmpty(list)) { + for (String money : list) { + initBd = initBd.add(new BigDecimal(money)); + } + } + return initBd.doubleValue(); + } + + public double handleProgress(double value, double value2) { + if (value > 0) { + // value 合同金额 value2 付款金额 + BigDecimal a = BigDecimal.valueOf(value); + BigDecimal b = BigDecimal.valueOf(value2); + // 设置保留两位小数,并进行四舍五入 + BigDecimal result = b.divide(a, 2, RoundingMode.HALF_UP); + return result.doubleValue(); + } else { + return 0; + } + } + + @Override + public ServerResponse getCompanyData(BackParamsDto dto) { + List> list = new ArrayList<>(); + try { + list = mapper.getCompanyData(dto); + } catch (Exception e) { + log.error(e.toString(),e); + } + return ServerResponse.createSuccess(list); + } + + @Override + public List getProDetails(BackParamsDto data) { + List list = new ArrayList<>(); + try { + + } catch (Exception e) { + log.error(e.toString(),e); + } + return list; + } + + public static void main(String[] args) { + + } + +} diff --git a/src/main/java/com/bonus/gzcar/manager/common/util/DateTimeHelper.java b/src/main/java/com/bonus/gzcar/manager/common/util/DateTimeHelper.java index c671931..40eb62f 100644 --- a/src/main/java/com/bonus/gzcar/manager/common/util/DateTimeHelper.java +++ b/src/main/java/com/bonus/gzcar/manager/common/util/DateTimeHelper.java @@ -4,6 +4,7 @@ import org.apache.commons.lang3.time.DateUtils; import java.text.*; import java.time.LocalDate; +import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.*; @@ -788,4 +789,18 @@ public class DateTimeHelper { } return 0 + "小时" + 0 + "分钟"; } + + public static List getYearMonthByNear12(){ + List yearMonthList = new ArrayList<>(12); + // 获取当前年月 + YearMonth currentYearMonth = YearMonth.now(); + yearMonthList.add(0, currentYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); + // 获取前十一个月的年月 + for (int i = 0; i < 11; i++) { + YearMonth previousYearMonth = currentYearMonth.minusMonths(i + 1); + String yearMonth = previousYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM")); + yearMonthList.add(i + 1, yearMonth); + } + return yearMonthList; + } } diff --git a/src/main/java/com/bonus/gzcar/manager/config/SpringThreadPoolConfig.java b/src/main/java/com/bonus/gzcar/manager/config/SpringThreadPoolConfig.java new file mode 100644 index 0000000..ce711d0 --- /dev/null +++ b/src/main/java/com/bonus/gzcar/manager/config/SpringThreadPoolConfig.java @@ -0,0 +1,65 @@ +package com.bonus.gzcar.manager.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author cw chen + * @description TODO + * @date 2022-08-22 14:42 + */ +@EnableAsync +@Configuration +public class SpringThreadPoolConfig { + /** + * 核心线程数(默认线程数) + */ + private int corePoolSize = 10; + + /** + * 最大线程数 + */ + private int maxPoolSize = 10; + + /** + * 允许线程空闲时间(单位:默认为秒) + */ + private int keepAliveTime = 10; + + /** + * 缓冲队列数 + */ + private int queueCapacity = 200; + + /** + * 线程池名前缀 + */ + private String threadNamePrefix = "custom-executor"; + + @Bean("testTaskExecutor") + public ThreadPoolTaskExecutor taskExecutor1() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + //设置核心线程数 + executor.setCorePoolSize(corePoolSize); + //设置最大线程数 + executor.setMaxPoolSize(maxPoolSize); + //线程池所使用的缓冲队列 + executor.setQueueCapacity(queueCapacity); + //等待任务在关机时完成--表明等待所有线程执行完 + executor.setWaitForTasksToCompleteOnShutdown(true); + // 等待时间 (默认为0,此时立即停止),并没等待xx秒后强制停止 + executor.setKeepAliveSeconds(keepAliveTime); + // 线程名称前缀 + executor.setThreadNamePrefix(threadNamePrefix); + // 线程池对拒绝任务的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + // 初始化 + executor.initialize(); + return executor; + } + +} diff --git a/src/main/resources/mappers/business/backstage/HomeIndexMapper.xml b/src/main/resources/mappers/business/backstage/HomeIndexMapper.xml new file mode 100644 index 0000000..6fcc1e0 --- /dev/null +++ b/src/main/resources/mappers/business/backstage/HomeIndexMapper.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file