Commit 57852ef3 authored by 李秀明's avatar 李秀明

Merge remote-tracking branch 'origin/develop_dl' into develop_dl

# Conflicts: # amos-boot-system-patrol/src/main/resources/db/mapper/dbTemplate_plan_task.xml
parents 8e8b2fa2 f03986dc
package com.yeejoin.equipmanage.common.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.yeejoin.equipmanage.common.entity.publics.BaseEntity;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentOnCarAppVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 消防车信息
*
* @author wujiang
* @date 2020-07-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value="wl_car_speed_warning_record",autoResultMap = true)
@ApiModel(value = "车辆告警信息实体类", description = "车辆告警信息")
public class CarSpeedWarningRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "车牌号")
private String carNum;
@ApiModelProperty(value = "告警时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date waringDate;
@ApiModelProperty(value = "超速值")
@TableField("over_speed")
private Double overSpeed;
@ApiModelProperty(value = "机构/部门名称")
@TableField("biz_org_name")
private String bizOrgName;
// 2023年11月6日 11点16分添加
@ApiModelProperty(value = "司机")
@TableField("driver")
private String driver;
// 2023年11月6日 11点16分添加
@ApiModelProperty(value = "联系电话")
@TableField("phone")
private String phone;
@ApiModelProperty(value = "联系电话")
@TableField("ownership")
private String ownership;
}
......@@ -23,7 +23,7 @@ public interface SignMapper extends BaseMapper<Sign> {
IPage<SinStaticDto> queryStaticForPage(IPage<?> page, SinStaticDto dto);
List<Map<String, Object>> queryPeopleInfo(SinStaticDto dto);
List<Map<String, Object>> queryPeopleInfo(@Param("dto") SinStaticDto dto);
int queryPersonNum(String bizOgrCode);
......
......@@ -93,12 +93,16 @@
) s1
LEFT JOIN (
SELECT
count(userId) signNum,
s.*
count(s0.userId) AS signNum,
s0.*
FROM
(
SELECT
DISTINCT sign.user_id userId,
s.*
FROM
(
SELECT DISTINCT
sign.user_id userId,
date,
biz_org_Name bizOrgName,
biz_org_code bizOrgCode,
......@@ -113,13 +117,11 @@
and sign.biz_org_code like CONCAT(#{dto.bizOrgCode},'%')
</if>
</where>
group by
date,
biz_org_code,
user_id
order by
sign.sign_time desc
ORDER BY
sign.sign_time DESC
) s
) s0
GROUP BY s0.date
) s2 ON s2.date = s1.date
GROUP BY
s1.date
......
......@@ -473,7 +473,7 @@ public class CarController extends AbstractBaseController {
/**
* 根据车辆id查询车辆详情信息,供iot_tree展示
*
* @param carNum
* @param id
* @return
*/
@RequestMapping(value = "/threeDimensional/getCarDetailById/{id}", method = RequestMethod.GET)
......@@ -1337,7 +1337,7 @@ public class CarController extends AbstractBaseController {
/**
* 根据查询车辆简要信息
*
* @param id
* @param carNum
* @return
*/
@RequestMapping(value = "/state/info", method = RequestMethod.GET)
......@@ -1415,15 +1415,15 @@ public class CarController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarEquipStateInfo", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-获取设备状态信息", notes = "车辆统计-获取设备状态信息")
public Page<CarEquipStateInfoDto> getCarEquipStateInfo() {
return iCarService.getCarEquipStateInfo();
public Page<CarEquipStateInfoDto> getCarEquipStateInfo(@RequestParam(required = false) String keyWord,@RequestParam String flag) {
return iCarService.getCarEquipStateInfo(keyWord);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarEquipAlarmInfoDto", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-获取设备告警信息", notes = "车辆统计-获取设备告警信息")
public Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto() {
return iCarService.getCarEquipAlarmInfoDto();
public Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto(@RequestParam(required = false) String keyWord,@RequestParam String flag) {
return iCarService.getCarEquipAlarmInfoDto(keyWord);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
......@@ -1443,15 +1443,15 @@ public class CarController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarMileageInfoByMoth", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-按照月份统计车辆里程", notes = "车辆统计-按照月份统计车辆里程")
public BasicTableDataDto getCarMileageInfoByMoth(@RequestParam(required = false) String date, @RequestParam Integer current, @RequestParam Integer size) {
return iCarService.getCarMileageInfoByMoth(date, current, size);
public BasicTableDataDto getCarMileageInfoByMoth(@RequestParam(required = false) String date, @RequestParam Integer current, @RequestParam Integer size,@RequestParam(required = false) String keyWord) {
return iCarService.getCarMileageInfoByMoth(date, current, size, keyWord);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/exportCarMileageInfoByMoth", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-按照月份统计导出车辆里程", notes = "车辆统计-按照月份统计导出车辆里程")
public void exportCarMileageInfoByMoth(@RequestParam(required = false) String date, HttpServletResponse response) {
List<CarExportDto> list = this.iCarService.exportCarMileageInfoByMoth(date);
public void exportCarMileageInfoByMoth(@RequestParam(required = false) String date,@RequestParam(required = false) String keyWord, HttpServletResponse response) {
List<CarExportDto> list = this.iCarService.exportCarMileageInfoByMoth(date,keyWord);
if (org.springframework.util.StringUtils.isEmpty(date)) {
date = DateUtil.format(new Date(), "yyyy-MM");
}
......@@ -1469,7 +1469,19 @@ public class CarController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarExcepitonTrack", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-按照日期范围获取异常车辆", notes = "车辆统计-按照日期范围获取异常车辆")
public Page<CarExceptionDto> getCarExcepitonTrack(@RequestParam Integer type) {
return iCarService.getCarExcepitonTrack(type);
public Page<CarExceptionDto> getCarExcepitonTrack(@RequestParam Integer type,@RequestParam(required = false) String keyWord) {
return iCarService.getCarExcepitonTrack(type,keyWord);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarWarningRecord", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-获取超速信息", notes = "车辆统计-获取超速信息")
public Page<CarSpeedWarningRecord> getCarWarningRecord(@RequestParam(required = false) String keyWord,@RequestParam String flag) {
return iCarService.getCarWarningRecord(keyWord);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getBizOrgName", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-获取归属单位下拉框值", notes = "车辆统计-获取归属单位下拉框值")
public List<Map<String,String>> getBizOrgName(@RequestParam(required = false) String keyWord) {
return iCarService.getBizOrgName();
}
}
......@@ -22,4 +22,6 @@ public class CarExportDto {
@Excel(name = "里程数(km)")
private String totalTravel;
private String totalTravelValue;
}
......@@ -16,4 +16,6 @@ public class MileageDto {
private String number;
//iotCode+date
private String iotCode;
//所属单位
private String bizOrgName;
}
package com.yeejoin.equipmanage.listener;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.equipmanage.common.entity.Car;
import com.yeejoin.equipmanage.common.entity.CarSpeedWarningRecord;
import com.yeejoin.equipmanage.common.entity.WlCarMileage;
import com.yeejoin.equipmanage.fegin.IotFeign;
import com.yeejoin.equipmanage.mapper.WlCarSpeedWaringRecordMapper;
import com.yeejoin.equipmanage.service.ICarService;
import com.yeejoin.equipmanage.service.IWlCarMileageService;
import com.yeejoin.equipmanage.thread.ThreadCar;
......@@ -43,8 +47,13 @@ public class CarIotNewListener extends EmqxListener {
@Autowired
private IotFeign iotFeign;
@Autowired
private WlCarSpeedWaringRecordMapper wlCarSpeedWaringRecordMapper;
@Value("${mileage.clippingtime:600000}")
private Long clipping_time;
@Value("${default.maxspeed:70.0}")
private Double defaultMaxSpeed;
private final String GUIDE_KEY = "813684495d9a3981dd2c7694916fe404";
private final String GUIDE_URL = "https://restapi.amap.com/v3/geocode/regeo?";
......@@ -191,7 +200,9 @@ public class CarIotNewListener extends EmqxListener {
double startLongitude = jsonObject.getDoubleValue("FireCar_Longitude");
double startLatitude = jsonObject.getDoubleValue("FireCar_Latitude");
int direction = jsonObject.getIntValue("direction");
String waringDate = jsonObject.getString("createdTime");
Double speed=jsonObject.getDoubleValue("FireCar_Speed");
Double maxSpeed = defaultMaxSpeed;
// 地图推送消息
Car car = iCarService.getOne(new LambdaQueryWrapper<Car>().eq(Car::getIotCode, iotCode));
if (car != null && startLongitude != 0 && startLatitude != 0) {
......@@ -208,7 +219,22 @@ public class CarIotNewListener extends EmqxListener {
mqttMessage.setPayload(sendArr.toJSONString().getBytes());
car.setLongitude(startLongitude);
car.setLatitude(startLatitude);
if(!ObjectUtils.isEmpty(car.getMaxSpeed())){
maxSpeed =car.getMaxSpeed();
}
iCarService.updateById(car);
if(speed > maxSpeed){
CarSpeedWarningRecord carSpeedWarningRecord = new CarSpeedWarningRecord();
carSpeedWarningRecord.setCarNum(car.getCarNum());
carSpeedWarningRecord.setDriver(car.getDriver());
carSpeedWarningRecord.setPhone(car.getPhone());
carSpeedWarningRecord.setOverSpeed(speed-maxSpeed);
carSpeedWarningRecord.setOwnership(car.getOwnership());
carSpeedWarningRecord.setBizOrgName(car.getBizOrgName());
carSpeedWarningRecord.setWaringDate(DateUtil.parse(waringDate, DatePattern.NORM_DATETIME_PATTERN));
wlCarSpeedWaringRecordMapper.insert(carSpeedWarningRecord);
logger.info("-----------触发车辆超速告警成功--------");
}
logger.info("-----------推送车辆位置消息到到地图成功--------");
try {
emqkeeper.getMqttClient().publish("car/location", mqttMessage);
......
package com.yeejoin.equipmanage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.equipmanage.common.entity.CarSpeedWarningRecord;
public interface WlCarSpeedWaringRecordMapper extends BaseMapper<CarSpeedWarningRecord> {
}
......@@ -8,10 +8,7 @@ import com.yeejoin.equipmanage.common.datasync.entity.FireVehicle;
import com.yeejoin.equipmanage.common.dto.CarFusionDto;
import com.yeejoin.equipmanage.common.dto.CarInfoDto;
import com.yeejoin.equipmanage.common.dto.CarStatusInfoDto;
import com.yeejoin.equipmanage.common.entity.Car;
import com.yeejoin.equipmanage.common.entity.CarInfo;
import com.yeejoin.equipmanage.common.entity.CarProperty;
import com.yeejoin.equipmanage.common.entity.EquipmentCategory;
import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.entity.dto.CarDto;
import com.yeejoin.equipmanage.common.entity.dto.CarEquipAlarmInfoDto;
import com.yeejoin.equipmanage.common.entity.dto.CarEquipStateInfoDto;
......@@ -19,11 +16,9 @@ import com.yeejoin.equipmanage.common.entity.vo.CarIndexVo;
import com.yeejoin.equipmanage.common.entity.vo.CarPropertyVo;
import com.yeejoin.equipmanage.common.vo.*;
import com.yeejoin.equipmanage.dto.*;
import javassist.compiler.ast.Keyword;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
/**
* 消防车信息 服务类
......@@ -199,20 +194,21 @@ public interface ICarService extends IService<Car> {
// 获取车辆归属单位总数
Map<String,Integer> getCountOfCarBelongCompany();
List<ChartIntegerDto> getCarCategoryInfo() ;
Page<CarEquipStateInfoDto> getCarEquipStateInfo();
Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto();
Page<CarEquipStateInfoDto> getCarEquipStateInfo(String keyWord);
Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto(String keyWord);
List<ChartIntegerDto>getCarBelongAreaInfo() ;
Page<CarAreaInfoDto> getCarAreaInfo(String areaName ) ;
BasicTableDataDto getCarMileageInfoByMoth(String date,Integer current,Integer pageSize);
List<CarExportDto> exportCarMileageInfoByMoth(String date);
BasicTableDataDto getCarMileageInfoByMoth(String date, Integer current, Integer pageSize,String keyWord);
List<CarExportDto> exportCarMileageInfoByMoth(String date,String keyWord);
ZZChartsDto getCarMileageInfoByMothOFDay(String iotCode);
Page<CarExceptionDto> getCarExcepitonTrack(Integer type);
Page<CarExceptionDto> getCarExcepitonTrack(Integer type,String keyWord);
Page<CarSpeedWarningRecord> getCarWarningRecord(String keyWord);
List<Map<String,String>> getBizOrgName();
/**
* 查询车辆启动状态,赋码
*/
List<Map<String, String>> updateCarStartStatus();
/**
* 赋码
*/
......
......@@ -67,8 +67,8 @@ import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.math.BigDecimal;
import java.text.Collator;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
......@@ -85,6 +85,15 @@ import java.util.stream.Collectors;
@Service
public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarService {
private final String CAR_START_INDEX_KEY = "FireCar_Start";
@Autowired
protected HttpServletRequest request;
@Autowired
EquipmentSpecificMapper equipmentSpecificMapper;
@Autowired
WlCarSpeedWaringRecordMapper wlCarSpeedWaringRecordMapper;
@Autowired
ISyncDataService syncDataService;
@Autowired
private EquipmentCategoryMapper equipmentCategoryMapper;
private List<Consumer<LossParams>> lossHandlers;
......@@ -124,8 +133,6 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
@Autowired
private WarehouseStructureMapper warehouseStructureMapper;
@Autowired
protected HttpServletRequest request;
@Autowired
private IEquipmentService iEquipmentService;
@Autowired
private IUploadFileService iUploadFileService;
......@@ -138,50 +145,31 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
private IManufacturerInfoService iManufacturerInfoService;
@Autowired
private IJournalService journalService;
@Autowired
EquipmentSpecificMapper equipmentSpecificMapper;
@Autowired
private RemoteSecurityService remoteSecurityService;
@Autowired
private ICarPropertyService carPropertyService;
@Autowired
ISyncDataService syncDataService;
@Autowired
private IEquipmentDetailService iEquipmentDetailService;
@Autowired
private IEquipmentCategoryService iEquipmentCategoryService;
@Autowired
private CarPropertyMapper carPropertyMapper;
@Value("${equip.dict.car-state}")
private String carState;
@Value("${equip.dict.name-key}")
private String nameKeys;
@Value("${systemctl.sync.switch}")
private Boolean syncSwitch;
@Value("${equip.car.alarmBattery}")
private Integer carEquipAlarmBatteryNumber;
@Value("${equip.car.maxTravel}")
private Double carMaxTravel;
@Autowired
@Lazy
private IWlCarMileageService iWlCarMileageService;
private final String CAR_START_INDEX_KEY = "FireCar_Start";
@Value("${car.max.speed:100}")
private Integer CAR_MAX_SPEED;
private Integer CAR_MAX_SPEED;
/**
* 当前登录用户信息
......@@ -404,193 +392,6 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
return result;
}
class LossParams {
private Long carId;
private Long lossStateId;
private List<ExtinguishantLossRequest> extinguishants;
private Car car;
private Map<Long, StockDetail> details;
private List<ExtinguishantOnCar> extinguishantOnCar;
/**
* 记录明细账id,用户更新搜索
*/
private Set<Long> stockDetailIds;
/**
* 损耗单
*/
private WastageBill bill;
public LossParams(Long carId, List<ExtinguishantLossRequest> extinguishants) {
this.carId = carId;
this.extinguishants = extinguishants;
setStockDetailIds(new HashSet<>());
}
public StockDetail getDetailById(Long id) {
return details.get(id);
}
public Long getCarId() {
return carId;
}
public void setCarId(Long carId) {
this.carId = carId;
}
public List<ExtinguishantLossRequest> getExtinguishants() {
return extinguishants;
}
public void setExtinguishants(List<ExtinguishantLossRequest> extinguishants) {
this.extinguishants = extinguishants;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public Map<Long, StockDetail> getDetails() {
return details;
}
public void setDetails(Map<Long, StockDetail> details) {
this.details = details;
}
public List<ExtinguishantOnCar> getExtinguishantOnCar() {
return extinguishantOnCar;
}
public void setExtinguishantOnCar(List<ExtinguishantOnCar> extinguishantOnCar) {
this.extinguishantOnCar = extinguishantOnCar;
}
public WastageBill getBill() {
return bill;
}
public void setBill(WastageBill bill) {
this.bill = bill;
}
private Double equalLossCountHandler(ExtinguishantOnCar ex, Double lossCount) throws Exception {
try {
StockDetail stockDetail = getDetailById(ex.getStockDetailId());
stockDetail.setStatus(EquipStatusEnum.LOSS.getCode().toString());
stockDetail.setId(null);
stockDetailMapper.insert(stockDetail);
addStockDetailId(stockDetail.getId());
// 查询库存
Stock stock = stockMapper.selectById(stockDetail.getStockId());
stock.setAmount(stock.getAmount() - lossCount);
stockMapper.updateById(stock);
// 删除
extinguishantOnCarMapper.deleteById(ex.getId());
// 损耗清单详情
WastageBillDetail detail = new WastageBillDetail();
detail.setAmount(BigDecimal.valueOf(lossCount));
detail.setStockDetailId(stockDetail.getId());
detail.setWastageBillId(bill.getId());
wastageBillDetailMapper.insert(detail);
journalMapper.insert(createJournal(ex, stockDetail.getId(), null));
return 0d;
} catch (Exception e) {
throw e;
}
}
private Double greaterThanLossCountHandler(ExtinguishantOnCar ex, Double lossCount) throws Exception {
try {
StockDetail stockDetail = getDetailById(ex.getStockDetailId());
if (stockDetail == null) {
return 0d;
}
stockDetail.setAmount(stockDetail.getAmount() - lossCount);
stockDetailMapper.updateById(stockDetail);
addStockDetailId(stockDetail.getId());
StockDetail stockDetailClone = new StockDetail();
BeanUtils.copyProperties(stockDetail, stockDetailClone);
stockDetailClone.setId(null);
stockDetailClone.setAmount(lossCount);
stockDetailClone.setStatus(EquipStatusEnum.LOSS.getCode().toString());
stockDetailMapper.insert(stockDetailClone);
addStockDetailId(stockDetailClone.getId());
Stock stock = stockMapper.selectById(stockDetail.getStockId());
stock.setAmount(stock.getAmount() - lossCount);
stockMapper.updateById(stock);
ex.setAmount(ex.getAmount() - lossCount);
extinguishantOnCarMapper.updateById(ex);
// 损耗清单详情
WastageBillDetail detail = new WastageBillDetail();
detail.setAmount(BigDecimal.valueOf(lossCount));
detail.setStockDetailId(stockDetailClone.getId());
detail.setWastageBillId(bill.getId());
wastageBillDetailMapper.insert(detail);
journalMapper.insert(createJournal(ex, stockDetailClone.getId(), lossCount));
return 0d;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
public Journal createJournal(ExtinguishantOnCar e, Long stockDetailId, Double amount) {
Journal journal = new Journal();
Double lossAmount = (null != amount) ? amount : e.getAmount();
Long lossStockDetailId = (null != stockDetailId) ? stockDetailId : e.getStockDetailId();
journal.setAmount(lossAmount);
journal.setCarId(getCarId());
journal.setEquipmentDetailId(e.getEquipmentDetailId());
journal.setUserId(Long.valueOf(getUser().getUserId()));
// 查询EquipmentDetail
EquipmentDetail equipmentDetail = equipmentDetailMapper
.selectById(getDetailById(e.getStockDetailId()).getEquipmentDetailId());
Equipment equipment = iEquipmentService.getById(equipmentDetail.getEquipmentId());
Unit unit = unitMapper.selectById(equipment.getUnitId());
journal.setRemark(String.format("【%s】在车牌号为【%s】的车辆上,损耗了【%.2f】%s【%s】", getUser().getRealName(),
getCar().getCarNum(), lossAmount, unit.getName(), equipmentDetail.getName()));
journal.setOrgCode(getCar().getOrgCode());
journal.setStockDetailId(lossStockDetailId);
journal.setState(getLossStateId().toString());
return journal;
}
public Set<Long> getStockDetailIds() {
return stockDetailIds;
}
public void setStockDetailIds(Set<Long> stockDetailIds) {
this.stockDetailIds = stockDetailIds;
}
public void addStockDetailId(Long id) {
stockDetailIds.add(id);
}
public Long getLossStateId() {
return lossStateId;
}
public void setLossStateId(Long lossStateId) {
this.lossStateId = lossStateId;
}
}
@PostConstruct
public void init() {
if (null == loadingHandlers) {
......@@ -617,7 +418,7 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
loadingHandlers.add(this::destocking);
// loadingHandlers.add((p) ->
// loadingHandlers.add((p) ->
// AsynUtils.run(p.getStockDetailIds(), iRemoteSearchServer::updateStockDetails));
}
if (null == lossHandlers) {
......@@ -765,146 +566,39 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
return result;
}
class LoadingParams {
private Long carId;
private String loadingId;
private List<ExtinguishantRequeset> extinguishants;
@Override
public void loadingEquipment(OnBoardEquipment equipment, AgencyUserModel user) {
List<Equip> eqs = generate(equipment);
try {
eqs.forEach(eq -> {
StockDetail detail = getEligibleStockDetail(eq);
if (null == detail) {
throw new RuntimeException("二维码为【" + eq.getQrCode() + "】的装备库存量不足!");
}
updateStockDetail(detail, equipment.getType(), null, null);
loading(detail, eq);
generateJournal(detail, eq, equipment.getType(), user, null);
});
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
private Car car;
}
private Map<Long, StockDetail> details;
private Set<Long> stockDetailIds;
public LoadingParams(Long carId, List<ExtinguishantRequeset> extinguishants) {
this.carId = carId;
this.extinguishants = extinguishants;
setStockDetailIds(new HashSet<>());
}
public ExtinguishantOnCar create(ExtinguishantRequeset r, StockDetail detail) {
ExtinguishantOnCar extinguishantOnCar = new ExtinguishantOnCar();
extinguishantOnCar.setCarId(carId);
extinguishantOnCar.setAmount(r.getAmount());
extinguishantOnCar.setStockDetailId(detail.getId());
extinguishantOnCar.setEquipmentDetailId(getDetailById(r.getStockDetailId()).getEquipmentDetailId());
return extinguishantOnCar;
}
public Journal createJournal(ExtinguishantRequeset r, Long stockDetailId) {
// 查询EquipmentDetail
EquipmentDetail equipmentDetail = equipmentDetailMapper
.selectById(getDetailById(r.getStockDetailId()).getEquipmentDetailId());
Equipment equipment = iEquipmentService.getById(equipmentDetail.getEquipmentId());
Unit unit = unitMapper.selectById(equipment.getUnitId());
Journal journal = new Journal();
journal.setAmount(r.getAmount());
journal.setCarId(getCarId());
journal.setEquipmentDetailId(getDetailById(r.getStockDetailId()).getEquipmentDetailId());
journal.setUserId(Long.valueOf(getUser().getUserId()));
journal.setWarehouseStructureId(getDetailById(r.getStockDetailId()).getWarehouseStructureId());
journal.setRemark(String.format("【%s】向车牌号为【%s】的车辆上,装载了【%.2f】%s【%s】", getUser().getRealName(),
getCar().getCarNum(), r.getAmount(), unit.getName(), equipmentDetail.getName()));
journal.setOrgCode(getCar().getOrgCode());
journal.setStockDetailId(stockDetailId);
journal.setState(getLoadingId());
return journal;
}
public StockDetail getDetailById(Long id) {
return details.get(id);
}
public Long getCarId() {
return carId;
}
public void setCarId(Long carId) {
this.carId = carId;
}
public List<ExtinguishantRequeset> getExtinguishants() {
return extinguishants;
}
public void setExtinguishants(List<ExtinguishantRequeset> extinguishants) {
this.extinguishants = extinguishants;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public Map<Long, StockDetail> getDetails() {
return details;
}
public void setDetails(Map<Long, StockDetail> details) {
this.details = details;
}
public Set<Long> getStockDetailIds() {
return stockDetailIds;
}
public void setStockDetailIds(Set<Long> stockDetailIds) {
this.stockDetailIds = stockDetailIds;
}
public void addStockDetailId(Long id) {
stockDetailIds.add(id);
}
public String getLoadingId() {
return loadingId;
}
public void setLoadingId(String loadingId) {
this.loadingId = loadingId;
}
}
@Override
public void loadingEquipment(OnBoardEquipment equipment, AgencyUserModel user) {
List<Equip> eqs = generate(equipment);
try {
eqs.forEach(eq -> {
StockDetail detail = getEligibleStockDetail(eq);
if (null == detail) {
throw new RuntimeException("二维码为【" + eq.getQrCode() + "】的装备库存量不足!");
}
updateStockDetail(detail, equipment.getType(), null, null);
loading(detail, eq);
generateJournal(detail, eq, equipment.getType(), user, null);
});
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
private void loading(StockDetail detail, Equip eq) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("qr_code", detail.getQrCode());
EquipmentSpecific equipmentSpecific = equipmentSpecificMapper.selectOne(queryWrapper);
EquipmentOnCar equipmentOnCar = new EquipmentOnCar();
equipmentOnCar.setCarId(eq.getCarId());
equipmentOnCar.setStockDetailId(detail.getId());
equipmentOnCar.setAmount(eq.getAmount());
equipmentOnCar.setEquipmentDetailId(eq.getEquipmentDetailId());
if (equipmentSpecific != null) {
equipmentOnCar.setEquipmentSpecificId(equipmentSpecific.getId());
}
equipmentOnCarMapper.insert(equipmentOnCar);
}
private void loading(StockDetail detail, Equip eq) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("qr_code", detail.getQrCode());
EquipmentSpecific equipmentSpecific = equipmentSpecificMapper.selectOne(queryWrapper);
EquipmentOnCar equipmentOnCar = new EquipmentOnCar();
equipmentOnCar.setCarId(eq.getCarId());
equipmentOnCar.setStockDetailId(detail.getId());
equipmentOnCar.setAmount(eq.getAmount());
equipmentOnCar.setEquipmentDetailId(eq.getEquipmentDetailId());
if (equipmentSpecific != null) {
equipmentOnCar.setEquipmentSpecificId(equipmentSpecific.getId());
}
equipmentOnCarMapper.insert(equipmentOnCar);
}
private void generateJournal(StockDetail detail, Equip eq, String type, AgencyUserModel user, Long shelfCellId) {
OnBoardEquipmentEnum typeEnum = OnBoardEquipmentEnum.getEnum(type);
......@@ -1380,7 +1074,7 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
if (!ObjectUtils.isEmpty(car.getIotCode())) {
Double monthTravel=0.0;
Double monthTravel = 0.0;
Double totalTravel = 0.0;
String currentYearAndMonth = DateUtil.format(new Date(), "yyyy-MM");
LambdaQueryWrapper<WlCarMileage> wrapper = new LambdaQueryWrapper<WlCarMileage>();
......@@ -1389,18 +1083,18 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
wrapper.isNotNull(WlCarMileage::getEndTime);
wrapper.isNotNull(WlCarMileage::getStartTime);
// .ge("travel", 0.5)
List<WlCarMileage> list = iWlCarMileageService.list(wrapper);
List<WlCarMileage> list = iWlCarMileageService.list(wrapper);
for (WlCarMileage wl : list) {
//判断当前车辆全程是否异常,如果时速小于阈值 则对数据进行返回 否则不予返回
if (!ObjectUtils.isEmpty(wl.getTakeTime()) && !ObjectUtils.isEmpty(wl.getTravel()) && ((wl.getTravel() / (wl.getTakeTime() / 3600000.0)) < CAR_MAX_SPEED)) {
if (!ObjectUtils.isEmpty(wl.getTakeTime()) && !ObjectUtils.isEmpty(wl.getTravel()) && ((wl.getTravel() / (wl.getTakeTime() / 3600000.0)) < CAR_MAX_SPEED)) {
totalTravel += wl.getTravel();
if(DateUtil.format(wl.getStartTime(),"yyyy-MM").equals(currentYearAndMonth)){
if (DateUtil.format(wl.getStartTime(), "yyyy-MM").equals(currentYearAndMonth)) {
monthTravel += wl.getTravel();
}
}
}
car.setTotalTravel(Double.valueOf(String.format("%.1f",totalTravel)));
car.setMonthTravel(Double.valueOf(String.format("%.1f",monthTravel)));
car.setTotalTravel(Double.valueOf(String.format("%.1f", totalTravel)));
car.setMonthTravel(Double.valueOf(String.format("%.1f", monthTravel)));
WlCarMileage last = iWlCarMileageService
.getOne(new LambdaQueryWrapper<WlCarMileage>().eq(WlCarMileage::getIotCode, car.getIotCode())
.orderByDesc(WlCarMileage::getEndTime).last("limit 1"));
......@@ -1607,7 +1301,6 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
return carMapper.getCarStateInfoByCarNum(carNum);
}
@Override
public CarForUE4VO getCarDetailByCarNumToThreeDimensional(Long carId, String orgCode) {
CarForUE4VO carForUE4VO = new CarForUE4VO();
......@@ -1641,7 +1334,6 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
return carForUE4VO;
}
@Override
public Page<CarInfoDto> equipmentCarList(Page<CarInfoDto> pag, Long teamId, String name, String code, Long id, Boolean isNo) {
......@@ -1749,14 +1441,12 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
return page;
}
@Override
public List<Car> location() {
List<Car> list = this.list();
return list;
}
@Override
public Map<String, Integer> getCountOfCar() {
Map<String, Integer> map = new HashMap<>();
......@@ -1788,7 +1478,7 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public Page<CarEquipStateInfoDto> getCarEquipStateInfo() {
public Page<CarEquipStateInfoDto> getCarEquipStateInfo(String keyWord) {
// BasicTableDataDto basicTableDataDto = new BasicTableDataDto();
// List<ColModel> colModels = new ArrayList<>();
// colModels.add(new ColModel("carNum","车牌号"));
......@@ -1796,19 +1486,39 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
// colModels.add(new ColModel("equipState","设备状态"));
// colModels.add(new ColModel("extra2","设备电量"));
Page<CarEquipStateInfoDto> page = new Page<>();
List<CarEquipStateInfoDto> list = carMapper.getCarEquipStateInfo();
if (list.size() > 0) {
list.forEach(carEquipStateInfoDto -> {
if (carEquipStateInfoDto.getExtra2() != null) {
carEquipStateInfoDto.setEquipState("开机");
carEquipStateInfoDto.setExtra2(carEquipStateInfoDto.getExtra2() + "%");
} else {
carEquipStateInfoDto.setEquipState("关机");
carEquipStateInfoDto.setExtra2("未上报");
}
});
List<CarEquipStateInfoDto> result = new ArrayList<>();
List<Car> list = this.list();
if (StringUtils.isNotEmpty(keyWord)) {
list = list.stream().filter(car -> car.getBizOrgName().contains(keyWord)).collect(Collectors.toList());
}
page.setRecords(list);
list = list.stream().sorted(Comparator.comparing(Car::getExtra2, Comparator.comparingDouble(Double::valueOf)).reversed()).collect(Collectors.toList());
for (int i = 0; i < list.size(); i++) {
Car car = list.get(i);
CarEquipStateInfoDto carEquipStateInfoDto = new CarEquipStateInfoDto();
carEquipStateInfoDto.setCarNum(car.getCarNum());
carEquipStateInfoDto.setBizOrgName(car.getBizOrgName());
if (car.getExtra2() != null) {
carEquipStateInfoDto.setEquipState("开机");
carEquipStateInfoDto.setExtra2(car.getExtra2() + "%");
} else {
carEquipStateInfoDto.setEquipState("关机");
carEquipStateInfoDto.setExtra2("未上报");
}
result.add(carEquipStateInfoDto);
}
// List<CarEquipStateInfoDto> list = carMapper.getCarEquipStateInfo();
//// if (list.size() > 0) {
//// list.forEach(carEquipStateInfoDto -> {
//// if (carEquipStateInfoDto.getExtra2() != null) {
//// carEquipStateInfoDto.setEquipState("开机");
//// carEquipStateInfoDto.setExtra2(carEquipStateInfoDto.getExtra2() + "%");
//// } else {
//// carEquipStateInfoDto.setEquipState("关机");
//// carEquipStateInfoDto.setExtra2("未上报");
//// }
//// });
//// }
page.setRecords(result);
page.setTotal(list.size());
page.setCurrent(1);
page.setSize(10);
......@@ -1820,14 +1530,21 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto() {
public Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto(String keyWord) {
Page<CarEquipAlarmInfoDto> page = new Page<>();
List<CarEquipAlarmInfoDto> list = carMapper.getCarEquipAlarmInfo(carEquipAlarmBatteryNumber);
List<Car> list = this.list().stream().filter(car -> Integer.valueOf(car.getExtra2()) < carEquipAlarmBatteryNumber).collect(Collectors.toList());
if (StringUtils.isNotEmpty(keyWord)) {
list = list.stream().filter(car -> car.getBizOrgName().contains(keyWord)).collect(Collectors.toList());
}
List<CarEquipAlarmInfoDto> carEquipAlarmInfoDtoList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
list.get(i).setNo(i+1);
list.get(i).setAlarmMessage("该设备电量低于"+carEquipAlarmBatteryNumber+"%!");
CarEquipAlarmInfoDto carEquipAlarmInfoDto = new CarEquipAlarmInfoDto();
carEquipAlarmInfoDto.setCarNum(list.get(i).getCarNum());
carEquipAlarmInfoDto.setNo(i + 1);
carEquipAlarmInfoDto.setAlarmMessage("该设备电量低于" + carEquipAlarmBatteryNumber + "%!");
carEquipAlarmInfoDtoList.add(carEquipAlarmInfoDto);
}
page.setRecords(list);
page.setRecords(carEquipAlarmInfoDtoList);
page.setTotal(list.size());
page.setCurrent(1);
page.setSize(10);
......@@ -1856,26 +1573,26 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public Page<CarAreaInfoDto> getCarAreaInfo( String areaName) {
public Page<CarAreaInfoDto> getCarAreaInfo(String areaName) {
Page<CarAreaInfoDto> page = new Page<>();
List<CarAreaInfoDto> list = new ArrayList<>();
CompanyModel companyModelArea= Privilege.companyClient.queryByCompanyName(areaName).getResult();
if(companyModelArea!=null){
FeignClientResult<java.util.Collection<CompanyModel>> de = Privilege.companyClient.querySubAgencyTree(companyModelArea.getSequenceNbr());
//如果是公司则获取所有片区
ArrayList<CompanyModel> companyModels = (ArrayList<CompanyModel>) de.getResult();
if (companyModels.size() >0 ) {
for (int i = 0; i < companyModels.size(); i++) {
CompanyModel companyModel = companyModels.get(i);
CarAreaInfoDto carAreaInfoDto = new CarAreaInfoDto();
Integer count = this.count(new QueryWrapper<Car>().like("biz_org_code", companyModel.getOrgCode()));
carAreaInfoDto.setNo(i+1);
carAreaInfoDto.setName(companyModel.getCompanyName());
carAreaInfoDto.setCountOfCar(count);
list.add(carAreaInfoDto);
}
}
}
CompanyModel companyModelArea = Privilege.companyClient.queryByCompanyName(areaName).getResult();
if (companyModelArea != null) {
FeignClientResult<java.util.Collection<CompanyModel>> de = Privilege.companyClient.querySubAgencyTree(companyModelArea.getSequenceNbr());
//如果是公司则获取所有片区
ArrayList<CompanyModel> companyModels = (ArrayList<CompanyModel>) de.getResult();
if (companyModels.size() > 0) {
for (int i = 0; i < companyModels.size(); i++) {
CompanyModel companyModel = companyModels.get(i);
CarAreaInfoDto carAreaInfoDto = new CarAreaInfoDto();
Integer count = this.count(new QueryWrapper<Car>().like("biz_org_code", companyModel.getOrgCode()));
carAreaInfoDto.setNo(i + 1);
carAreaInfoDto.setName(companyModel.getCompanyName());
carAreaInfoDto.setCountOfCar(count);
list.add(carAreaInfoDto);
}
}
}
page.setRecords(list);
page.setTotal(list.size());
page.setCurrent(1);
......@@ -1884,48 +1601,59 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public BasicTableDataDto getCarMileageInfoByMoth(String date,Integer current,Integer pageSize) {
public BasicTableDataDto getCarMileageInfoByMoth(String date, Integer current, Integer pageSize, String keyWord) {
BasicTableDataDto basicTableDataDto = new BasicTableDataDto();
List<ColModel> colModels = new ArrayList<>();
colModels.add(new ColModel("carNum","车牌号"));
colModels.add(new ColModel("carCode","编号"));
colModels.add(new ColModel("total","当月里程"));
colModels.add(new ColModel("carNum", "车牌号"));
colModels.add(new ColModel("carCode", "编号"));
colModels.add(new ColModel("bizOrgName", "所属单位"));
colModels.add(new ColModel("total", "当月里程"));
List<MileageDto> mileageDtoList = new ArrayList<>();
List<Car> list = this.list();
if (StringUtils.isNotEmpty(keyWord)) {
list = list.stream().filter(car -> car.getBizOrgName().contains(keyWord)).collect(Collectors.toList());
}
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
MileageDto mileageDto = new MileageDto();
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(date, list.get(i).getIotCode());
mileageDto.setCarNum(list.get(i).getCarNum());
mileageDto.setCarCode(list.get(i).getRemark());
mileageDto.setIotCode(date + "::" + list.get(i).getIotCode());
Car car = list.get(i);
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(date, car.getIotCode());
mileageDto.setCarNum(car.getCarNum());
mileageDto.setCarCode(car.getRemark());
mileageDto.setBizOrgName(car.getBizOrgName());
mileageDto.setIotCode(date + "::" + car.getIotCode());
if (totalTravel != null) {
// mileageDto.setTotalTravel((totalTravel / carMaxTravel) * 100);
mileageDto.setTotalTravel(totalTravel);
} else {
totalTravel= 0.0;
totalTravel = 0.0;
mileageDto.setTotalTravel(totalTravel);
}
mileageDto.setTotal(String.format("%.1f",totalTravel)+"KM");
mileageDto.setTotal(String.format("%.1f", totalTravel) + "KM");
mileageDtoList.add(mileageDto);
}
}
mileageDtoList = mileageDtoList.stream().sorted(Comparator.comparing(MileageDto::getTotalTravel).reversed()).collect(Collectors.toList());
DataGridMock mypageDto=new DataGridMock(current,mileageDtoList.size(),true,current,mileageDtoList.subList((current-1)*pageSize,current*pageSize));
Integer from = (current - 1) * pageSize > mileageDtoList.size() ? mileageDtoList.size() : (current - 1) * pageSize;
Integer to = current * pageSize > mileageDtoList.size() ? mileageDtoList.size() : current * pageSize;
DataGridMock mypageDto = new DataGridMock(current, mileageDtoList.size(), true, current, mileageDtoList.subList(from, to));
basicTableDataDto.setDataGridMock(mypageDto);
basicTableDataDto.setColModel(colModels);
return basicTableDataDto;
}
@Override
public List<CarExportDto> exportCarMileageInfoByMoth(String date) {
public List<CarExportDto> exportCarMileageInfoByMoth(String date, String keyWord) {
List<CarExportDto> carExportDtos = new ArrayList<>();
List<Car> list = this.list();
if (StringUtils.isNotEmpty(keyWord)) {
list = list.stream().filter(car -> car.getBizOrgName().contains(keyWord)).collect(Collectors.toList());
}
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
CarExportDto carExportDto = new CarExportDto();
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(date, list.get(i).getIotCode());
Car car = list.get(i);
Car car = list.get(i);
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(date, car.getIotCode());
carExportDto.setCode(car.getRemark());
carExportDto.setCarNumber(car.getCarNum());
carExportDto.setDriver(car.getDriver());
......@@ -1933,21 +1661,23 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
carExportDto.setOrgName(car.getBizOrgName());
carExportDto.setStandard(car.getStandard());
carExportDto.setDisplacement(car.getDisplacement());
if(totalTravel!=null){
carExportDto.setTotalTravel(String.valueOf(totalTravel));
}else {
carExportDto.setTotalTravel("0");
if (totalTravel != null) {
carExportDto.setTotalTravel(String.format("%.1f", totalTravel) + "KM");
carExportDto.setTotalTravelValue(String.format("%.1f", totalTravel));
} else {
carExportDto.setTotalTravel("0KM");
carExportDto.setTotalTravelValue("0.0");
}
carExportDtos.add(carExportDto);
}
}
Collections.sort(carExportDtos,(e1,e2)->Double.valueOf(e2.getTotalTravel()).compareTo(Double.valueOf(e1.getTotalTravel())));
Collections.sort(carExportDtos, (e1, e2) -> Double.valueOf(e2.getTotalTravelValue()).compareTo(Double.valueOf(e1.getTotalTravelValue())));
return carExportDtos;
}
@Override
public ZZChartsDto getCarMileageInfoByMothOFDay(String iotCode) {
ZZChartsDto zzChartsDto = new ZZChartsDto();
ZZChartsDto zzChartsDto = new ZZChartsDto();
//X轴数据
List<String> x = new ArrayList<>();
// Y轴数据
......@@ -1959,10 +1689,10 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
calendar.set(Calendar.YEAR, Integer.parseInt(dates[0]));
calendar.set(Calendar.MONTH, Integer.parseInt(dates[1]));
for (int i = 0; i < calendar.getActualMaximum(Calendar.DATE); i++) {
String dateStr = i < 9 ? dates[1]+ "-0" + (i + 1) : dates[1] + "-" + (i + 1);
String dateStr = i < 9 ? dates[1] + "-0" + (i + 1) : dates[1] + "-" + (i + 1);
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(dateStr, datas[1]);
if (totalTravel == null) {
totalTravel = 0.0;
totalTravel = 0.0;
}
x.add(dateStr);
y.add(totalTravel);
......@@ -1973,21 +1703,25 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public Page<CarExceptionDto> getCarExcepitonTrack(Integer type) {
public Page<CarExceptionDto> getCarExcepitonTrack(Integer type, String keyWord) {
Page<CarExceptionDto> page = new Page<>();
List<CarExceptionDto> carExceptionDtos = new ArrayList<>();
LocalDate localDate = LocalDate.now(ZoneId.of("+8"));
String startDate = localDate.plusDays(-1).toString();
String endDate = localDate.plusDays((0- type)).toString();
String endDate = localDate.plusDays((0 - type)).toString();
List<Car> list = this.list();
if (StringUtils.isNotEmpty(keyWord)) {
list = list.stream().filter(car -> car.getBizOrgName().contains(keyWord)).collect(Collectors.toList());
}
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
CarExceptionDto carExceptionDto = new CarExceptionDto();
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDateProd(startDate,endDate,list.get(i).getIotCode());
if (!(totalTravel != null && totalTravel> 0.0)) {
carExceptionDto.setCarId(String.valueOf(list.get(i).getId()));
carExceptionDto.setCarNumber(list.get(i).getCarNum());
carExceptionDto.setBelongStation(list.get(i).getBizOrgName());
Car car = list.get(i);
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDateProd(startDate, endDate, list.get(i).getIotCode());
if (!(totalTravel != null && totalTravel > 0.0)) {
carExceptionDto.setCarId(String.valueOf(car.getId()));
carExceptionDto.setCarNumber(car.getCarNum());
carExceptionDto.setBelongStation(car.getBizOrgName());
carExceptionDtos.add(carExceptionDto);
}
}
......@@ -2000,6 +1734,41 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public Page<CarSpeedWarningRecord> getCarWarningRecord(String keyWord) {
Page<CarSpeedWarningRecord> carSpeedWarningRecordPage = new Page<>();
Date date = new Date();
String endTime = DateUtil.format(date, DatePattern.NORM_DATETIME_FORMAT);
date = DateUtil.offsetDay(date, -15);
String startTime = DateUtil.format(date, DatePattern.NORM_DATETIME_FORMAT);
List<CarSpeedWarningRecord> list = wlCarSpeedWaringRecordMapper.selectList(new QueryWrapper<CarSpeedWarningRecord>().ge("waring_date", startTime).le("waring_date", endTime));
if (StringUtils.isNotEmpty(keyWord)) {
list = list.stream().filter(carSpeedWarningRecord -> carSpeedWarningRecord.getBizOrgName().contains(keyWord) || carSpeedWarningRecord.getOwnership().contains(keyWord)).collect(Collectors.toList());
}
Collections.sort(list, (e1, e2) -> e2.getOverSpeed().compareTo(e1.getOverSpeed()));
carSpeedWarningRecordPage.setRecords(list);
carSpeedWarningRecordPage.setTotal(list.size());
carSpeedWarningRecordPage.setSize(1);
carSpeedWarningRecordPage.setCurrent(1);
return carSpeedWarningRecordPage;
}
@Override
public List<Map<String, String>> getBizOrgName() {
List<Map<String, String>> result = new ArrayList<>();
List<Car> cars = this.list(new QueryWrapper<Car>().groupBy("biz_org_name"));
List<String> orgNames = cars.stream().map(car -> car.getBizOrgName()).collect(Collectors.toList());
Comparator comparator = Collator.getInstance(Locale.CHINA);
Collections.sort(orgNames, (p1, p2) -> comparator.compare(p1, p2));
for (int i = 0; i < orgNames.size(); i++) {
Map<String, String> item = new HashMap<>();
item.put("text", orgNames.get(i));
item.put("value", orgNames.get(i));
result.add(item);
}
return result;
}
@Override
public List<Map<String, String>> updateCarStartStatus() {
return carPropertyMapper.selectIndexByTime(CAR_START_INDEX_KEY);
}
......@@ -2011,4 +1780,298 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
carMapper.updateStatusByIds(carIds, status);
}
}
class LossParams {
private Long carId;
private Long lossStateId;
private List<ExtinguishantLossRequest> extinguishants;
private Car car;
private Map<Long, StockDetail> details;
private List<ExtinguishantOnCar> extinguishantOnCar;
/**
* 记录明细账id,用户更新搜索
*/
private Set<Long> stockDetailIds;
/**
* 损耗单
*/
private WastageBill bill;
public LossParams(Long carId, List<ExtinguishantLossRequest> extinguishants) {
this.carId = carId;
this.extinguishants = extinguishants;
setStockDetailIds(new HashSet<>());
}
public StockDetail getDetailById(Long id) {
return details.get(id);
}
public Long getCarId() {
return carId;
}
public void setCarId(Long carId) {
this.carId = carId;
}
public List<ExtinguishantLossRequest> getExtinguishants() {
return extinguishants;
}
public void setExtinguishants(List<ExtinguishantLossRequest> extinguishants) {
this.extinguishants = extinguishants;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public Map<Long, StockDetail> getDetails() {
return details;
}
public void setDetails(Map<Long, StockDetail> details) {
this.details = details;
}
public List<ExtinguishantOnCar> getExtinguishantOnCar() {
return extinguishantOnCar;
}
public void setExtinguishantOnCar(List<ExtinguishantOnCar> extinguishantOnCar) {
this.extinguishantOnCar = extinguishantOnCar;
}
public WastageBill getBill() {
return bill;
}
public void setBill(WastageBill bill) {
this.bill = bill;
}
private Double equalLossCountHandler(ExtinguishantOnCar ex, Double lossCount) throws Exception {
try {
StockDetail stockDetail = getDetailById(ex.getStockDetailId());
stockDetail.setStatus(EquipStatusEnum.LOSS.getCode().toString());
stockDetail.setId(null);
stockDetailMapper.insert(stockDetail);
addStockDetailId(stockDetail.getId());
// 查询库存
Stock stock = stockMapper.selectById(stockDetail.getStockId());
stock.setAmount(stock.getAmount() - lossCount);
stockMapper.updateById(stock);
// 删除
extinguishantOnCarMapper.deleteById(ex.getId());
// 损耗清单详情
WastageBillDetail detail = new WastageBillDetail();
detail.setAmount(BigDecimal.valueOf(lossCount));
detail.setStockDetailId(stockDetail.getId());
detail.setWastageBillId(bill.getId());
wastageBillDetailMapper.insert(detail);
journalMapper.insert(createJournal(ex, stockDetail.getId(), null));
return 0d;
} catch (Exception e) {
throw e;
}
}
private Double greaterThanLossCountHandler(ExtinguishantOnCar ex, Double lossCount) throws Exception {
try {
StockDetail stockDetail = getDetailById(ex.getStockDetailId());
if (stockDetail == null) {
return 0d;
}
stockDetail.setAmount(stockDetail.getAmount() - lossCount);
stockDetailMapper.updateById(stockDetail);
addStockDetailId(stockDetail.getId());
StockDetail stockDetailClone = new StockDetail();
BeanUtils.copyProperties(stockDetail, stockDetailClone);
stockDetailClone.setId(null);
stockDetailClone.setAmount(lossCount);
stockDetailClone.setStatus(EquipStatusEnum.LOSS.getCode().toString());
stockDetailMapper.insert(stockDetailClone);
addStockDetailId(stockDetailClone.getId());
Stock stock = stockMapper.selectById(stockDetail.getStockId());
stock.setAmount(stock.getAmount() - lossCount);
stockMapper.updateById(stock);
ex.setAmount(ex.getAmount() - lossCount);
extinguishantOnCarMapper.updateById(ex);
// 损耗清单详情
WastageBillDetail detail = new WastageBillDetail();
detail.setAmount(BigDecimal.valueOf(lossCount));
detail.setStockDetailId(stockDetailClone.getId());
detail.setWastageBillId(bill.getId());
wastageBillDetailMapper.insert(detail);
journalMapper.insert(createJournal(ex, stockDetailClone.getId(), lossCount));
return 0d;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
public Journal createJournal(ExtinguishantOnCar e, Long stockDetailId, Double amount) {
Journal journal = new Journal();
Double lossAmount = (null != amount) ? amount : e.getAmount();
Long lossStockDetailId = (null != stockDetailId) ? stockDetailId : e.getStockDetailId();
journal.setAmount(lossAmount);
journal.setCarId(getCarId());
journal.setEquipmentDetailId(e.getEquipmentDetailId());
journal.setUserId(Long.valueOf(getUser().getUserId()));
// 查询EquipmentDetail
EquipmentDetail equipmentDetail = equipmentDetailMapper
.selectById(getDetailById(e.getStockDetailId()).getEquipmentDetailId());
Equipment equipment = iEquipmentService.getById(equipmentDetail.getEquipmentId());
Unit unit = unitMapper.selectById(equipment.getUnitId());
journal.setRemark(String.format("【%s】在车牌号为【%s】的车辆上,损耗了【%.2f】%s【%s】", getUser().getRealName(),
getCar().getCarNum(), lossAmount, unit.getName(), equipmentDetail.getName()));
journal.setOrgCode(getCar().getOrgCode());
journal.setStockDetailId(lossStockDetailId);
journal.setState(getLossStateId().toString());
return journal;
}
public Set<Long> getStockDetailIds() {
return stockDetailIds;
}
public void setStockDetailIds(Set<Long> stockDetailIds) {
this.stockDetailIds = stockDetailIds;
}
public void addStockDetailId(Long id) {
stockDetailIds.add(id);
}
public Long getLossStateId() {
return lossStateId;
}
public void setLossStateId(Long lossStateId) {
this.lossStateId = lossStateId;
}
}
class LoadingParams {
private Long carId;
private String loadingId;
private List<ExtinguishantRequeset> extinguishants;
private Car car;
private Map<Long, StockDetail> details;
private Set<Long> stockDetailIds;
public LoadingParams(Long carId, List<ExtinguishantRequeset> extinguishants) {
this.carId = carId;
this.extinguishants = extinguishants;
setStockDetailIds(new HashSet<>());
}
public ExtinguishantOnCar create(ExtinguishantRequeset r, StockDetail detail) {
ExtinguishantOnCar extinguishantOnCar = new ExtinguishantOnCar();
extinguishantOnCar.setCarId(carId);
extinguishantOnCar.setAmount(r.getAmount());
extinguishantOnCar.setStockDetailId(detail.getId());
extinguishantOnCar.setEquipmentDetailId(getDetailById(r.getStockDetailId()).getEquipmentDetailId());
return extinguishantOnCar;
}
public Journal createJournal(ExtinguishantRequeset r, Long stockDetailId) {
// 查询EquipmentDetail
EquipmentDetail equipmentDetail = equipmentDetailMapper
.selectById(getDetailById(r.getStockDetailId()).getEquipmentDetailId());
Equipment equipment = iEquipmentService.getById(equipmentDetail.getEquipmentId());
Unit unit = unitMapper.selectById(equipment.getUnitId());
Journal journal = new Journal();
journal.setAmount(r.getAmount());
journal.setCarId(getCarId());
journal.setEquipmentDetailId(getDetailById(r.getStockDetailId()).getEquipmentDetailId());
journal.setUserId(Long.valueOf(getUser().getUserId()));
journal.setWarehouseStructureId(getDetailById(r.getStockDetailId()).getWarehouseStructureId());
journal.setRemark(String.format("【%s】向车牌号为【%s】的车辆上,装载了【%.2f】%s【%s】", getUser().getRealName(),
getCar().getCarNum(), r.getAmount(), unit.getName(), equipmentDetail.getName()));
journal.setOrgCode(getCar().getOrgCode());
journal.setStockDetailId(stockDetailId);
journal.setState(getLoadingId());
return journal;
}
public StockDetail getDetailById(Long id) {
return details.get(id);
}
public Long getCarId() {
return carId;
}
public void setCarId(Long carId) {
this.carId = carId;
}
public List<ExtinguishantRequeset> getExtinguishants() {
return extinguishants;
}
public void setExtinguishants(List<ExtinguishantRequeset> extinguishants) {
this.extinguishants = extinguishants;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public Map<Long, StockDetail> getDetails() {
return details;
}
public void setDetails(Map<Long, StockDetail> details) {
this.details = details;
}
public Set<Long> getStockDetailIds() {
return stockDetailIds;
}
public void setStockDetailIds(Set<Long> stockDetailIds) {
this.stockDetailIds = stockDetailIds;
}
public void addStockDetailId(Long id) {
stockDetailIds.add(id);
}
public String getLoadingId() {
return loadingId;
}
public void setLoadingId(String loadingId) {
this.loadingId = loadingId;
}
}
}
......@@ -202,6 +202,8 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
private long redisExpireTime;
@Value("${systemctl.sync.switch}")
private Boolean syncSwitch;
@Value("${dcs.send.message}")
private Boolean NRMsgSend;
@Value("${systemctl.amos.switch}")
private Boolean amosSwitch;
@Value("${isSendApp}")
......@@ -1864,7 +1866,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
}
// 向南瑞平台推送报警消息
if (!bool) {
if (!bool && NRMsgSend) {
syncDataService.syncCreatedSendAlarm(equipmentAlarmLogs);
}
}
......
......@@ -25,15 +25,12 @@ spring.security.user.name=admin
spring.security.user.password=a1234560
security.productApp=STUDIO_APP_MOBILE
amos.system.user.user-name=fas_system
amos.system.user.password=a1234560
amos.system.user.app-key=studio_normalapp_3056965
amos.system.user.product=STUDIO_APP_WEB
#redis
#redis
spring.redis.database=1
spring.redis.host=172.16.10.220
spring.redis.port=6379
......@@ -55,88 +52,96 @@ mqtt.client.product.id=mqtt
mqtt.topic=topic_mqtt
spring.mqtt.completionTimeout=3000
#定时任务
##物联报表定时任务
#\u5B9A\u65F6\u4EFB\u52A1
##\u7269\u8054\u62A5\u8868\u5B9A\u65F6\u4EFB\u52A1
jobs.month.cron = 0 50 0 1 * ?
jobs.day.cron = 0 5 0 * * ?
jobs.week.cron = 0 25 0 ? * 1
jobs.day.cron.old = 0 25 0 * * ?
# 定时更新车辆二维码
# \u5B9A\u65F6\u66F4\u65B0\u8F66\u8F86\u4E8C\u7EF4\u7801
update.car.qrCode=0 01 00 * * ?
#数据同步开关
#\u6570\u636E\u540C\u6B65\u5F00\u5173
systemctl.sync.switch=false
#数据JCS开关
#\u6570\u636EJCS\u5F00\u5173
systemctl.jcs.switch=false
#平台数据开关
#\u5E73\u53F0\u6570\u636E\u5F00\u5173
systemctl.amos.switch=false
isSendApp=false
#报表数据地址
#\u62A5\u8868\u6570\u636E\u5730\u5740
equip.report.url=/fire-fighting-system/ureport/preview?_u=file:
#数字化南瑞平台接口
#\u6570\u5B57\u5316\u5357\u745E\u5E73\u53F0\u63A5\u53E3
dcs.send.message=true
dcs.client-id=fire_system
dcs.grant-type=client_credentials
dcs.scope=all
dcs.token-key=dcs_token_key
dcs.client.secret=fire_system
dcs.x.hw.id=io.cs
dcs.x.hw.appKey=i!YmnHgJ=Ysz8V+O@ZG237inQKfixkQ.-#-P3IlR8fO%.#F!g%35Z#@tp$6G+52v
dcs.url.token=http://198.87.103.158:8001/auth-service/oauth/token
dcs.url.sendalarm=http://198.87.103.158:8001/alarm-service/appalarm/sendalarm
#系统上线时间
#\u7CFB\u7EDF\u4E0A\u7EBF\u65F6\u95F4
param.system.online.date = 2019-02-12
# 视频转码服务开关 hls(关)/flv(开),默认关闭,数字换流站使用时开启
# \u89C6\u9891\u8F6C\u7801\u670D\u52A1\u5F00\u5173 hls(\u5173)/flv(\u5F00),\u9ED8\u8BA4\u5173\u95ED\uFF0C\u6570\u5B57\u6362\u6D41\u7AD9\u4F7F\u7528\u65F6\u5F00\u542F
window.vedioFormat = hls
window.vedioFormat.video = flv
# 航天视频服务地址
# \u822A\u5929\u89C6\u9891\u670D\u52A1\u5730\u5740
param.htvideo.url=http://192.168.4.174:9001;
# 南瑞视频转码服务地址
# \u5357\u745E\u89C6\u9891\u8F6C\u7801\u670D\u52A1\u5730\u5740
param.nrvideo.url=http://198.87.103.158:8001;
#南瑞视频平台通过视频id获取flv格式视频播放地址
#\u5357\u745E\u89C6\u9891\u5E73\u53F0\u901A\u8FC7\u89C6\u9891id\u83B7\u53D6flv\u683C\u5F0F\u89C6\u9891\u64AD\u653E\u5730\u5740
param.nrflvbyvoideoid.url=http://192.168.4.159:10010/api/media/live
# 预案消防炮、消防泵设备维度类型
# \u9884\u6848\u6D88\u9632\u70AE\u3001\u6D88\u9632\u6CF5\u8BBE\u5907\u7EF4\u5EA6\u7C7B\u578B
equipment.plan.monitor=92030200,92032200
equipment.plan.pump=92010600,92030600,92130400,92140200,92150300
# 机场使用特殊配置iotCode前缀,装备、车辆及导入使用到
# 机场使用
# \u673A\u573A\u4F7F\u7528\u7279\u6B8A\u914D\u7F6EiotCode\u524D\u7F00\uFF0C\u88C5\u5907\u3001\u8F66\u8F86\u53CA\u5BFC\u5165\u4F7F\u7528\u5230
# \u673A\u573A\u4F7F\u7528
#iot.code.prefix.have.used=20210003,20210004,20210005
# 电力使用
# \u7535\u529B\u4F7F\u7528
iot.code.prefix.have.used=
#装备服务在接收到站端iot推送的装备数据后进行influxdb存库
#1.在装备接口消息处向influxdb/{productKey}/{deviceName} 消息地址推送数据,iot负责存库
#2.配置文件添加配置项开关,默认为关闭,该功能只使用于中心及系统
#是否向iot推送消息
#\u88C5\u5907\u670D\u52A1\u5728\u63A5\u6536\u5230\u7AD9\u7AEFiot\u63A8\u9001\u7684\u88C5\u5907\u6570\u636E\u540E\u8FDB\u884Cinfluxdb\u5B58\u5E93
#1.\u5728\u88C5\u5907\u63A5\u53E3\u6D88\u606F\u5904\u5411influxdb/{productKey}/{deviceName} \u6D88\u606F\u5730\u5740\u63A8\u9001\u6570\u636E\uFF0Ciot\u8D1F\u8D23\u5B58\u5E93
#2.\u914D\u7F6E\u6587\u4EF6\u6DFB\u52A0\u914D\u7F6E\u9879\u5F00\u5173\uFF0C\u9ED8\u8BA4\u4E3A\u5173\u95ED\uFF0C\u8BE5\u529F\u80FD\u53EA\u4F7F\u7528\u4E8E\u4E2D\u5FC3\u53CA\u7CFB\u7EDF
#\u662F\u5426\u5411iot\u63A8\u9001\u6D88\u606F
isSendIot=false
#报废前30日 发起提醒
#\u62A5\u5E9F\u524D30\u65E5 \u53D1\u8D77\u63D0\u9192
equipment.scrap.day=30
#提醒时间
#\u63D0\u9192\u65F6\u95F4
equipment.scrap.cron=0 0 9 * * ?
#?????????????
equipment.pressurepump.start.cron=0 0 0 * * ?
# 稳压泵启动信号
# \u7A33\u538B\u6CF5\u542F\u52A8\u4FE1\u53F7
equipment.pressurepump.start=FHS_PressurePump_Start
# 稳压泵管网压力信号
# \u7A33\u538B\u6CF5\u7BA1\u7F51\u538B\u529B\u4FE1\u53F7
equipment.pressurepump.pipepressure=FHS_PipePressureDetector_PipePressure
# 站端标识
# \u7AD9\u7AEF\u6807\u8BC6
state.code=GW190301
state.name=\u9526\u5c4f\u6362\u6d41\u7ad9
state.name=\u9526\u5C4F\u6362\u6D41\u7AD9
#用于总部系统与站端系统逻辑区分,站端写zd总部默认为空
#\u7528\u4E8E\u603B\u90E8\u7CFB\u7EDF\u4E0E\u7AD9\u7AEF\u7CFB\u7EDF\u903B\u8F91\u533A\u5206\uFF0C\u7AD9\u7AEF\u5199zd\u603B\u90E8\u9ED8\u8BA4\u4E3A\u7A7A
system.type=zd
# 是否开启遥测数据上报
# \u662F\u5426\u5F00\u542F\u9065\u6D4B\u6570\u636E\u4E0A\u62A5
is.open.telemetering=false
# 水池液位相关信号
# \u6C34\u6C60\u6DB2\u4F4D\u76F8\u5173\u4FE1\u53F7
water.level.indexKey=FHS_FirePoolDevice_WaterLevel,FHS_LevelDetector_WaterLevel,FHS_WirelessliquidDetector_WaterLevel,CAFS_FoamTank_FoamTankLevel,CAFS_WaterTank_WaterTankLevel
# 江西电建-车辆里程过滤参数(单位KM)
# \u6C5F\u897F\u7535\u5EFA-\u8F66\u8F86\u91CC\u7A0B\u8FC7\u6EE4\u53C2\u6570(\u5355\u4F4DKM)
mileage.parameter=0.5
# 江西电建-车辆里程跨天记录切分(每日0点执行)
# \u6C5F\u897F\u7535\u5EFA-\u8F66\u8F86\u91CC\u7A0B\u8DE8\u5929\u8BB0\u5F55\u5207\u5206(\u6BCF\u65E50\u70B9\u6267\u884C)
mileage.segmentation.cron=0 0 0 * * ?
mileage.clippingtime=600000
equip.car.alarmBattery= 10
......
......@@ -24,7 +24,7 @@ pagehelper.support-methods-arguments=true
spring.main.allow-bean-definition-overriding=true
#liquibase
spring.liquibase.change-log=classpath:/changelog/changelog-master.xml
spring.liquibase.enabled=false
spring.liquibase.enabled=true
#\u4E0A\u4F20\u6587\u4EF6\u8BBE\u7F6E
spring.servlet.multipart.maxFileSize=100MB
......@@ -95,17 +95,9 @@ firefightingsystem.detail.url=${server.servlet.context-path}/fire-fighting-syste
firefightingsystem.equip.alarms.url=${server.servlet.context-path}/fire-fighting-system/getEquipmentAlarmBySystemIdOrSourceIdVO
building.detail=${server.servlet.context-path}/building/findByInstanceId
building.floor.detail=${server.servlet.context-path}/building/getBuildDetaliByFloorId?instanceId=
dcs.client-id=fire_system
dcs.grant-type=client_credentials
dcs.scope=all
dcs.token-key=dcs_token_key
dcs.client.secret=fire_system
dcs.x.hw.id=NR_REST_APP
dcs.x.hw.appKey=s+YkvQhwilx91TRJHhNDmw==
# \u6545\u969C\u544A\u8B66/\u6D88\u9632\u544A\u8B66/\u8DD1\u9A6C\u706F\u6743\u9650\u6807\u8BC6 true \u673A\u573A / false \u7535\u529B
equip.enabled =false
#es\u50A8\u5B58\u7269\u8054\u65E5\u5FD7\u662F\u5426\u5220\u9664\u5F00\u5173
es.ESEquiplistSpecific.flag= true
#es\u50A8\u5B58\u6570\u636E\u65F6\u95F4\u5E74
......@@ -120,9 +112,6 @@ spring.elasticsearch.rest.uris=http://${biz.elasticsearch.address}:9200
elasticsearch.username= elastic
elasticsearch.password= Yeejoin@2020
# \u6743\u9650\u6807\u8BC6-\u7269\u8054\u533A\u57DF
auth-key-area=area_info
# \u6743\u9650\u6807\u8BC6-\u6D88\u9632\u7CFB\u7EDF
......@@ -161,7 +150,7 @@ spring.security.user.password=a1234560
stationCode=LSHLZ1bZAJU645Pgl7
##\u4EE3\u7801\u4E2D\u6709\u90E8\u5206\u903B\u8F91\u51B2\u7A81\u9700\u8981\u5904\u7406 \u4E3A\u533A\u5206\u673A\u573A\u548C\u7535\u529B\u903B\u8F91 \u589E\u52A0\u5F00\u5173 \u82E5\u4E3Atrue \u5219\u4E3A\u673A\u573A\u903B\u8F91 \u4E3Afalse \u5219\u4E3A\u7535\u529B\u903B\u8F91
logic=false
#电站对接第三方查询设备kks码
#\uFFFD\uFFFD\u057E\uFFFD\u053D\u04F5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u046F\uFFFD\u8C78kks\uFFFD\uFFFD
power.station.url=http://139.9.169.123:5024/process/DataInterface
#电站104采集预警
#\uFFFD\uFFFD\u057E104\uFFFD\u027C\uFFFD\u0524\uFFFD\uFFFD
power.station.warning=104/data/analysis
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment