Commit c5634561 authored by duanruiming's avatar duanruiming

[update] 海康下发日期优化

parent 88b89f8f
......@@ -21,10 +21,10 @@ public class DownloadScheduleDTO {
@Setter
@Getter
public static class Schedule {
private Integer scheduleNo;
private Integer scheduleId;
private Integer isPeriod;
private List<String> dates;
private List<String> weeks;
private List<Integer> weeks;
private Integer planNo;
}
}
......@@ -14,6 +14,9 @@ public class CrossSchedulesPO {
/** 日期ID */
@ApiModelProperty(value = "日期ID",notes = "")
private Integer id ;
/** 日期编号 */
@ApiModelProperty(value = "日期编号",notes = "")
private Integer scheduleNo ;
/** 日期名称 */
@ApiModelProperty(value = "日期名称",notes = "")
private String name ;
......
package net.wanji.utc.po.hk.response;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/02/15 16:45
*/
@Data
public class DatePO {
/**
* 若获取到为0, 标识每年
*/
private int year;
private int month;
private List<Integer> days;
}
......@@ -8,7 +8,8 @@ import lombok.Data;
*/
@Data
public class HKResponse {
private String code;
private Integer code;
private String msg;
private Integer type;
private Object data;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/02/15 17:28
*/
@Data
public class ScheduleResponseListPO {
private String crossCode;
private List<ScheduleResponsePO> schedules;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/02/15 16:43
*/
@Data
public class ScheduleResponsePO {
/**
* 日期id
*/
private Integer id;
private String desc;
/**
* 计划号
*/
private Integer planNo;
/**
* 周
*/
private List<Integer> weeks;
/**
* 特殊日
*/
private List<DatePO> dates;
}
......@@ -188,6 +188,7 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
schedulesPO.setName("工作日");
}
schedulesPO.setCrossId(scheduleSendVO.getCrossCode());
schedulesPO.setScheduleNo(schedule.getScheduleId());
schedulesPO.setPlanId(week.getPlanNo());
schedulesPO.setWeek(week.getWeekNum());
schedulesPO.setSpecialDate(null);
......@@ -195,6 +196,7 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
});
schedule.getSpecialDays().forEach(specialDay -> {
CrossSchedulesPO schedulesPO = new CrossSchedulesPO();
schedulesPO.setScheduleNo(schedule.getScheduleId());
schedulesPO.setName("特殊日期");
schedulesPO.setCrossId(scheduleSendVO.getCrossCode());
schedulesPO.setPlanId(specialDay.getPlanNo());
......
......@@ -14,10 +14,13 @@ import net.wanji.utc.dto.hk.DownloadPlanSpandsDTO;
import net.wanji.utc.dto.hk.DownloadScheduleDTO;
import net.wanji.utc.dto.hk.DownloadTimeSpandsDTO;
import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.mapper.*;
import net.wanji.utc.mapper.CrossInfoMapper;
import net.wanji.utc.mapper.CrossPhaseMapper;
import net.wanji.utc.mapper.ManufacturerInfoMapper;
import net.wanji.utc.po.CrossInfoPO;
import net.wanji.utc.po.CrossPhasePO;
import net.wanji.utc.po.ManufacturerInfoPO;
import net.wanji.utc.po.hk.response.HKResponse;
import net.wanji.utc.service.control.ControlCommandService;
import net.wanji.utc.service.runninginfo.HkLightsStatusService;
import net.wanji.utc.util.FieldUtil;
......@@ -143,9 +146,7 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
// 1、下发信号机计划
Map<String, Object> fieldMap = FieldUtil.fieldMethod(downloadTimeSpandsDTO);
Map<String, String> path = PathUtil.getPathMapByApiCode("downloadTimeSpands");
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
path,
JSON.toJSONString(fieldMap), null, null, "application/json", null);
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, JSON.toJSONString(fieldMap), null, null, "application/json", null);
JSONObject obj = JSON.parseObject(strResult);
if (obj.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) {
return jsonViewObject.success("下发信号机计划成功");
......@@ -156,29 +157,15 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
@Override
public JsonViewObject scheduleSend(ScheduleSendVO param) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
// 厂商 HK
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(param.getCrossCode());
// 1、通过获取当前运行的日期数据,获取最新的日期方案id
JSONArray body = new JSONArray();
//body.add(param.getCrossCode());
body.add(manufacturerInfoPO.getName());
Map<String, String> path = PathUtil.getPathMapByApiCode("uploadDate");
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
path,
body.toString(), null, null, "application/json", null);
JSONObject object = JSON.parseObject(strResult);
// 日期 id
int id = 1;
if (object.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) {
// 获取日期列表
JSONArray schedulesArray = object.getJSONArray("data").getJSONObject(0).getJSONArray("schedules");
JSONObject scheduleObj = schedulesArray.getJSONObject(schedulesArray.size() - 1);
id = scheduleObj.getInteger("id");
CrossInfoPO crossInfoPO = crossInfoMapper.selectByPrimaryKey(param.getCrossCode());
String signalCode = null;
if (Objects.nonNull(crossInfoPO)) {
signalCode = crossInfoPO.getCode();
}
int id = 0;
// 下发信号机日期拼接参数
DownloadScheduleDTO dto = new DownloadScheduleDTO();
//dto.setCrossCode(param.getCrossCode());
dto.setCrossCode(manufacturerInfoPO.getName());
dto.setCrossCode(signalCode);
List<DownloadScheduleDTO.Schedule> schedules = new ArrayList<>();
for (ScheduleSendVO.Schedule schedule : param.getSchedules()) {
List<ScheduleSendVO.Schedule.Week> scheduleWeeks = schedule.getWeeks();
......@@ -195,9 +182,9 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
DownloadScheduleDTO.Schedule schedule1 = new DownloadScheduleDTO.Schedule();
// scheduleNo 日期号 ,支持返回【1~128】
if (id + planNos.size() > 128) {
schedule1.setScheduleNo(128 - planNos.size() - (++num));
schedule1.setScheduleId(128 - planNos.size() - (++num));
} else {
schedule1.setScheduleNo(id + (++num));
schedule1.setScheduleId(id + (++num));
}
// 0 说明 dates 内的日期是日期集合,1 说明是dates 内的数据是日期范围
schedule1.setIsPeriod(0);
......@@ -210,10 +197,10 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
});
schedule1.setDates(dates);
// 星期列表
List<String> weeks = new ArrayList<>();
List<Integer> weeks = new ArrayList<>();
schedule.getWeeks().forEach(week -> {
if (week.getPlanNo().equals(planNo)) {
weeks.add(String.valueOf(week.getWeekNum()));
weeks.add(week.getWeekNum());
}
});
schedule1.setWeeks(weeks);
......@@ -236,14 +223,13 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
}
}
Map<String, String> downloadSchedulePath = PathUtil.getPathMapByApiCode("downloadSchedule");
String updateResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
downloadSchedulePath,
JSON.toJSONString(fieldMap), null, null, "application/json", null);
JSONObject obj = JSON.parseObject(updateResult);
if (obj.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) {
String updateResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, downloadSchedulePath, JSON.toJSONString(fieldMap), null, null, "application/json", null);
HKResponse hkResponse = JSONObject.parseObject(updateResult, HKResponse.class);
if (Objects.nonNull(hkResponse) && Objects.equals(HK_SUCCESS_STRING_CODE, hkResponse.getCode())) {
return jsonViewObject.success("时间表下发成功");
}
return jsonViewObject.fail(obj.getString("msg"));
return jsonViewObject.fail("时间表下发成功");
}
@Override
......
......@@ -196,7 +196,7 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
String responseStr = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, jsonBody, null, null, "application/json", null);
if (StringUtils.isNotBlank(responseStr)) {
HKResponse hkResponse = JSONObject.parseObject(responseStr, HKResponse.class);
if (Objects.nonNull(hkResponse) && Objects.equals(hkResponse.getCode(), "0")) {
if (Objects.nonNull(hkResponse) && Objects.equals(Constants.HK_SUCCESS_CODE, hkResponse.getCode())) {
return hkResponse.getData();
} else {
log.error("ArtemisHttpUtil海康服务调用异常,请求路径:{}, 返回信息: {}, 请求信息: {}", apiPath, hkResponse, jsonBody);
......
package net.wanji.utc.service.staticinfo.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import lombok.RequiredArgsConstructor;
......@@ -15,8 +15,13 @@ import net.wanji.utc.mapper.CrossSchedulesMapper;
import net.wanji.utc.mapper.ManufacturerInfoMapper;
import net.wanji.utc.po.CrossSchedulesPO;
import net.wanji.utc.po.ManufacturerInfoPO;
import net.wanji.utc.po.hk.response.DatePO;
import net.wanji.utc.po.hk.response.HKResponse;
import net.wanji.utc.po.hk.response.ScheduleResponseListPO;
import net.wanji.utc.po.hk.response.ScheduleResponsePO;
import net.wanji.utc.service.staticinfo.HkCrossSchedulesService;
import net.wanji.utc.util.PathUtil;
import net.wanji.utc.util.StringUtils;
import org.springframework.stereotype.Service;
import java.util.*;
......@@ -40,62 +45,63 @@ public class HkCrossSchedulesServiceImpl implements HkCrossSchedulesService {
Map<String, String> path = PathUtil.getPathMapByApiCode("uploadDate");
List<String> crossCodeList = crossInfoMapper.selectCrossCodesByIds(crossIdList);
String body = JSONArray.toJSONString(crossCodeList);
String responseStr = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, body, null,
null, "application/json", null);
JSONObject responseObj = JSON.parseObject(responseStr);
if(Constants.HK_SUCCESS_CODE.equals(responseObj.getInteger(Constants.HK_CODE_KEY))) {
JSONArray data = responseObj.getJSONArray("data");
for (int i = 0; i < data.size(); i++) {
ArrayList<CrossSchedulesPO> crossSchedulesPOList = new ArrayList<>();
JSONObject dataEle = data.getJSONObject(i);
JSONArray schedules = dataEle.getJSONArray("schedules");
String crossCode = dataEle.getString("crossCode");
String code = BasicEnum.ManufacturerEnum.HK.getCode();
ManufacturerInfoPO manufacturerInfoPO = manufacturerInfoMapper.selectByCode(code);
Integer manufacturerId = manufacturerInfoPO.getId();
String crossId = crossInfoMapper.selectIdByCodeAndManufacturerId(crossCode, manufacturerId);
for (int j = 0; j < schedules.size(); j++) {
JSONObject schedule = schedules.getJSONObject(j);
JSONArray weeks = schedule.getJSONArray("weeks");
String desc = schedule.getString("desc");
Integer planNo = schedule.getInteger("planNo");
Integer planId = crossPlanMapper.selectIdByNo(crossId, planNo);
for (int k = 0; k < weeks.size(); k++) {
Integer week = weeks.getInteger(k);
CrossSchedulesPO crossSchedulesPO = new CrossSchedulesPO();
crossSchedulesPO.setName(desc);
crossSchedulesPO.setCrossId(crossId);
crossSchedulesPO.setPlanId(planId);
crossSchedulesPO.setWeek(week);
if (week != 0) {
crossSchedulesPOList.add(crossSchedulesPO);
} else {
// 特殊日期
JSONArray dates = schedule.getJSONArray("dates");
for (int m = 0; m < dates.size(); m++) {
JSONObject date = dates.getJSONObject(m);
JSONArray days = date.getJSONArray("days");
for (int n = 0; n < days.size(); n++) {
Integer day = days.getInteger(n);
Date specialDate = toDate(date, day);
crossSchedulesPO.setSpecialDate(specialDate);
crossSchedulesPOList.add(crossSchedulesPO);
String responseStr = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, body, null, null, "application/json", null);
HKResponse hkResponse = JSONObject.parseObject(responseStr, HKResponse.class);
if (Objects.nonNull(hkResponse) && Objects.equals(Constants.HK_SUCCESS_CODE, hkResponse.getCode())) {
String dataStr = String.valueOf(hkResponse.getData());
if (StringUtils.isNotBlank(dataStr)) {
List<ScheduleResponseListPO> scheduleResponseListPOS = JSONObject.parseObject(dataStr, new TypeReference<List<ScheduleResponseListPO>>() {
});
for (ScheduleResponseListPO scheduleResponseListPO : scheduleResponseListPOS) {
String crossCode = scheduleResponseListPO.getCrossCode();
List<ScheduleResponsePO> schedules = scheduleResponseListPO.getSchedules();
List<CrossSchedulesPO> crossSchedulesPOList = new ArrayList<>();
for (ScheduleResponsePO scheduleResponsePO : schedules) {
String code = BasicEnum.ManufacturerEnum.HK.getCode();
ManufacturerInfoPO manufacturerInfoPO = manufacturerInfoMapper.selectByCode(code);
Integer manufacturerId = manufacturerInfoPO.getId();
String crossId = crossInfoMapper.selectIdByCodeAndManufacturerId(crossCode, manufacturerId);
List<Integer> weeks = scheduleResponsePO.getWeeks();
String desc = scheduleResponsePO.getDesc();
Integer planNo = scheduleResponsePO.getPlanNo();
Integer planId = crossPlanMapper.selectIdByNo(crossId, planNo);
for (int k = 0; k < weeks.size(); k++) {
Integer week = weeks.get(k);
CrossSchedulesPO crossSchedulesPO = new CrossSchedulesPO();
crossSchedulesPO.setScheduleNo(scheduleResponsePO.getId());
crossSchedulesPO.setName(desc);
crossSchedulesPO.setCrossId(crossId);
crossSchedulesPO.setPlanId(planId);
crossSchedulesPO.setWeek(week);
if (week != 0) {
crossSchedulesPOList.add(crossSchedulesPO);
} else {
// 特殊日期
List<DatePO> dates = scheduleResponsePO.getDates();
for (int m = 0; m < dates.size(); m++) {
DatePO date = dates.get(m);
List<Integer> days = date.getDays();
for (int n = 0; n < days.size(); n++) {
Integer day = days.get(n);
Date specialDate = toDate(date, day);
crossSchedulesPO.setSpecialDate(specialDate);
crossSchedulesPOList.add(crossSchedulesPO);
}
}
}
}
// 插入数据库
crossSchedulesMapper.deleteByCrossId(crossId);
crossSchedulesMapper.insertBatch(crossSchedulesPOList);
}
}
// 插入数据库
crossSchedulesMapper.deleteByCrossId(crossId);
crossSchedulesMapper.insertBatch(crossSchedulesPOList);
}
}
}
private Date toDate(JSONObject date, Integer dayInt) {
String year = date.getString("year");
String month = date.getString("month");
private Date toDate(DatePO date, Integer dayInt) {
String year = String.valueOf(date.getYear());
String month = String.valueOf(date.getMonth());
String day = dayInt.toString();
if (month.length() == 1) {
month = "0" + month;
......
......@@ -30,6 +30,11 @@ public class ScheduleSendVO {
@Setter
@Getter
public static class Schedule {
/**
* 调度号 [1-128] 不填写自动分配
*/
private Integer scheduleId;
/**
* 星期列表
*/
......
......@@ -3,6 +3,7 @@
<mapper namespace="net.wanji.utc.mapper.CrossSchedulesMapper">
<resultMap type="net.wanji.utc.po.CrossSchedulesPO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="scheduleNo" column="schedule_no"/>
<result property="name" column="name"/>
<result property="crossId" column="cross_id"/>
<result property="planId" column="plan_id"/>
......@@ -14,10 +15,10 @@
<!-- 批量新增数据 -->
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into t_cross_schedules(name,cross_id,plan_id,week,special_date)
insert into t_cross_schedules(schedule_no,name,cross_id,plan_id,week,special_date)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.name},#{entity.crossId},#{entity.planId},#{entity.week},#{entity.specialDate})
(#{entity.scheduleNo},#{entity.name},#{entity.crossId},#{entity.planId},#{entity.week},#{entity.specialDate})
</foreach>
</insert>
......@@ -28,7 +29,7 @@
<select id="selectByCrossIds" resultMap="BaseResultMap">
select
id,name,cross_id,plan_id,week,special_date,gmt_create,gmt_modified
id,scheduleNo,name,cross_id,plan_id,week,special_date,gmt_create,gmt_modified
from t_cross_schedules
where cross_id in
<foreach collection="crossIds" item="crossId" separator="," open="(" close=")">
......
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