package com.fzzy.group.manager;
|
|
import com.fzzy.common.manager.CommonManager;
|
import com.fzzy.igds.constant.Constant;
|
import com.fzzy.igds.constant.FoodVariety;
|
import com.fzzy.igds.constant.RespCodeEnum;
|
import com.fzzy.igds.data.*;
|
import com.fzzy.igds.domain.*;
|
import com.fzzy.igds.service.*;
|
import com.fzzy.igds.utils.ContextUtil;
|
import com.fzzy.igds.utils.DateUtil;
|
import com.fzzy.igds.utils.NumberUtil;
|
import com.ruoyi.common.utils.StringUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.text.DecimalFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
|
/**
|
* @Description
|
* @Author CZT
|
* @Date 2025/12/11 15:48
|
*/
|
@Slf4j
|
@Component
|
public class GroupManager {
|
|
@Resource
|
private CommonManager commonManager;
|
@Resource
|
private DicAreaService dicAreaService;
|
@Resource
|
private CoreDeptService deptService;
|
@Resource
|
private DepotService depotService;
|
@Resource
|
private CoreCompanyService coreCompanyService;
|
@Resource
|
private InoutRecordService inoutRecordService;
|
@Resource
|
private EventInfoService eventInfoService;
|
@Resource
|
private SnapRecordService snapRecordService;
|
@Resource
|
private SecCameraService cameraService;
|
|
/**
|
* 获取省及下属市州集合
|
*
|
* @param areaCode
|
* @return
|
*/
|
public List<DicArea> getArea(String areaCode) {
|
|
DicArea area = dicAreaService.listDicAreaByCode(areaCode);
|
if (null == area) {
|
return null;
|
}
|
|
List<DicArea> list = new ArrayList<>();
|
list.add(area);
|
if (Constant.AREA_TYPE_1.equals(area.getType())) {
|
//市州级别,只查询伊犁
|
List<DicArea> children = dicAreaService.listData(null, null, "654000");
|
if (null != children && !children.isEmpty()) {
|
for (DicArea child : children) {
|
if (Constant.AREA_TYPE_2.equals(child.getType())) {
|
//区县
|
List<DicArea> childrenItem = dicAreaService.listData(child.getCode(), null, null);
|
if (null != childrenItem && !childrenItem.isEmpty()) {
|
list.addAll(childrenItem);
|
}
|
}
|
}
|
list.addAll(children);
|
}
|
}
|
|
return list;
|
}
|
|
/**
|
* 获取对应省份及下属市州children
|
*
|
* @param areaCode
|
* @return
|
*/
|
public List<DicArea> getAreaAndChild(String areaCode) {
|
|
DicArea area = dicAreaService.listDicAreaByCode(areaCode);
|
if (null == area) {
|
return null;
|
}
|
|
List<DicArea> list = new ArrayList<>();
|
if (Constant.AREA_TYPE_1.equals(area.getType())) {
|
//市州级别,只查询伊犁
|
List<DicArea> children = dicAreaService.listData(null, null, "654000");
|
if (null != children && !children.isEmpty()) {
|
for (DicArea child : children) {
|
if (Constant.AREA_TYPE_2.equals(child.getType())) {
|
//区县
|
List<DicArea> childrenItem = dicAreaService.listData(child.getCode(), null, null);
|
if (null != childrenItem && !childrenItem.isEmpty()) {
|
child.setChildren(childrenItem);
|
}
|
}
|
}
|
area.setChildren(children);
|
}
|
|
}
|
list.add(area);
|
return list;
|
}
|
|
/**
|
* 获取用户下所有库区信息
|
*
|
* @return
|
*/
|
public List<Dept> getDeptList() {
|
return deptService.getDeptByUserType(null);
|
}
|
|
/**
|
* 获取库区封装信息
|
*
|
* @param companyId
|
* @return
|
*/
|
public List<GroupDeptData> getDeptData(String companyId) {
|
|
List<GroupDeptData> list = new ArrayList<>();
|
GroupDeptData deptData;
|
List<Dept> deptList = deptService.getDeptByUserType(null);
|
if (null != deptList && !deptList.isEmpty()) {
|
List<Depot> depotList;
|
for (Dept dept : deptList) {
|
deptData = new GroupDeptData();
|
deptData.setDeptId(dept.getId());
|
deptData.setDeptName(dept.getKqmc());
|
deptData.setCode(dept.getXzqhdm());
|
deptData.setCounty(dept.getXzqhmc());
|
deptData.setJd(dept.getJd());
|
deptData.setWd(dept.getWd());
|
|
//统计仓库数
|
depotList = depotService.getCacheDepotList(dept.getCompanyId(), dept.getId());
|
if (null != depotList && !depotList.isEmpty()) {
|
for (Depot depot : depotList) {
|
deptData.setDepotNumber(deptData.getDepotNumber() + 1);
|
|
if (StringUtils.isNotBlank(depot.getPledgeBank())) {
|
deptData.setDepotBankNumber(deptData.getDepotBankNumber() + 1);
|
}
|
|
if (null == depot.getStorageReal()) {
|
depot.setStorageReal(0.0);
|
}
|
deptData.setStorageNum(deptData.getStorageNum() + depot.getStorageReal() / 1000);
|
}
|
}
|
|
//统计出入库数量
|
InoutParam inoutParam = new InoutParam();
|
inoutParam.setDeptId(dept.getId());
|
inoutParam.setCompanyId(companyId);
|
inoutParam.setStart(DateUtil.getCurZero(new Date()));
|
inoutParam.setEnd(DateUtil.getNextZero(new Date()));
|
List<InoutRecord> inoutRecords = inoutRecordService.listInout(inoutParam);
|
if (null != inoutRecords && !inoutRecords.isEmpty()) {
|
for (InoutRecord inoutRecord : inoutRecords) {
|
if (Constant.TYPE_IN.equals(inoutRecord.getType())) {
|
deptData.setInNum(deptData.getInNum() + 1);
|
}
|
if (Constant.TYPE_OUT.equals(inoutRecord.getType())) {
|
deptData.setOutNum(deptData.getOutNum() + 1);
|
|
}
|
}
|
}
|
|
list.add(deptData);
|
}
|
}
|
|
return list;
|
}
|
|
/**
|
* 获取库区下监控信息
|
*
|
* @param param
|
* @return
|
*/
|
public PageResponse<List<Camera>> cameraList(IgdsBaseParam param) {
|
|
if (StringUtils.isBlank(param.getDeptId())) {
|
return new PageResponse<>(RespCodeEnum.CODE_2000, null);
|
}
|
|
if (StringUtils.isBlank(param.getCompanyId())) {
|
param.setCompanyId(ContextUtil.getCompanyId());
|
}
|
|
List<Camera> listCamera = cameraService.getCameraByDeptId(param.getCompanyId(), param.getDeptId());
|
|
return new PageResponse<>(RespCodeEnum.CODE_0000, listCamera);
|
}
|
|
/**
|
* 大屏首页统计信息:企业数、库区数、仓库数、质押仓数、散粮及成品粮数、分品种库存数
|
*
|
* @param param
|
* @return
|
*/
|
public PageResponse<GroupIndexData> getGroupIndexData(IgdsBaseParam param) {
|
|
GroupIndexData indexData = new GroupIndexData();
|
|
//企业数
|
Integer companyNum = coreCompanyService.getCompanyNum(param.getCompanyId());
|
indexData.setCompanyNum(companyNum);
|
|
//库区数
|
List<Dept> deptList = deptService.getDeptByUserType(null);
|
if (null != deptList) {
|
indexData.setDeptNum(deptList.size());
|
}
|
|
///仓库数及质押仓库数
|
List<Depot> depotList = depotService.getCacheDepotList(param.getCompanyId());
|
if (null != depotList) {
|
Double foodSum = 0.0;
|
Double packFoodSum = 0.0;
|
indexData.setDepotNum(depotList.size());
|
|
//用于统计分品种库存
|
LinkedHashMap<String, Double> varietyMap = new LinkedHashMap<>();
|
for (Depot depot : depotList) {
|
if (StringUtils.isNotBlank(depot.getPledgeBank())) {
|
indexData.setDepotBankNum(indexData.getDepotBankNum() + 1);
|
}
|
if (null == depot.getStorageReal()) {
|
depot.setStorageReal(0.0);
|
}
|
if (StringUtils.isNotBlank(depot.getStoreType()) && "2".equals(depot.getStoreType())) {
|
packFoodSum += depot.getStorageReal() / 1000;
|
} else {
|
foodSum += depot.getStorageReal() / 1000;
|
}
|
|
if (depot.getStorageReal() > 0) {
|
if (StringUtils.isBlank(depot.getFoodVariety())) {
|
//设置为其他品类
|
depot.setFoodVariety("9999000");
|
}
|
|
varietyMap.putIfAbsent(depot.getFoodVariety(), 0.000);
|
varietyMap.put(depot.getFoodVariety(), varietyMap.get(depot.getFoodVariety()) + NumberUtil.keepPrecision(depot.getStorageReal() / 1000, 3));
|
}
|
}
|
|
for (String mapKey : varietyMap.keySet()) {
|
if (varietyMap.get(mapKey) <= 0) {
|
continue;
|
}
|
indexData.getXaxis().add(FoodVariety.getMsg(mapKey));
|
indexData.getSeriesData().add(new DecimalFormat("0.000").format(varietyMap.get(mapKey)));
|
}
|
indexData.setFoodSum(new DecimalFormat("0.000").format(foodSum));
|
indexData.setPackFoodSum(new DecimalFormat("0.000").format(packFoodSum));
|
}
|
|
return new PageResponse<>(RespCodeEnum.CODE_0000, indexData);
|
}
|
|
/**
|
* 大屏首页-库区信息统计
|
*
|
* @param param
|
* @return
|
*/
|
public PageResponse<List<GroupDeptData>> indexDeptList(IgdsBaseParam param) {
|
|
List<GroupDeptData> list = new ArrayList<>();
|
GroupDeptData deptData;
|
List<Dept> deptList = deptService.getDeptByUserType(null);
|
if (null != deptList && !deptList.isEmpty()) {
|
List<Depot> depotList;
|
for (Dept dept : deptList) {
|
deptData = new GroupDeptData();
|
deptData.setDeptId(dept.getId());
|
deptData.setDeptName(dept.getKqmc());
|
deptData.setCode(dept.getXzqhdm());
|
deptData.setCounty(dept.getXzqhmc());
|
deptData.setJd(dept.getJd());
|
deptData.setWd(dept.getWd());
|
|
//统计仓库数
|
depotList = depotService.getCacheDepotList(dept.getCompanyId(), dept.getId());
|
if (null != depotList && !depotList.isEmpty()) {
|
for (Depot depot : depotList) {
|
deptData.setDepotNumber(deptData.getDepotNumber() + 1);
|
|
if (StringUtils.isNotBlank(depot.getPledgeBank())) {
|
deptData.setDepotBankNumber(deptData.getDepotBankNumber() + 1);
|
}
|
|
if (null == depot.getStorageReal()) {
|
depot.setStorageReal(0.0);
|
}
|
deptData.setStorageNum(deptData.getStorageNum() + depot.getStorageReal() / 1000);
|
}
|
}
|
|
//统计出入库数量
|
InoutParam inoutParam = new InoutParam();
|
inoutParam.setDeptId(dept.getId());
|
inoutParam.setCompanyId(param.getCompanyId());
|
inoutParam.setStart(DateUtil.getCurZero(new Date()));
|
inoutParam.setEnd(DateUtil.getNextZero(new Date()));
|
List<InoutRecord> inoutRecords = inoutRecordService.listInout(inoutParam);
|
if (null != inoutRecords && !inoutRecords.isEmpty()) {
|
for (InoutRecord inoutRecord : inoutRecords) {
|
if (Constant.TYPE_IN.equals(inoutRecord.getType())) {
|
deptData.setInNum(deptData.getInNum() + 1);
|
}
|
if (Constant.TYPE_OUT.equals(inoutRecord.getType())) {
|
deptData.setOutNum(deptData.getOutNum() + 1);
|
|
}
|
}
|
}
|
|
//统计AI事件数量
|
IgdsBaseParam igdsParam = new IgdsBaseParam();
|
igdsParam.setDeptId(dept.getId());
|
igdsParam.setCompanyId(param.getCompanyId());
|
igdsParam.setStart(DateUtil.getNewByDay(new Date(), -6));
|
igdsParam.setEnd(DateUtil.getNextZero(new Date()));
|
List<EventInfo> enevtList = eventInfoService.getListByParam(igdsParam);
|
List<EventInfo> resultEnevtList = new ArrayList<>();
|
for (EventInfo info : enevtList) {
|
//当标签包含 卡车, 或者包含大写的英文字母(代表有车牌)时,添加进result
|
if (StringUtils.isNotBlank(info.getTags())) {
|
if (info.getTags().contains("卡车") || info.getTags().matches(".*[A-Z].*")) {
|
resultEnevtList.add(info);
|
}
|
}
|
}
|
if (null != resultEnevtList && !resultEnevtList.isEmpty()) {
|
deptData.setWarnNum7(resultEnevtList.size());
|
for (EventInfo eventInfo : resultEnevtList) {
|
if (DateFormatUtils.format(new Date(), "yyyyMMdd").equals(DateFormatUtils.format(eventInfo.getTime(), "yyyyMMdd"))) {
|
deptData.setDailyTotal(deptData.getDailyTotal() + 1);
|
}
|
}
|
}
|
|
list.add(deptData);
|
}
|
}
|
|
return new PageResponse<>(RespCodeEnum.CODE_0000, list);
|
}
|
|
/**
|
* 统计gis数据,只统计登录人下属的数据统计
|
*
|
* @return
|
*/
|
public GroupGisData getGisData() {
|
|
GroupGisData groupGisData = new GroupGisData();
|
|
//查询伊犁下属区县
|
//区县
|
List<DicArea> dicAreaList = dicAreaService.listData("654000", null, null);
|
|
//统计区县下库区数
|
LinkedHashMap<String, Integer> valuePieChart = new LinkedHashMap<>();
|
LinkedHashMap<String, String> namePieChart = new LinkedHashMap<>();
|
if (null != dicAreaList && !dicAreaList.isEmpty()) {
|
for (DicArea dicArea : dicAreaList) {
|
valuePieChart.put(dicArea.getCode(), 0);
|
namePieChart.put(dicArea.getCode(), dicArea.getName());
|
}
|
}
|
List<Dept> deptList = deptService.getDeptByUserType(null);
|
if (null != deptList && !deptList.isEmpty()) {
|
//库区总数
|
groupGisData.setDeptNum(deptList.size());
|
for (Dept dept : deptList) {
|
if (StringUtils.isBlank(dept.getXzqhdm()) || null == valuePieChart.get(dept.getXzqhdm())) {
|
if (null == valuePieChart.get("999999")) {
|
valuePieChart.put("999999", 0);
|
namePieChart.put("999999", "其他区县");
|
}
|
dept.setXzqhdm("999999");
|
}
|
valuePieChart.put(dept.getXzqhdm(), valuePieChart.get(dept.getXzqhdm()) + 1);
|
}
|
}
|
|
if (groupGisData.getDeptNum() > 0) {
|
for (String mapKey : valuePieChart.keySet()) {
|
groupGisData.getDeptList().add(new ChartPie(valuePieChart.get(mapKey) + "", namePieChart.get(mapKey), new DecimalFormat("0.0").format((double) valuePieChart.get(mapKey) / groupGisData.getDeptNum() * 100)));
|
}
|
}
|
|
//统计重量
|
List<Depot> depotList = depotService.getData(ContextUtil.getCompanyId(), ContextUtil.subDeptId(null), false);
|
if (null != depotList && !depotList.isEmpty()) {
|
for (Depot depot : depotList) {
|
if (null == depot.getStorageReal()) {
|
depot.setStorageReal(0.0);
|
}
|
groupGisData.setSum(groupGisData.getSum() + depot.getStorageReal());
|
if (StringUtils.isNotBlank(depot.getPledgeBank())) {
|
groupGisData.setBankSum(groupGisData.getBankSum() + depot.getStorageReal());
|
} else {
|
groupGisData.setNormalSum(groupGisData.getNormalSum() + depot.getStorageReal());
|
}
|
}
|
}
|
if (groupGisData.getSum() > 0) {
|
groupGisData.setSumPer(new DecimalFormat("0.00").format(groupGisData.getSum() / groupGisData.getSum() * 100L));
|
groupGisData.setBankSumPer(new DecimalFormat("0.00").format(groupGisData.getBankSum() / groupGisData.getSum() * 100L));
|
groupGisData.setNormalSumPer(new DecimalFormat("0.00").format(groupGisData.getNormalSum() / groupGisData.getSum() * 100L));
|
}
|
|
return groupGisData;
|
}
|
|
/**
|
* 大屏首页-抓拍跟踪信息
|
*
|
* @param param
|
* @return
|
*/
|
public PageResponse<List<SnapRecord>> indexSnapList(IgdsBaseParam param) {
|
|
param.setStart(DateUtil.getNewByDay(new Date(), -10));
|
param.setEnd(new Date());
|
List<SnapRecord> listSnap = snapRecordService.getListByParam(param);
|
|
List<SnapRecord> resultListSnap = new ArrayList<>();
|
for (SnapRecord info : listSnap) {
|
//当标签包含 卡车, 或者包含大写的英文字母(代表有车牌)时,添加进result
|
if (StringUtils.isNotBlank(info.getTags())) {
|
if (info.getTags().contains("卡车") || info.getTags().matches(".*[A-Z].*")) {
|
resultListSnap.add(info);
|
}
|
}
|
}
|
if (null != resultListSnap && !resultListSnap.isEmpty()) {
|
//判断文件是否存在
|
for (SnapRecord record : resultListSnap) {
|
record.setImgName(commonManager.isImgExit(record.getImgName(), null));
|
}
|
}
|
|
return new PageResponse<>(RespCodeEnum.CODE_0000, resultListSnap);
|
}
|
}
|