package com.xzx.gc.system.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.entity.SysStorage; import com.xzx.gc.model.admin.StorageModel; import com.xzx.gc.model.admin.SysStorageApiModel; import com.xzx.gc.system.mapper.OrderMapper; import com.xzx.gc.system.mapper.OrderStorageInfoMapper; import com.xzx.gc.system.mapper.PartnerGaodeMapper; import com.xzx.gc.system.mapper.SysStorageMapper; import com.xzx.gc.util.DoubleUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service @Transactional public class SysStorageService { @Autowired private SysStorageMapper sysStorageMapper; @Autowired private CityPartnerService cityPartnerService; @Autowired private PartnerGaodeMapper partnerGaodeMapper; @Autowired private OrderStorageInfoMapper orderStorageInfoMapper; @Autowired private OrderMapper orderMapper; public SysStorage findById(Integer id){ return sysStorageMapper.selectByPrimaryKey(id); } /** * 添加仓库 * * @param storageModel * @return */ public int addSysStorageApi(SysStorageApiModel storageModel) { if(StrUtil.isBlank(storageModel.getPartnerId())){ List list = cityPartnerService.queryPartnerByCurrent(); if(CollUtil.isNotEmpty(list)){ storageModel.setPartnerId(CollUtil.getFirst(list)); } } storageModel.setCreateTime(DateUtil.now()); return sysStorageMapper.addSysStorageApi(storageModel); } /** * 修改仓库 * * @param storageModel * @return */ public int updateSysStorageApi(SysStorageApiModel storageModel) { SysStorage sysStorage=new SysStorage(); BeanUtil.copyProperties(storageModel,sysStorage); return sysStorageMapper.updateByPrimaryKeySelective(sysStorage); // return sysStorageMapper.updateSysStorageApi(storageModel); } /** * 删除仓库 * * @param storageModel * @return */ public int delSysStorageApi(SysStorageApiModel storageModel) { return sysStorageMapper.delSysStorageApi(storageModel); } public Map querySysStorageList(SysStorageApiModel storageModel) { // List partnerIds = new ArrayList<>(); if(StrUtil.isBlank(storageModel.getPartnerId())){ List list = cityPartnerService.queryPartnerByCurrent(); if(CollUtil.isNotEmpty(list)){ storageModel.setPartnerId(CollUtil.getFirst(list)); } } Map m = new HashMap<>(); PageHelper.startPage(storageModel.getPage(),storageModel.getLimit()); List list = sysStorageMapper.querySysStorageApiList(storageModel); PageInfo pageInfo=new PageInfo<>(list); m.put("data", list); m.put("count", pageInfo.getTotal()); m.put("code", 0); return m; } public List> querySysStrangeList(){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); List> list; if(null!=partnerIds&&partnerIds.size()>0){ List townIds = partnerGaodeMapper.queryTownIdsByPartnerIdList(partnerIds); list = sysStorageMapper.querySysStrangeList(townIds); }else{ list = sysStorageMapper.querySysStrangeList(null); } return list; } public Map querySysStorageListData(StorageModel storageModel) { List partnerIds = new ArrayList<>(); if(null!=storageModel.getPartnerId()&&!"".equals(storageModel.getPartnerId())){ partnerIds.add(storageModel.getPartnerId()); }else{ partnerIds = cityPartnerService.queryPartnerByCurrent(); } if(null!=partnerIds&&partnerIds.size()>0){ String partnerId = partnerIds.get(0); List townIds = cityPartnerService.queryTownIdsByPartnerId(partnerId); storageModel.setTownIds(townIds); } Map result = new HashMap<>(); PageHelper.startPage(storageModel.getPage(),storageModel.getLimit()); List> list = sysStorageMapper.querySysStorageList(storageModel); PageInfo> pageInfo = new PageInfo<>(list); BigDecimal allWeight = new BigDecimal("0"); BigDecimal allMoney = new BigDecimal("0"); //相隔的天数 ,查询日均 int dayNum = orderStorageInfoMapper.queryDayDiff(storageModel); for (Map map:list) { StorageModel pModel = new StorageModel(); String id = map.get("id").toString(); map.put("areaname",map.get("areaName")); map.put("storagename",map.get("storageName")); pModel.setSysStorageId(id); pModel.setStartTime(storageModel.getStartTime()); pModel.setEndTime(storageModel.getEndTime()); pModel.setPartnerIds(partnerIds); Map rMap = orderStorageInfoMapper.querySysStorageAll(pModel); List allOrderNumBySsId= orderStorageInfoMapper.sysStorageOrderNum(pModel); BigDecimal allOrderNum = new BigDecimal("0") ; for (String orderIds:allOrderNumBySsId) { String[] ossid = orderIds.split(","); allOrderNum = allOrderNum.add(new BigDecimal(ossid.length)); } map.put("orderNum",allOrderNum); if(null!=rMap){ allWeight = allWeight.add(new BigDecimal(rMap.get("storageWeight").toString())); allMoney =allMoney.add(new BigDecimal(rMap.get("storageMoney").toString())); BigDecimal storageWeight = new BigDecimal(rMap.get("storageWeight").toString()); storageWeight = storageWeight.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP); BigDecimal storageMoney = new BigDecimal(rMap.get("storageMoney").toString()); storageMoney = storageMoney.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP); BigDecimal recycleweight = new BigDecimal(rMap.get("recycleWeight").toString()); recycleweight = recycleweight.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP); BigDecimal recyclemoney = new BigDecimal(rMap.get("recycleMoney").toString()); recyclemoney = recyclemoney.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP); map.put("storageWeight",DoubleUtil.roundSix(storageWeight.toString())); map.put("storageMoney",DoubleUtil.roundFive(storageMoney.toString())); map.put("recycleWeight",DoubleUtil.roundSix(recycleweight.toString())); map.put("recycleMoney",DoubleUtil.roundFive(recyclemoney.toString())); //日均重量 BigDecimal sw = new BigDecimal(rMap.get("storageWeight").toString()); if(dayNum>0){ BigDecimal dayw = sw.divide(new BigDecimal(dayNum),6, RoundingMode.HALF_UP); map.put("dayStorageWeight",dayw.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP)); }else{ sw =sw.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP); map.put("dayStorageWeight",DoubleUtil.roundThree(sw.toString())); } //日均金额 BigDecimal sm = new BigDecimal(rMap.get("storageMoney").toString()); if(dayNum>0){ BigDecimal daym = sm.divide(new BigDecimal(dayNum),5,RoundingMode.HALF_UP); map.put("dayStorageMoney",daym.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP)); }else{ map.put("dayStorageMoney",sm.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP)); } } } if(dayNum==0){ dayNum=1; } BigDecimal alldayw = allWeight.divide(new BigDecimal(dayNum),6,RoundingMode.HALF_UP); BigDecimal alldaym = allMoney.divide(new BigDecimal(dayNum),5,RoundingMode.HALF_UP); allWeight = allWeight.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP); alldayw = alldayw.divide(new BigDecimal("1000"),6,RoundingMode.HALF_UP); alldaym = alldaym.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP); allMoney = allMoney.divide(new BigDecimal("10000"),5,RoundingMode.HALF_UP); //int count = dao.querySysStorageCount(storageModel); result.put("count",pageInfo.getTotal()); result.put("code",0); result.put("data",list); result.put("allWeight",DoubleUtil.roundSix(allWeight.toString())); result.put("allMoney",DoubleUtil.roundFive(allMoney.toString())); result.put("allDayWeight",DoubleUtil.roundSix(alldayw.toString())); result.put("allDayMoney",DoubleUtil.roundFive(alldaym.toString())); return result; } public Map querySysStorageDetail(StorageModel storageModel) { Map result = new HashMap<>(); List> weekOrMonthList = new ArrayList<>(); List> weekOrMonthImgList = new ArrayList<>(); //相隔天数 int dayNum = orderStorageInfoMapper.queryDayDiff(storageModel); Map allRMap = sysStorageMapper.querySysStorageAll(storageModel); BigDecimal allWeight = new BigDecimal(allRMap.get("storageWeight").toString()); BigDecimal allMoney = new BigDecimal(allRMap.get("storageMoney").toString()); BigDecimal alldayw = new BigDecimal("0"); BigDecimal alldaym = new BigDecimal("0"); if(dayNum>0){ alldayw = allWeight.divide(new BigDecimal(dayNum),2,RoundingMode.HALF_UP); alldaym = allMoney.divide(new BigDecimal(dayNum),2,RoundingMode.HALF_UP); } String am = allMoney.divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP).toString(); String aw = allWeight.divide(new BigDecimal("1000"),3, RoundingMode.HALF_UP).toString(); String adm = alldaym.divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP).toString(); String adw = alldayw.divide(new BigDecimal("1000"),3, RoundingMode.HALF_UP).toString(); result.put("allWeight",DoubleUtil.roundThree(aw)); result.put("allMoney",DoubleUtil.roundTwo(am)); result.put("alldayw",DoubleUtil.roundThree(adw)); result.put("alldaym",DoubleUtil.roundTwo(adm)); List> weekOrderList = new ArrayList<>(); List> weekMoneyAndWeightList = new ArrayList<>(); List> detailImage = new ArrayList<>(); if(null!=storageModel.getTimeType()&&!"".equals(storageModel.getTimeType())){ if(storageModel.getTimeType().equals("week")){ weekOrMonthList = com.xzx.gc.util.DateUtil.query12WeekStartTimeAndEndTime(); }else{ weekOrMonthList = com.xzx.gc.util.DateUtil.query12MonthStartTimeAndEndTime(); } for (Map map:weekOrMonthList) { String startTime = map.get("startTime"); String endTime = map.get("endTime"); if(map.get("storageWeight")!=null){ String storageweight = DoubleUtil.roundThree(map.get("storageWeight")); map.put("storageWeight",storageweight); } if(map.get("recycleWeight")!=null){ String recycleweight = DoubleUtil.roundThree(map.get("recycleWeight")); map.put("recycleWeight",recycleweight); } //周订单数 weekOrderList = getWeekOrderList(startTime,endTime,storageModel.getSysStorageId(),weekOrderList); //周金额(入库金额,订单金额,入库重量,订单重量) weekMoneyAndWeightList = getWeekMoneyAndWeightList(startTime,endTime,storageModel.getSysStorageId(),weekMoneyAndWeightList); } }else{ weekOrMonthList = com.xzx.gc.util.DateUtil.query12WeekStartTimeAndEndTime(); for (Map map:weekOrMonthList) { String startTime = map.get("startTime"); String endTime = map.get("endTime"); if(map.get("storageWeight")!=null){ String storageweight = DoubleUtil.roundThree(map.get("storageWeight")); map.put("storageweight",storageweight); } if(map.get("recycleWeight")!=null){ String recycleweight = DoubleUtil.roundThree(map.get("recycleWeight")); map.put("recycleweight",recycleweight); } //周订单数 weekOrderList = getWeekOrderList(startTime,endTime,storageModel.getSysStorageId(),weekOrderList); //周金额(入库金额,订单金额,入库重量,订单重量) weekMoneyAndWeightList = getWeekMoneyAndWeightList(startTime,endTime,storageModel.getSysStorageId(),weekMoneyAndWeightList); } } Map lastMap = new HashMap<>(); if(null!=storageModel.getImageType()&&!"".equals(storageModel.getImageType())) { if (storageModel.getImageType().equals("week")) { weekOrMonthImgList = com.xzx.gc.util.DateUtil.query12WeekStartTimeAndEndTime(); lastMap = weekOrMonthImgList.get(0); } else { weekOrMonthImgList = com.xzx.gc.util.DateUtil.query12MonthStartTimeAndEndTime(); lastMap = weekOrMonthImgList.get(0); } }else{ weekOrMonthImgList = com.xzx.gc.util.DateUtil.query12WeekStartTimeAndEndTime(); lastMap = weekOrMonthImgList.get(0); } detailImage = getSysStorageTypeName(storageModel.getSysStorageId(), lastMap.get("startTime"),lastMap.get("endTime"),null); for (Map obj:weekMoneyAndWeightList) { if(obj.get("storageWeight")!=null){ String storageweight = DoubleUtil.roundThree(obj.get("storageWeight").toString()); obj.put("storageweight",storageweight); } if(obj.get("storageMoney")!=null){ String storageMoney = DoubleUtil.roundThree(obj.get("storageMoney").toString()); obj.put("storagemoney",storageMoney); } if(obj.get("recycleMoney")!=null){ String recycleMoney = DoubleUtil.roundThree(obj.get("recycleMoney").toString()); obj.put("recyclemoney",recycleMoney); } if(obj.get("recycleWeight")!=null){ String recycleWeight = DoubleUtil.roundThree(obj.get("recycleWeight").toString()); obj.put("recycleweight",recycleWeight); } } result.put("weekOrMonthOrderList",weekOrderList); result.put("weekOrMonthMoneyAndWeightList",weekMoneyAndWeightList); result.put("detailImage",detailImage); return result; } /** * 按照仓库图表统计周订单数 * @param startTime * @param endTime * @param sysStorageId * @param weekOrderList * @return */ private List> getWeekOrderList(String startTime,String endTime,String sysStorageId,List> weekOrderList){ Map paramMap = new HashMap<>(); //订单量 入库、订单重量 入库、订单金额 StorageModel storageModel1 = new StorageModel(); storageModel1.setStartTime(startTime); storageModel1.setEndTime(endTime); storageModel1.setSysStorageId(sysStorageId); List orderIdBySysStorageId = orderStorageInfoMapper.sysStorageOrderNum(storageModel1); int orderNum = 0 ; for (String orderIds:orderIdBySysStorageId) { orderNum = orderIds.split(",").length; } String[] startStr = startTime.split(" "); String[] endStr = endTime.split(" "); paramMap.put("startTime",startStr[0]); paramMap.put("endTime",endStr[0]); paramMap.put("orderNum",orderNum); weekOrderList.add(paramMap); return weekOrderList; } private List> getWeekMoneyAndWeightList(String startTime,String endTime,String sysStorageId,List> weekOrderList) { //入库、订单重量 入库、订单金额 StorageModel storageModel2 = new StorageModel(); storageModel2.setStartTime(startTime); storageModel2.setEndTime(endTime); storageModel2.setSysStorageId(sysStorageId); Map rMap = sysStorageMapper.querySysStorageAll(storageModel2); String[] startStr = startTime.split(" "); String[] endStr = endTime.split(" "); rMap.put("startTime",startStr[0]); rMap.put("endTime",endStr[0]); weekOrderList.add(rMap); return weekOrderList; } private List> getSysStorageTypeName(String sysStorageId,String startTime,String endTime,String typeName){ List> resultMap = new ArrayList<>(); StorageModel storageModel1 = new StorageModel(); storageModel1.setStartTime(startTime); storageModel1.setEndTime(endTime); storageModel1.setSysStorageId(sysStorageId); List orderIdBySysStorageId = orderStorageInfoMapper.sysStorageOrderNum(storageModel1); List orderIds = new ArrayList<>(); for (String ids:orderIdBySysStorageId) { String[] orderIdsTemp = ids.split(","); for (String orderId:orderIdsTemp) { orderIds.add(orderId); } } List> list = new ArrayList<>(); if(orderIds!=null&&orderIds.size()>0){ list = orderMapper.getSysStorageTypeName(orderIds,null,null,typeName); } //总金额 BigDecimal totalMoney = new BigDecimal("0"); for (Map map:list) { totalMoney = totalMoney.add(new BigDecimal(map.get("money").toString())); } //查询占比 for (Map map:list) { BigDecimal rate = new BigDecimal(map.get("money").toString()).divide(totalMoney,2,RoundingMode.HALF_UP); map.put("rate",rate.multiply(new BigDecimal("100")).toString()+"%"); BigDecimal money = new BigDecimal(map.get("money").toString()); BigDecimal weight = new BigDecimal(map.get("weight").toString()); money = money.divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP); weight = weight.divide(new BigDecimal("1000"),3, RoundingMode.HALF_UP); map.put("weight",DoubleUtil.roundThree(weight.toString())); map.put("money",DoubleUtil.roundTwo(money.toString())); } Map imageData = new HashMap<>(); if(null!=totalMoney){ totalMoney = totalMoney.divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP); } imageData.put("totalMoney",DoubleUtil.roundTwo(totalMoney.toString())); imageData.put("data",list); resultMap.add(imageData); return resultMap; } }