|
@ -0,0 +1,408 @@
|
|
|
package com.yihu.jw.base.endpoint.device;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
|
import com.fasterxml.jackson.databind.JavaType;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.yihu.jw.base.dao.device.DeviceDao;
|
|
|
import com.yihu.jw.base.dao.device.DeviceDetailDao;
|
|
|
import com.yihu.jw.base.service.device.DeviceManageService;
|
|
|
import com.yihu.jw.base.service.device.DmDeviceService;
|
|
|
import com.yihu.jw.base.service.device.WlyyPatientDeviceService;
|
|
|
import com.yihu.jw.base.service.device.YsDeviceService;
|
|
|
import com.yihu.jw.entity.care.device.Device;
|
|
|
import com.yihu.jw.entity.care.device.DeviceDetail;
|
|
|
import com.yihu.jw.entity.care.device.DevicePatientDevice;
|
|
|
import com.yihu.jw.restmodel.ResponseContant;
|
|
|
import com.yihu.jw.restmodel.iot.device.WlyyPatientDeviceVO;
|
|
|
import com.yihu.jw.restmodel.web.Envelop;
|
|
|
import com.yihu.jw.restmodel.web.ObjEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.PageEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import io.swagger.annotations.ApiParam;
|
|
|
import jxl.Sheet;
|
|
|
import jxl.Workbook;
|
|
|
import jxl.write.Label;
|
|
|
import jxl.write.WritableSheet;
|
|
|
import jxl.write.WritableWorkbook;
|
|
|
import jxl.write.WriteException;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.http.HttpEntity;
|
|
|
import org.springframework.http.HttpMethod;
|
|
|
import org.springframework.http.MediaType;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.util.LinkedMultiValueMap;
|
|
|
import org.springframework.util.MultiValueMap;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import javax.swing.*;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
import java.io.OutputStream;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
import static com.yihu.jw.util.common.BeanUtils.getNullPropertyNames;
|
|
|
|
|
|
/**
|
|
|
* Created by Bing on 2021/9/22.
|
|
|
*/
|
|
|
@RestController
|
|
|
@RequestMapping(value = "baseDevice",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
|
|
|
@Api(value = "设备管理", description = "设备管理", tags = {"设备管理"})
|
|
|
public class DeviceManageEndpoint extends EnvelopRestEndpoint {
|
|
|
private static Logger logger = LoggerFactory.getLogger(DeviceManageEndpoint.class);
|
|
|
|
|
|
@Autowired
|
|
|
private DeviceDetailDao deviceDetailDao;
|
|
|
@Autowired
|
|
|
private DeviceDao deviceDao;
|
|
|
@Autowired
|
|
|
private DeviceManageService deviceManageService;
|
|
|
@Autowired
|
|
|
private WlyyPatientDeviceService patientDeviceService;
|
|
|
@Autowired
|
|
|
private DmDeviceService dmDeviceService;
|
|
|
@Autowired
|
|
|
private YsDeviceService ysDeviceService;
|
|
|
|
|
|
@GetMapping("findWlyyDevices")
|
|
|
@ApiOperation("获取设备列表")
|
|
|
public PageEnvelop<DeviceDetail> findDevices(
|
|
|
@ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
|
|
|
@RequestParam(value = "fields", required = false) String fields,
|
|
|
@ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
|
|
|
@RequestParam(value = "filters", required = false) String filters,
|
|
|
@ApiParam(name = "sorts", value = "排序,规则参见说明文档")
|
|
|
@RequestParam(value = "sorts", required = false) String sorts,
|
|
|
@ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
|
|
|
@RequestParam(value = "page") int page,
|
|
|
@ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
|
|
|
@RequestParam(value = "size") int size){
|
|
|
try {
|
|
|
List<DeviceDetail> list = deviceManageService.search(fields,filters,sorts,page,size);
|
|
|
int count = (int) deviceManageService.getCount(filters);
|
|
|
return success(list, count, page, size, DeviceDetail.class);
|
|
|
}catch (Exception e){
|
|
|
return failedPageEnvelopException2(e);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
@PostMapping("delWlyyDevice")
|
|
|
@ApiOperation("删除设备")
|
|
|
public Envelop delWlyyDevice(@ApiParam(name = "id")@RequestParam(value = "id")String id){
|
|
|
try {
|
|
|
deviceDetailDao.delete(Long.parseLong(id));
|
|
|
return success(id);
|
|
|
}catch (Exception e){
|
|
|
return failedException2(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@PostMapping("saveWlyyDevice")
|
|
|
@ApiOperation("保存/修改设备")
|
|
|
public Envelop saveDevice(@ApiParam(name="json")@RequestParam(value = "json")String json){
|
|
|
try {
|
|
|
JSONObject response = deviceManageService.saveWlyyDevice(json);
|
|
|
if (1==response.getInteger(ResponseContant.resultFlag)){
|
|
|
return success("修改成功") ;
|
|
|
}
|
|
|
else {
|
|
|
return Envelop.getError(response.getString(ResponseContant.resultMsg)) ;
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
return failedException2(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@GetMapping(value = "getUserDevice")
|
|
|
@ApiOperation("居民设备查询")
|
|
|
public PageEnvelop<WlyyPatientDeviceVO> getUserDevice(
|
|
|
@ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
|
|
|
@RequestParam(value = "fields", required = false) String fields,
|
|
|
@ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
|
|
|
@RequestParam(value = "filters", required = false) String filters,
|
|
|
@ApiParam(name = "sorts", value = "排序,规则参见说明文档")
|
|
|
@RequestParam(value = "sorts", required = false) String sorts,
|
|
|
@ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
|
|
|
@RequestParam(value = "page") int page,
|
|
|
@ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
|
|
|
@RequestParam(value = "size") int size){
|
|
|
try {
|
|
|
if (StringUtils.isBlank(filters)){
|
|
|
filters="del=0";
|
|
|
}else {
|
|
|
filters+=";del=0";
|
|
|
}
|
|
|
List<DevicePatientDevice> list = patientDeviceService.search(fields, filters, sorts,page,size);
|
|
|
List<WlyyPatientDeviceVO> list2 = new ArrayList<>();
|
|
|
for (DevicePatientDevice tmp:list){
|
|
|
WlyyPatientDeviceVO deviceVO= new WlyyPatientDeviceVO();
|
|
|
BeanUtils.copyProperties(tmp, deviceVO, getNullPropertyNames(tmp));
|
|
|
deviceVO.setId(tmp.getId().intValue());
|
|
|
List<DeviceDetail> deviceDetails = deviceDetailDao.findByDeviceCode(deviceVO.getDeviceSn());
|
|
|
if (deviceDetails.size()>0){
|
|
|
DeviceDetail deviceDetail = deviceDetails.get(0);
|
|
|
deviceVO.setSim(deviceDetail.getSim());
|
|
|
deviceVO.setIccid(deviceDetail.getIccid());
|
|
|
deviceVO.setImsi(deviceDetail.getImsi());
|
|
|
}
|
|
|
|
|
|
list2.add(deviceVO);
|
|
|
}
|
|
|
int count = (int) patientDeviceService.getCount(filters);
|
|
|
return success(list2, count, page, size);
|
|
|
}catch (Exception e){
|
|
|
return failedPageEnvelopException2(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@PostMapping("delPatientDevice")
|
|
|
@ApiOperation("删除患者设备-解绑")
|
|
|
public Envelop delPatientDevice(@ApiParam(name = "id")
|
|
|
@RequestParam(value = "id", required = false) String id){
|
|
|
try {
|
|
|
patientDeviceService.delPatientDevice(id);
|
|
|
return success();
|
|
|
}catch (Exception e){
|
|
|
return failedException2(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@GetMapping("findDmDeviceDict")
|
|
|
@ApiOperation("获取设备字典")
|
|
|
public PageEnvelop<Device> findDmDeviceDict(@ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
|
|
|
@RequestParam(value = "fields", required = false) String fields,
|
|
|
@ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
|
|
|
@RequestParam(value = "filters", required = false) String filters,
|
|
|
@ApiParam(name = "sorts", value = "排序,规则参见说明文档")
|
|
|
@RequestParam(value = "sorts", required = false) String sorts,
|
|
|
@ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
|
|
|
@RequestParam(value = "page") int page,
|
|
|
@ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
|
|
|
@RequestParam(value = "size") int size){
|
|
|
try {
|
|
|
if (StringUtils.isBlank(filters)){
|
|
|
filters="del=0";
|
|
|
}else {
|
|
|
filters+=";del=0";
|
|
|
}
|
|
|
List<Device> list = dmDeviceService.search(fields, filters, sorts,page,size);
|
|
|
int count = (int) dmDeviceService.getCount(filters);
|
|
|
return success(list, count, page, size);
|
|
|
}catch (Exception e){
|
|
|
return failedPageEnvelopException2(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@PostMapping("delDmDevice")
|
|
|
@ApiOperation("删除设备字典定义")
|
|
|
public Envelop delDmDevice(@ApiParam(name = "id")
|
|
|
@RequestParam(value = "id", required = false) String id){
|
|
|
try {
|
|
|
dmDeviceService.delete(Long.parseLong(id));
|
|
|
return success();
|
|
|
}catch (Exception e){
|
|
|
return failedException2(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@PostMapping("saveDmDevice")
|
|
|
@ApiOperation("保存设备字典定义")
|
|
|
public Envelop saveDmDevice(@ApiParam(name="json")@RequestParam(value = "json")String json){
|
|
|
try {
|
|
|
JSONObject response = dmDeviceService.saveDmDevice(json);
|
|
|
if (1==response.getInteger(ResponseContant.resultFlag)){
|
|
|
return success("修改成功") ;
|
|
|
}
|
|
|
else {
|
|
|
return Envelop.getError(response.getString(ResponseContant.resultMsg)) ;
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
return failedException2(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@PostMapping(value = "/importDeviceFromExcel", produces = "application/json;charset=UTF-8")
|
|
|
@ApiOperation("设备数据导入")
|
|
|
public ObjEnvelop importFromExcel(HttpServletRequest request, @ApiParam(value = "文件", required = true)
|
|
|
@RequestParam(value = "file", required = true) MultipartFile file,HttpServletResponse response) {
|
|
|
List errorLs = new ArrayList<>();
|
|
|
List correctLs = new ArrayList<>();
|
|
|
Map<String, String> errorMsgMapTotal = new HashMap<>();
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
List<String> deviceCodes = new ArrayList<>();
|
|
|
try {
|
|
|
request.setCharacterEncoding("UTF-8");
|
|
|
InputStream inputStream = file.getInputStream();
|
|
|
Workbook rwb = Workbook.getWorkbook(inputStream);
|
|
|
Sheet[] sheets = rwb.getSheets();
|
|
|
int rows;
|
|
|
int row;
|
|
|
String manufacturer=null;//厂商名称
|
|
|
String deviceName; //设备名称
|
|
|
String deviceModel; //设备型号
|
|
|
String deviceCode; //设备SN
|
|
|
String sim; //sim卡号
|
|
|
String iccid; //iccid卡号
|
|
|
String imsi; //imsi卡号
|
|
|
|
|
|
Sheet sheet = sheets[0]; //第一张表
|
|
|
rows = sheet.getRows();
|
|
|
|
|
|
for (int j = 1; j < rows; j++) {
|
|
|
if (sheet.getRow(j).length == 0) {
|
|
|
continue;
|
|
|
}
|
|
|
String errorMsg = "";
|
|
|
DeviceDetail deviceDetail = new DeviceDetail();
|
|
|
Map<String, String> errorMsgMap = deviceDetail.getErrorMsgMap();
|
|
|
row = j;
|
|
|
manufacturer = sheet.getCell(0, row).getContents().trim(); //0 厂商名称
|
|
|
deviceName = sheet.getCell(1, row).getContents().trim(); //1 设备名称
|
|
|
deviceModel = sheet.getCell(2, row).getContents().trim(); //2 设备型号
|
|
|
deviceCode = sheet.getCell(3, row).getContents().trim(); //3 设备SN
|
|
|
sim = sheet.getCell(4, row).getContents().trim(); //4 sim卡号
|
|
|
iccid = sheet.getCell(5, row).getContents().trim(); //4 iccid卡号
|
|
|
imsi = sheet.getCell(6, row).getContents().trim(); //4 imsi卡号
|
|
|
if (org.apache.commons.lang.StringUtils.isBlank(deviceCode)){
|
|
|
continue;
|
|
|
}
|
|
|
if (deviceCodes.contains(deviceCode)){
|
|
|
errorMsgMapTotal.put(deviceCode,"设备SN码重复");
|
|
|
errorMsgMap.put("deviceCode", "设备SN码重复!;");
|
|
|
errorMsg += "设备SN码重复!;";
|
|
|
}
|
|
|
deviceCodes.add(deviceCode);
|
|
|
if (org.apache.commons.lang.StringUtils.isBlank(manufacturer)){
|
|
|
errorMsgMapTotal.put(deviceCode,"厂商名称不能为空");
|
|
|
errorMsgMap.put("manufacturer", "厂商名称不能为空!;");
|
|
|
errorMsg += "厂商名称不能为空!;";
|
|
|
}
|
|
|
if (org.apache.commons.lang.StringUtils.isBlank(deviceName)){
|
|
|
errorMsgMapTotal.put(deviceCode,"设备名称不能为空");
|
|
|
errorMsgMap.put("deviceName", "设备名称不能为空!;");
|
|
|
errorMsg += "设备名称不能为空!;";
|
|
|
}
|
|
|
if (org.apache.commons.lang.StringUtils.isBlank(deviceModel)){
|
|
|
errorMsgMapTotal.put(deviceCode,"设备型号不能为空");
|
|
|
errorMsgMap.put("deviceModel", "设备型号不能为空!;");
|
|
|
errorMsg += "设备型号不能为空!;";
|
|
|
}
|
|
|
//名称、设备类型、设备型号判断
|
|
|
if (0==deviceDao.findTotalByName(deviceName)){
|
|
|
errorMsgMapTotal.put(deviceCode,"设备名称不存在");
|
|
|
errorMsgMap.put("deviceName", "设备名称不存在!;");
|
|
|
errorMsg += "设备名称不存在!;";
|
|
|
}
|
|
|
if (0==deviceDao.findTotalByModel(deviceModel)){
|
|
|
errorMsgMapTotal.put(deviceCode,"设备型号不存在");
|
|
|
errorMsgMap.put("deviceModel", "设备型号不存在!;");
|
|
|
errorMsg += "设备型号不存在!;";
|
|
|
}
|
|
|
|
|
|
if (deviceDetailDao.findByDeviceCode(deviceCode).size()>0){
|
|
|
errorMsgMapTotal.put(deviceCode,"该设备SN码已存在");
|
|
|
errorMsgMap.put("deviceCode", "该设备SN码已存在!;");
|
|
|
errorMsg += "该设备SN码已存在!;";
|
|
|
}
|
|
|
if (org.apache.commons.lang.StringUtils.isNotBlank(sim) && deviceDetailDao.findBySim(sim).size()>0){
|
|
|
errorMsgMapTotal.put(deviceCode,"该sim卡号已存在");
|
|
|
errorMsgMap.put("sim", "该sim卡号已存在!;");
|
|
|
errorMsg += "该sim卡号已存在!;";
|
|
|
}
|
|
|
if (org.apache.commons.lang.StringUtils.isNotBlank(iccid) && deviceDetailDao.findByIccid(iccid).size()>0){
|
|
|
errorMsgMapTotal.put(deviceCode,"该iccid卡号已存在");
|
|
|
errorMsgMap.put("iccid", "该iccid卡号已存在!;");
|
|
|
errorMsg += "该iccid卡号已存在!;";
|
|
|
}
|
|
|
if (org.apache.commons.lang.StringUtils.isNotBlank(imsi) && deviceDetailDao.findByImsi(imsi).size()>0){
|
|
|
errorMsgMapTotal.put(deviceCode,"该imsi卡号已存在");
|
|
|
errorMsgMap.put("imsi", "该imsi卡号已存在!;");
|
|
|
errorMsg += "该imsi卡号已存在!;";
|
|
|
}
|
|
|
if (!StringUtils.isEmpty(errorMsg.trim())) {
|
|
|
deviceDetail.setErrorMsg(errorMsg);
|
|
|
errorLs.add(deviceDetail);
|
|
|
continue;
|
|
|
}
|
|
|
if ("CS-C6Wi-3E4WFR".equals(deviceModel)){//监控器 直播地址开通->关闭视频加密 后续暂时先于APP操作
|
|
|
ysDeviceService.videoOpen(deviceCode,null);
|
|
|
}
|
|
|
deviceDetail.setApplyDate(sdf.format(new Date()));
|
|
|
deviceDetail.setManufacturer(manufacturer);
|
|
|
deviceDetail.setDeviceName(deviceName);
|
|
|
deviceDetail.setDeviceModel(deviceModel);
|
|
|
deviceDetail.setDeviceCode(deviceCode);
|
|
|
deviceDetail.setSim(sim);
|
|
|
Device device = deviceDao.findByModel(deviceModel);
|
|
|
if (device!=null){
|
|
|
deviceDetail.setDeviceType(device.getDeviceType());
|
|
|
deviceDetail.setCategoryCode(device.getCategoryCode());//设备类型判断
|
|
|
if ("1".equals(device.getIsMultiUser())){
|
|
|
deviceDetail.setBindingCount("{\"1\":\"0\",\"2\":\"0\"}");
|
|
|
}else if ("0".equals(device.getIsMultiUser())){
|
|
|
deviceDetail.setBindingCount("{\"1\":\"0\"}");
|
|
|
}
|
|
|
}
|
|
|
correctLs.add(deviceDetail);
|
|
|
}
|
|
|
|
|
|
deviceDetailDao.save(correctLs);
|
|
|
//包装导入结果(导入成功数量、错误对象集合)
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("successNum", correctLs.size());
|
|
|
map.put("failedNum", rows-1 - correctLs.size() );
|
|
|
map.put("errorData", JSON.toJSONString(errorMsgMapTotal, SerializerFeature.WriteMapNullValue));
|
|
|
map.put("errorData", errorLs);
|
|
|
//失败数据下载
|
|
|
if (errorLs.size()>0){
|
|
|
response.setContentType("octets/stream");
|
|
|
response.setHeader("Content-Disposition", "attachment; filename=" + new String("deviceImport.xls"));
|
|
|
OutputStream os = response.getOutputStream();
|
|
|
deviceManageService.write(os, errorLs);
|
|
|
}
|
|
|
|
|
|
return ObjEnvelop.getSuccess("success",JSON.toJSONString(map,SerializerFeature.WriteMapNullValue));
|
|
|
} catch (Exception e) {
|
|
|
failedObjEnvelopException2(e);
|
|
|
}
|
|
|
return ObjEnvelop.getSuccess("success",correctLs.size());
|
|
|
}
|
|
|
|
|
|
@GetMapping(value = "downLoadDeviceModelExcel", produces = "application/json;charset=UTF-8")
|
|
|
@ApiOperation(("模板下载"))
|
|
|
public void downLoadDeviceModelExcel(HttpServletResponse response) {
|
|
|
try {
|
|
|
response.setContentType("octets/stream");
|
|
|
response.setHeader("Content-Disposition", "attachment; filename=" + new String("deviceImport.xls"));
|
|
|
OutputStream os = response.getOutputStream();
|
|
|
deviceManageService.write(os, null);
|
|
|
} catch (Exception ex) {
|
|
|
ex.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/***初始化设备表 设备类型字段****/
|
|
|
@PostMapping("initCategoryCode")
|
|
|
@ApiOperation("设备库存表新增字段初始化")
|
|
|
public Envelop initCategoryCode(){
|
|
|
try {
|
|
|
deviceManageService.initCategoryCode();
|
|
|
return success();
|
|
|
}catch (Exception e){
|
|
|
return failedException2(e);
|
|
|
}
|
|
|
}
|
|
|
}
|