Browse Source

大屏-趋势

master
lichao 3 years ago
parent
commit
6efd97d40c
  1. 31
      esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/item/result/ReplyTotalLineDetailResultDTO.java
  2. 7
      esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/item/result/ResponseTotalPieResultDTO.java
  3. 31
      esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/item/result/RsponseTotalLineDetailResultDTO.java
  4. 26
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemScreenCountController.java
  5. 8
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/dao/ItemDao.java
  6. 4
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/ItemService.java
  7. 127
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java
  8. 134
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/item/ItemDao.xml

31
esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/item/result/ReplyTotalLineDetailResultDTO.java

@ -0,0 +1,31 @@
package com.elink.esua.epdc.dto.item.result;
import lombok.Data;
import java.io.Serializable;
/**
* 大屏-回复趋势-SQL返回值DTO
* @Author wgf
* @Date 2022-10-11
*/
@Data
public class ReplyTotalLineDetailResultDTO implements Serializable {
private static final long serialVersionUID = -2494874960456321677L;
/**
* 时间
*/
private String time;
/**
* 回复
*/
private String hf;
/**
* 未回复
*/
private String whf;
}

7
esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/item/result/ResponseTotalPieResultDTO.java

@ -21,10 +21,15 @@ public class ResponseTotalPieResultDTO implements Serializable {
/** /**
* *
*/ */
private String value; private Integer value;
/** /**
* 占比 * 占比
*/ */
private String proportion; private String proportion;
/**
* 总数
*/
private Integer total;
} }

31
esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/item/result/RsponseTotalLineDetailResultDTO.java

@ -0,0 +1,31 @@
package com.elink.esua.epdc.dto.item.result;
import lombok.Data;
import java.io.Serializable;
/**
* 大屏-响应趋势-SQL返回值DTO
* @Author wgf
* @Date 2022-10-11
*/
@Data
public class RsponseTotalLineDetailResultDTO implements Serializable {
private static final long serialVersionUID = -2494874960456321677L;
/**
* 时间
*/
private String time;
/**
* 响应
*/
private String xy;
/**
* 未响应
*/
private String wxy;
}

26
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemScreenCountController.java

@ -157,6 +157,32 @@ public class ItemScreenCountController {
return new Result<List<ResponseTotalPieResultDTO>>().ok(list); return new Result<List<ResponseTotalPieResultDTO>>().ok(list);
} }
/**
* @Description: 大屏-6小时维度趋势
* @param formDTO:
* @Return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.item.result.ResponseTotalLineResultDTO>
* @Author: lichao
* @Date: 2023/7/17 13:51
*/
@GetMapping("responseSixHoursTrend")
public Result<ResponseTotalLineResultDTO> responseSixHoursTrend(ScreenTotalFormDTO formDTO) {
ResponseTotalLineResultDTO list = itemService.responseSixHoursTrend(formDTO);
return new Result<ResponseTotalLineResultDTO>().ok(list);
}
/**
* @Description: 大屏-按时回复趋势
* @param formDTO:
* @Return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.item.result.ReplyTotalLineResultDTO>
* @Author: lichao
* @Date: 2023/7/17 13:51
*/
@GetMapping("replyTrend")
public Result<ReplyTotalLineResultDTO> replyTrend(ScreenTotalFormDTO formDTO) {
ReplyTotalLineResultDTO list = itemService.replyTrend(formDTO);
return new Result<ReplyTotalLineResultDTO>().ok(list);
}
/** /**
* @Description: 大屏-按时回复率 * @Description: 大屏-按时回复率
* @param formDTO: * @param formDTO:

8
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/dao/ItemDao.java

@ -554,4 +554,12 @@ public interface ItemDao extends BaseDao<ItemEntity> {
ResponseTotalPieResultDTO responseSixHoursTotal(ScreenTotalFormDTO formDTO); ResponseTotalPieResultDTO responseSixHoursTotal(ScreenTotalFormDTO formDTO);
ResponseTotalPieResultDTO replyTotal(ScreenTotalFormDTO formDTO); ResponseTotalPieResultDTO replyTotal(ScreenTotalFormDTO formDTO);
List<ReplyTotalLineDetailResultDTO> getReplyDataListByDays(ScreenTotalFormDTO formDTO);
List<ReplyTotalLineDetailResultDTO> getReplyDataListByMonths(ScreenTotalFormDTO formDTO);
List<RsponseTotalLineDetailResultDTO> getResponseDataListByDays(ScreenTotalFormDTO formDTO);
List<RsponseTotalLineDetailResultDTO> getResponseDataListByMonths(ScreenTotalFormDTO formDTO);
} }

4
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/ItemService.java

@ -808,4 +808,8 @@ public interface ItemService extends BaseService<ItemEntity> {
List<ResponseTotalPieResultDTO> responseSixHoursTotal(ScreenTotalFormDTO formDTO); List<ResponseTotalPieResultDTO> responseSixHoursTotal(ScreenTotalFormDTO formDTO);
List<ResponseTotalPieResultDTO> replyTotal(ScreenTotalFormDTO formDTO); List<ResponseTotalPieResultDTO> replyTotal(ScreenTotalFormDTO formDTO);
ReplyTotalLineResultDTO replyTrend(ScreenTotalFormDTO formDTO);
ResponseTotalLineResultDTO responseSixHoursTrend(ScreenTotalFormDTO formDTO);
} }

127
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java

@ -5351,9 +5351,14 @@ public class ItemServiceImpl extends BaseServiceImpl<ItemDao, ItemEntity> implem
ResponseTotalPieResultDTO dtoResonseNo = new ResponseTotalPieResultDTO(); ResponseTotalPieResultDTO dtoResonseNo = new ResponseTotalPieResultDTO();
dtoResonseNo.setName("未按期响应率"); dtoResonseNo.setName("未按期响应率");
if (dtoResonse.getValue()!=null){ if (dtoResonse.getValue()!=null){
dtoResonseNo.setValue(dtoResonse.getTotal()-dtoResonse.getValue());
}else{
dtoResonseNo.setValue(dtoResonse.getTotal());
}
/* if (dtoResonse.getValue()!=null){
dtoResonse.setValue(String.valueOf((1-Double.valueOf(dtoResonse.getValue()))*100)); dtoResonse.setValue(String.valueOf((1-Double.valueOf(dtoResonse.getValue()))*100));
} }
dtoResonse.setValue(String.valueOf(Double.valueOf(dtoResonse.getValue())*100)); dtoResonse.setValue(String.valueOf(Double.valueOf(dtoResonse.getValue())*100));*/
list.add(dtoResonse); list.add(dtoResonse);
list.add(dtoResonseNo); list.add(dtoResonseNo);
return list; return list;
@ -5364,16 +5369,130 @@ public class ItemServiceImpl extends BaseServiceImpl<ItemDao, ItemEntity> implem
List<ResponseTotalPieResultDTO> list = new ArrayList<>(); List<ResponseTotalPieResultDTO> list = new ArrayList<>();
ResponseTotalPieResultDTO dtoResonse = baseDao.replyTotal(formDTO); ResponseTotalPieResultDTO dtoResonse = baseDao.replyTotal(formDTO);
ResponseTotalPieResultDTO dtoResonseNo = new ResponseTotalPieResultDTO(); ResponseTotalPieResultDTO dtoResonseNo = new ResponseTotalPieResultDTO();
dtoResonseNo.setName("未按时恢复"); dtoResonseNo.setName("未按时恢复");
if (dtoResonse.getValue()!=null){ if (dtoResonse.getValue()!=null){
dtoResonse.setValue(String.valueOf((1-Double.valueOf(dtoResonse.getValue()))*100)); dtoResonseNo.setValue(dtoResonse.getTotal()-dtoResonse.getValue());
}else{
dtoResonseNo.setValue(dtoResonse.getTotal());
} }
dtoResonse.setValue(String.valueOf(Double.valueOf(dtoResonse.getValue())*100)); /* if (dtoResonse.getValue()!=null){
// dtoResonse.setValue(String.valueOf((1-Double.valueOf(dtoResonse.getValue()))*100));
}*/
// dtoResonse.setValue(String.valueOf(Double.valueOf(dtoResonse.getValue())*100));
list.add(dtoResonse); list.add(dtoResonse);
list.add(dtoResonseNo); list.add(dtoResonseNo);
return list; return list;
} }
@Override
public ReplyTotalLineResultDTO replyTrend(ScreenTotalFormDTO formDTO) {
ReplyTotalLineResultDTO resultDTO = new ReplyTotalLineResultDTO();
// 时间数组
List<String> timeArr = new ArrayList<>();
// 回复数组
List<String> hfArr = new ArrayList<>();
// 未回复数组
List<String> whfArr = new ArrayList<>();
List<ReplyTotalLineDetailResultDTO> dataList = new ArrayList<>();
if (formDTO.getYearMonth().length() > 4) {
String[] arr = formDTO.getYearMonth().split("-");
// 按日统计
timeArr = YearMonthUtils.getMonthFullDay(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]));
formDTO.setTimeArr(timeArr);
dataList = baseDao.getReplyDataListByDays(formDTO);
} else {
// 按月统计
timeArr = YearMonthUtils.getMonthBetween(formDTO.getYearMonth() + "-01", formDTO.getYearMonth() + "-12");
formDTO.setTimeArr(timeArr);
dataList = baseDao.getReplyDataListByMonths(formDTO);
}
for (int i = 0; i < timeArr.size(); i++) {
Boolean flag = false; // 是否完成该时间赋值
for (ReplyTotalLineDetailResultDTO dto : dataList) {
if (timeArr.get(i).equals(dto.getTime())) {
hfArr.add(dto.getHf());
whfArr.add(dto.getWhf());
flag = true;
break;
}
}
// 判断该时间是否赋值
if (!flag) {
hfArr.add("0");
whfArr.add("0");
}
}
// 组装数据
resultDTO.setXValue(timeArr);
resultDTO.setHfArr(hfArr);
resultDTO.setWhfArr(whfArr);
return resultDTO;
}
@Override
public ResponseTotalLineResultDTO responseSixHoursTrend(ScreenTotalFormDTO formDTO) {
ResponseTotalLineResultDTO resultDTO = new ResponseTotalLineResultDTO();
// 时间数组
List<String> timeArr = new ArrayList<>();
// 响应数组
List<String> xyArr = new ArrayList<>();
// 未响应数组
List<String> wxyArr = new ArrayList<>();
List<RsponseTotalLineDetailResultDTO> dataList = new ArrayList<>();
if (formDTO.getYearMonth().length() > 4) {
String[] arr = formDTO.getYearMonth().split("-");
// 按日统计
timeArr = YearMonthUtils.getMonthFullDay(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]));
formDTO.setTimeArr(timeArr);
dataList = baseDao.getResponseDataListByDays(formDTO);
} else {
// 按月统计
timeArr = YearMonthUtils.getMonthBetween(formDTO.getYearMonth() + "-01", formDTO.getYearMonth() + "-12");
formDTO.setTimeArr(timeArr);
dataList = baseDao.getResponseDataListByMonths(formDTO);
}
for (int i = 0; i < timeArr.size(); i++) {
Boolean flag = false; // 是否完成该时间赋值
for (RsponseTotalLineDetailResultDTO dto : dataList) {
if (timeArr.get(i).equals(dto.getTime())) {
xyArr.add(dto.getXy());
wxyArr.add(dto.getWxy());
flag = true;
break;
}
}
// 判断该时间是否赋值
if (!flag) {
xyArr.add("0");
wxyArr.add("0");
}
}
// 组装数据
resultDTO.setXValue(timeArr);
resultDTO.setXyArr(xyArr);
resultDTO.setWxyArr(wxyArr);
return resultDTO;
}
/** /**
* 重新上报 * 重新上报
* *

134
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/item/ItemDao.xml

@ -3219,7 +3219,8 @@
'按期响应率' as name, '按期响应率' as name,
COUNT( COUNT(
IF IF
(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt;= 480 ,1, NULL ))/COUNT(1) as value (getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt;= 480 ,1, NULL )) as value,
COUNT(1) as total
FROM FROM
( SELECT l1.CREATED_TIME, l1.ITEM_ID FROM epdc_item_report_interface_log l1 WHERE l1.INTERFACE_NAME = '响应接收' ) a ( SELECT l1.CREATED_TIME, l1.ITEM_ID FROM epdc_item_report_interface_log l1 WHERE l1.INTERFACE_NAME = '响应接收' ) a
LEFT JOIN ( SELECT l2.CREATED_TIME, l2.ITEM_ID FROM epdc_item_report_interface_log l2 WHERE l2.INTERFACE_NAME LIKE '诉求登记%' ) b ON a.ITEM_ID = b.ITEM_ID LEFT JOIN ( SELECT l2.CREATED_TIME, l2.ITEM_ID FROM epdc_item_report_interface_log l2 WHERE l2.INTERFACE_NAME LIKE '诉求登记%' ) b ON a.ITEM_ID = b.ITEM_ID
@ -3245,7 +3246,8 @@
'按时回复率' as name, '按时回复率' as name,
COUNT( COUNT(
IF IF
(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt; 2100 ,1, NULL ))/COUNT(1) as value (getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt; 2100 ,1, NULL )) as value,
COUNT(1) as total
FROM FROM
( SELECT l1.CREATED_TIME, l1.ITEM_ID FROM epdc_item_report_interface_log l1 WHERE l1.INTERFACE_NAME = '诉求审核' ) a ( SELECT l1.CREATED_TIME, l1.ITEM_ID FROM epdc_item_report_interface_log l1 WHERE l1.INTERFACE_NAME = '诉求审核' ) a
LEFT JOIN ( SELECT l2.CREATED_TIME, l2.ITEM_ID FROM epdc_item_report_interface_log l2 WHERE l2.INTERFACE_NAME = '响应接收' ) b ON a.ITEM_ID = b.ITEM_ID LEFT JOIN ( SELECT l2.CREATED_TIME, l2.ITEM_ID FROM epdc_item_report_interface_log l2 WHERE l2.INTERFACE_NAME = '响应接收' ) b ON a.ITEM_ID = b.ITEM_ID
@ -3265,6 +3267,134 @@
AND i.PEOPLE_FLAG = #{peopleFlag} AND i.PEOPLE_FLAG = #{peopleFlag}
</if> </if>
</select>
<select id="getReplyDataListByDays"
resultType="com.elink.esua.epdc.dto.item.result.ReplyTotalLineDetailResultDTO">
SELECT
DATE_FORMAT(i.CREATED_TIME,'%Y-%m-%d') as time,
ROUND(COUNT(IF(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt; 2100 ,1, NULL )) / count(i.ID) * 100,1) as hf,
ROUND((count(i.ID) - COUNT(IF(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt; 2100 ,1, NULL ))) / count(i.ID) * 100,1) as whf
FROM
( SELECT l1.CREATED_TIME, l1.ITEM_ID FROM epdc_item_report_interface_log l1 WHERE l1.INTERFACE_NAME = '诉求审核' ) a
LEFT JOIN ( SELECT l2.CREATED_TIME, l2.ITEM_ID FROM epdc_item_report_interface_log l2 WHERE l2.INTERFACE_NAME = '响应接收' ) b ON a.ITEM_ID = b.ITEM_ID
LEFT JOIN epdc_item i ON i.ID = a.ITEM_ID
WHERE
b.CREATED_TIME IS NOT NULL
<if test="startTime != null and startTime != ''">
and i.CREATED_TIME &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
and i.CREATED_TIME &lt;= #{endTime}
</if>
<if test="deptId != null and deptId != ''">
AND find_in_set(#{deptId},i.ALL_DEPT_IDS)
</if>
<if test="peopleFlag != null and peopleFlag != ''">
AND i.PEOPLE_FLAG = #{peopleFlag}
</if>
AND DATE_FORMAT(i.CREATED_TIME,'%Y-%m-%d') IN
<foreach collection="timeArr" index="index" item="time" open="(" separator="," close=")">
#{time}
</foreach>
group by DATE_FORMAT(i.CREATED_TIME,'%Y-%m-%d')
ORDER BY DATE_FORMAT(i.CREATED_TIME,'%Y-%m-%d') asc
</select>
<select id="getReplyDataListByMonths" resultType="com.elink.esua.epdc.dto.item.result.ReplyTotalLineDetailResultDTO">
SELECT
DATE_FORMAT(i.CREATED_TIME,'%Y-%m') as time,
ROUND(COUNT(IF(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt; 2100 ,1, NULL )) / count(i.ID) * 100,1) as hf,
ROUND((count(i.ID) - COUNT(IF(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt; 2100 ,1, NULL ))) / count(i.ID) * 100,1) as whf
FROM
( SELECT l1.CREATED_TIME, l1.ITEM_ID FROM epdc_item_report_interface_log l1 WHERE l1.INTERFACE_NAME = '诉求审核' ) a
LEFT JOIN ( SELECT l2.CREATED_TIME, l2.ITEM_ID FROM epdc_item_report_interface_log l2 WHERE l2.INTERFACE_NAME = '响应接收' ) b ON a.ITEM_ID = b.ITEM_ID
LEFT JOIN epdc_item i ON i.ID = a.ITEM_ID
WHERE
b.CREATED_TIME IS NOT NULL
<if test="startTime != null and startTime != ''">
and i.CREATED_TIME &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
and i.CREATED_TIME &lt;= #{endTime}
</if>
<if test="deptId != null and deptId != ''">
AND find_in_set(#{deptId},i.ALL_DEPT_IDS)
</if>
<if test="peopleFlag != null and peopleFlag != ''">
AND i.PEOPLE_FLAG = #{peopleFlag}
</if>
AND DATE_FORMAT(i.CREATED_TIME,'%Y-%m') IN
<foreach collection="timeArr" index="index" item="time" open="(" separator="," close=")">
#{time}
</foreach>
group by DATE_FORMAT(i.CREATED_TIME,'%Y-%m')
ORDER BY DATE_FORMAT(i.CREATED_TIME,'%Y-%m') asc
</select>
<select id="getResponseDataListByDays" resultType="com.elink.esua.epdc.dto.item.result.RsponseTotalLineDetailResultDTO">
SELECT
DATE_FORMAT(i.CREATED_TIME,'%Y-%m-%d') as time,
ROUND(COUNT(IF(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt;= 480 ,1, NULL )) / count(i.ID) * 100,1) as xy,
ROUND((count(i.ID) - COUNT(IF(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt;= 480 ,1, NULL ))) / count(i.ID) * 100,1) as wxy
FROM
( SELECT l1.CREATED_TIME, l1.ITEM_ID FROM epdc_item_report_interface_log l1 WHERE l1.INTERFACE_NAME = '诉求审核' ) a
LEFT JOIN ( SELECT l2.CREATED_TIME, l2.ITEM_ID FROM epdc_item_report_interface_log l2 WHERE l2.INTERFACE_NAME = '响应接收' ) b ON a.ITEM_ID = b.ITEM_ID
LEFT JOIN epdc_item i ON i.ID = a.ITEM_ID
WHERE
b.CREATED_TIME IS NOT NULL
<if test="startTime != null and startTime != ''">
and i.CREATED_TIME &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
and i.CREATED_TIME &lt;= #{endTime}
</if>
<if test="deptId != null and deptId != ''">
AND find_in_set(#{deptId},i.ALL_DEPT_IDS)
</if>
<if test="peopleFlag != null and peopleFlag != ''">
AND i.PEOPLE_FLAG = #{peopleFlag}
</if>
AND DATE_FORMAT(i.CREATED_TIME,'%Y-%m-%d') IN
<foreach collection="timeArr" index="index" item="time" open="(" separator="," close=")">
#{time}
</foreach>
group by DATE_FORMAT(i.CREATED_TIME,'%Y-%m-%d')
ORDER BY DATE_FORMAT(i.CREATED_TIME,'%Y-%m-%d') asc
</select>
<select id="getResponseDataListByMonths" resultType="com.elink.esua.epdc.dto.item.result.RsponseTotalLineDetailResultDTO">
SELECT
DATE_FORMAT(i.CREATED_TIME,'%Y-%m') as time,
ROUND(COUNT(IF(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt;= 480 ,1, NULL )) / count(i.ID) * 100,1) as xy,
ROUND((count(i.ID) - COUNT(IF(getworkminute(b.CREATED_TIME,a.CREATED_TIME) &lt;= 480 ,1, NULL ))) / count(i.ID) * 100,1) as wxy
FROM
( SELECT l1.CREATED_TIME, l1.ITEM_ID FROM epdc_item_report_interface_log l1 WHERE l1.INTERFACE_NAME = '诉求审核' ) a
LEFT JOIN ( SELECT l2.CREATED_TIME, l2.ITEM_ID FROM epdc_item_report_interface_log l2 WHERE l2.INTERFACE_NAME = '响应接收' ) b ON a.ITEM_ID = b.ITEM_ID
LEFT JOIN epdc_item i ON i.ID = a.ITEM_ID
WHERE
b.CREATED_TIME IS NOT NULL
<if test="startTime != null and startTime != ''">
and i.CREATED_TIME &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
and i.CREATED_TIME &lt;= #{endTime}
</if>
<if test="deptId != null and deptId != ''">
AND find_in_set(#{deptId},i.ALL_DEPT_IDS)
</if>
<if test="peopleFlag != null and peopleFlag != ''">
AND i.PEOPLE_FLAG = #{peopleFlag}
</if>
AND DATE_FORMAT(i.CREATED_TIME,'%Y-%m') IN
<foreach collection="timeArr" index="index" item="time" open="(" separator="," close=")">
#{time}
</foreach>
group by DATE_FORMAT(i.CREATED_TIME,'%Y-%m')
ORDER BY DATE_FORMAT(i.CREATED_TIME,'%Y-%m') asc
</select> </select>
<update id="updateBatchBySerialNum"> <update id="updateBatchBySerialNum">

Loading…
Cancel
Save