Compare commits

..

17 Commits

44 changed files with 1169 additions and 162 deletions

View File

@ -6,9 +6,13 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://182.40.196.154:3306/wumei2.4-test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: wumei2.4-test
password: JyRiZbFSZZiJBrSa
#url: jdbc:mysql://182.40.196.154:3306/wumei2.4-test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
#username: wumei2.4-test
#password: JyRiZbFSZZiJBrSa
url: jdbc:mysql://w.hanzhenyun.com:3306/wumei2.4?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: wumei2.4
password: rtB8EhbRRYSGyxHw
# 从库数据源
slave:
enabled: false # 从数据源开关/默认关闭

View File

@ -63,6 +63,7 @@ spring:
# 环境配置dev=开发环境prod=生产环境
profiles:
active: dev # 环境配置dev=开发环境prod=生产环境
#active: prod # 环境配置dev=开发环境prod=生产环境
# 资源信息
messages:
# 国际化资源文件路径

View File

@ -61,7 +61,8 @@ public class ResourcesConfig implements WebMvcConfigurer
"/tool/gen/**");
//配置项目数据隔离拦截器
registry.addInterceptor(projectDataIsolationInterceptor)
.addPathPatterns("/gis/groups/**", "/gis/legend/**","/gis/site/**","/project/**","/system/**","/device/statistics/**");
.addPathPatterns("/gis/groups/**", "/gis/legend/**","/gis/site/**","/project/**","/system/**","/device/statistics/**")
.addPathPatterns("/media/yingshiyun/**");
}
/**

View File

@ -33,6 +33,7 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.LocalTime;
@ -119,8 +120,8 @@ public class DeviceOtherMsgConsumer {
LambdaUpdateChainWrapper<DeviceReportInfo> up = new LambdaUpdateChainWrapper<>(deviceReportInfoMapper)
.eq(DeviceReportInfo::getSerialNumber, serialNumber);
//获取流量计累计用水量/瞬时流量
Float meterSum = data1.getFloat("meterSum");
Float meterIns = data1.getFloat("meterIns");
BigDecimal meterSum = data1.getBigDecimal("meterSum");
BigDecimal meterIns = data1.getBigDecimal("meterIns");
//获取瞬时功率/累计电量
Float insPower = data1.getFloat("insPower");
@ -134,7 +135,7 @@ public class DeviceOtherMsgConsumer {
Integer addr = data1.getInt("meterAddr");
//获取水单价
Float waterFees = data1.getFloat("waterFees");
BigDecimal waterFees = data1.getBigDecimal("waterFees");
Integer runStatus = null;
if(valveState==0){
runStatus=2;
@ -151,13 +152,13 @@ public class DeviceOtherMsgConsumer {
up.set(DeviceReportInfo::getAddr,addr);
}
if(waterFees!=null){
up.set(DeviceReportInfo::getWaterFree,waterFees);
up.set(DeviceReportInfo::getWaterFree,waterFees.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
}
if(meterIns!=null){
up.set(DeviceReportInfo::getInsFlow,meterIns);
up.set(DeviceReportInfo::getInsFlow,meterIns.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
}
if(meterSum!=null){
up.set(DeviceReportInfo::getSumFlow,meterSum);
up.set(DeviceReportInfo::getSumFlow,meterSum.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
}
//同步数据
up.update();
@ -185,8 +186,8 @@ public class DeviceOtherMsgConsumer {
LambdaUpdateChainWrapper<DeviceReportInfo> up = new LambdaUpdateChainWrapper<>(deviceReportInfoMapper)
.eq(DeviceReportInfo::getSerialNumber, serialNumber);
//获取流量计累计用水量/瞬时流量
Float meterSum = data1.getFloat("meterSum");
Float meterIns = data1.getFloat("meterIns");
BigDecimal meterSum = data1.getBigDecimal("meterSum");
BigDecimal meterIns = data1.getBigDecimal("meterIns");
//获取瞬时功率/累计电量
Float insPower = data1.getFloat("insPower");
Float sumEle = data1.getFloat("sumEle");
@ -198,7 +199,7 @@ public class DeviceOtherMsgConsumer {
Integer addr = data1.getInt("meterAddr");
//获取水单价
Float waterFees = data1.getFloat("waterFees");
BigDecimal waterFees = data1.getBigDecimal("waterFees");
Integer runStatus = null;
if(valveState==0){
runStatus=2;
@ -215,13 +216,13 @@ public class DeviceOtherMsgConsumer {
up.set(DeviceReportInfo::getAddr,addr);
}
if(waterFees!=null){
up.set(DeviceReportInfo::getWaterFree,waterFees);
up.set(DeviceReportInfo::getWaterFree,waterFees.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
}
if(meterIns!=null){
up.set(DeviceReportInfo::getInsFlow,meterIns);
up.set(DeviceReportInfo::getInsFlow,meterIns.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
}
if(meterSum!=null){
up.set(DeviceReportInfo::getSumFlow,meterSum);
up.set(DeviceReportInfo::getSumFlow,meterSum.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
}
//同步数据
up.update();
@ -285,7 +286,7 @@ public class DeviceOtherMsgConsumer {
ngCardSwipeRecords.setAreaCode(areaCode);//区域号
ngCardSwipeRecords.setCardSwipeType(0);//开阀
ngCardSwipeRecords.setCardSwipeTime(DateUtils.getNowDate());//刷卡时间
ngCardSwipeRecords.setAmountDue(userBalance);//用户余额
ngCardSwipeRecords.setAmountDue(userBalance.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));//用户余额
if(cardInfo!=null && cardInfo.getUserId()!=null){
ngCardSwipeRecords.setUserId(cardList.get(0).getUserId());//用户id
}
@ -300,7 +301,7 @@ public class DeviceOtherMsgConsumer {
}
// userIrrigationRecord.setDeptId(deptId);
//添加一条灌溉记录
DateTime currentTime=DateTime.now();//获取当前时间作为开阀时间
userIrrigationRecord.setStartTime(currentTime);//开阀时间
System.err.println("currentTime"+currentTime);
@ -361,7 +362,7 @@ public class DeviceOtherMsgConsumer {
BigDecimal currentFlow=closeCumFlow.subtract(irrigationRecordList.get(0).getOpenCumFlow());//计算结果为当前用水量
//当前用水量
log.info("设备{}本次灌溉用户当前用水量{}",serialNumber,currentFlow);
userIrrigationRecord.setCurFlow(currentFlow);
userIrrigationRecord.setCurFlow(currentFlow.divide(BigDecimal.valueOf(10000), 2, RoundingMode.HALF_UP));
BigDecimal userBalance=dataJson.getBigDecimal("userBalance");//用户余额
System.err.println("用户余额:"+userBalance);
@ -376,9 +377,18 @@ public class DeviceOtherMsgConsumer {
{
log.error("设备{}灌溉记录修改失败",serialNumber);
}
//同步购水卡余额-----------------------------------
String areaCode=dataJson.getStr("areaCode");
boolean update = new LambdaUpdateChainWrapper<>(userRechargeCardsMapper)
.set(UserRechargeCards::getBalance, userBalance)
.eq(UserRechargeCards::getCardNumber, cardNumber)
.eq(UserRechargeCards::getAreaCode, areaCode)
.update();
if(!update){
log.error("设备{}关阀报文同步购水卡{}余额失败",serialNumber,cardNumber);
}
//添加一条刷卡记录
String areaCode=dataJson.getStr("areaCode");
// UserRechargeCards cardInfo=userRechargeCardsMapper.selectUserRechargeCardsByCardNumberAndAreaCode(cardNumber,areaCode);//查询卡号+区域号信息
NgCardSwipeRecords ngCardSwipeRecords=new NgCardSwipeRecords();
@ -387,7 +397,7 @@ public class DeviceOtherMsgConsumer {
ngCardSwipeRecords.setAreaCode(areaCode);//区域号
ngCardSwipeRecords.setCardSwipeType(1);//关阀
ngCardSwipeRecords.setCardSwipeTime(DateUtils.getNowDate());//刷卡时间
ngCardSwipeRecords.setAmountDue(userBalance);//用户余额
ngCardSwipeRecords.setAmountDue(userBalance.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));//用户余额
// ngCardSwipeRecords.setUserId(cardList.get(0).getUserId());//用户id

View File

@ -1,9 +1,6 @@
package com.fastbee.data.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
@ -60,10 +57,21 @@ public class DeviceReportInfoController extends BaseController
@ApiOperation("查询设备上电审核前上报的基础信息列表")
public TableDataInfo list(DeviceReportInfo deviceReportInfo)
{
System.err.println(deviceReportInfo.getSearchValue());
List<DeviceReportInfo> list=new ArrayList<>();
if(deviceReportInfo.getSearchValue()!=null){
deviceReportInfo.setSerialNumber(deviceReportInfo.getSearchValue());
}
startPage();
List<DeviceReportInfo> list = deviceReportInfoService.selectDeviceReportInfoList(deviceReportInfo);
System.err.println("查询条件:"+deviceReportInfo.getOnLine());
System.err.println("设备总长度:"+list.size());
list = deviceReportInfoService.selectDeviceReportInfoList(deviceReportInfo);
if (list.isEmpty()){
deviceReportInfo.setSerialNumber(null);
deviceReportInfo.setName(deviceReportInfo.getSearchValue());
list = deviceReportInfoService.selectDeviceReportInfoList(deviceReportInfo);
}
//查询设备在线状态
list.forEach(d->{
if(d.getType()==1){
@ -78,6 +86,8 @@ public class DeviceReportInfoController extends BaseController
d.setType(0);
}
});
// //处理在线/离线筛选
// if(deviceReportInfo.getOnLine()!=null){
// //根据online状态的值过滤集合

View File

@ -126,8 +126,8 @@ public class DeviceAlarmController extends BaseController {
* 统计不同设备数量
*/
@GetMapping("/countByType")
public AjaxResult getDeviceCountByType() {
return AjaxResult.success(deviceInformationManager.getAllDeviceCount());
public AjaxResult getDeviceCountByType(Long projectId) {
return AjaxResult.success(deviceInformationManager.getAllDeviceCount(projectId));
}
/**

View File

@ -44,13 +44,14 @@ public class DeviceInfoController extends BaseController {
* 查询全部设备立杆列表
*/
@GetMapping("/allList")
public AjaxResult getAllList() {
public AjaxResult getAllList(Long projectId) {
List<Map<String, Object>> result =new ArrayList<>();
//气象
LambdaQueryWrapper<DeviceInformationMeteorology> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.select(DeviceInformationMeteorology::getId,DeviceInformationMeteorology::getName,
DeviceInformationMeteorology::getLongitude,DeviceInformationMeteorology::getLatitude,
DeviceInformationMeteorology::getDeviceEncoding);
DeviceInformationMeteorology::getDeviceEncoding)
.eq(DeviceInformationMeteorology::getProjectId,projectId);
List<DeviceInformationMeteorology> deviceInformationMeteorologies = deviceInformationMeteorologyMapper.selectList(queryWrapper1);
Map<String,Object> obj1=new HashMap<>();
obj1.put("type","气象");
@ -60,7 +61,8 @@ public class DeviceInfoController extends BaseController {
LambdaQueryWrapper<DeviceInformationWorms> queryWrapper2 = new LambdaQueryWrapper<>();
queryWrapper2.select(DeviceInformationWorms::getId,DeviceInformationWorms::getName,
DeviceInformationWorms::getLongitude,DeviceInformationWorms::getLatitude,
DeviceInformationWorms::getDeviceEncoding);
DeviceInformationWorms::getDeviceEncoding)
.eq(DeviceInformationWorms::getProjectId,projectId);
List<DeviceInformationWorms> deviceInformationWorms = deviceInformationWormsMapper.selectList(queryWrapper2);
Map<String,Object> obj2=new HashMap<>();
obj2.put("type","虫情");
@ -71,7 +73,8 @@ public class DeviceInfoController extends BaseController {
LambdaQueryWrapper<DeviceInformationMoisture> queryWrapper3 = new LambdaQueryWrapper<>();
queryWrapper3.select(DeviceInformationMoisture::getId,DeviceInformationMoisture::getName,
DeviceInformationMoisture::getLongitude,DeviceInformationMoisture::getLatitude,
DeviceInformationMoisture::getDeviceEncoding);
DeviceInformationMoisture::getDeviceEncoding)
.eq(DeviceInformationMoisture::getProjectId,projectId);
List<DeviceInformationMoisture> deviceInformationMoistures = deviceInformationMoistureMapper.selectList(queryWrapper3);
Map<String,Object> obj3=new HashMap<>();
obj3.put("type","墒情");
@ -82,7 +85,8 @@ public class DeviceInfoController extends BaseController {
LambdaQueryWrapper<DeviceInformationTargetpests> queryWrapper4 = new LambdaQueryWrapper<>();
queryWrapper4.select(DeviceInformationTargetpests::getId,DeviceInformationTargetpests::getName,
DeviceInformationTargetpests::getLongitude,DeviceInformationTargetpests::getLatitude,
DeviceInformationTargetpests::getDeviceEncoding);
DeviceInformationTargetpests::getDeviceEncoding)
.eq(DeviceInformationTargetpests::getProjectId,projectId);
List<DeviceInformationTargetpests> deviceInformationTargetpests = deviceInformationTargetpestsMapper.selectList(queryWrapper4);
Map<String,Object> obj4=new HashMap<>();
obj4.put("type","杀虫灯");
@ -93,7 +97,8 @@ public class DeviceInfoController extends BaseController {
LambdaQueryWrapper<DeviceInformationMiaoqing> queryWrapper5 = new LambdaQueryWrapper<>();
queryWrapper5.select(DeviceInformationMiaoqing::getId,DeviceInformationMiaoqing::getName,
DeviceInformationMiaoqing::getLongitude,DeviceInformationMiaoqing::getLatitude,
DeviceInformationMiaoqing::getDeviceEncoding);
DeviceInformationMiaoqing::getDeviceEncoding)
.eq(DeviceInformationMiaoqing::getProjectId,projectId);
List<DeviceInformationMiaoqing> deviceInformationMiaoqings = deviceInformationMiaoqingMapper.selectList(queryWrapper5);
Map<String,Object> obj5=new HashMap<>();
obj5.put("type","苗情");
@ -104,7 +109,8 @@ public class DeviceInfoController extends BaseController {
LambdaQueryWrapper<DeviceInformationMonitor> queryWrapper6 = new LambdaQueryWrapper<>();
queryWrapper6.select(DeviceInformationMonitor::getId,DeviceInformationMonitor::getName,
DeviceInformationMonitor::getLongitude,DeviceInformationMonitor::getLatitude,
DeviceInformationMonitor::getDeviceEncoding);
DeviceInformationMonitor::getDeviceEncoding)
.eq(DeviceInformationMonitor::getProjectId,projectId);
List<DeviceInformationMonitor> deviceInformationMonitors = deviceInformationMonitorMapper.selectList(queryWrapper6);
Map<String,Object> obj6=new HashMap<>();
obj6.put("type","监控");
@ -118,10 +124,11 @@ public class DeviceInfoController extends BaseController {
* 查询气象设备列表
*/
@GetMapping("/weatherList")
public AjaxResult getDeviceList() {
public AjaxResult getDeviceList(Long projectId) {
LambdaQueryWrapper<DeviceInformationMeteorology> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(DeviceInformationMeteorology::getId,DeviceInformationMeteorology::getName,
DeviceInformationMeteorology::getLongitude,DeviceInformationMeteorology::getLatitude);
DeviceInformationMeteorology::getLongitude,DeviceInformationMeteorology::getLatitude)
.eq(DeviceInformationMeteorology::getProjectId,projectId);
return success(deviceInformationMeteorologyMapper.selectList(queryWrapper));
}
@ -130,10 +137,11 @@ public class DeviceInfoController extends BaseController {
* 查询虫情设备列表
*/
@GetMapping("/wormList")
public AjaxResult getWeatherList() {
public AjaxResult getWeatherList(Long projectId) {
LambdaQueryWrapper<DeviceInformationWorms> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(DeviceInformationWorms::getId,DeviceInformationWorms::getName,
DeviceInformationWorms::getLongitude,DeviceInformationWorms::getLatitude);
DeviceInformationWorms::getLongitude,DeviceInformationWorms::getLatitude)
.eq(DeviceInformationWorms::getProjectId,projectId);
return success(deviceInformationWormsMapper.selectList(queryWrapper));
}
@ -141,40 +149,46 @@ public class DeviceInfoController extends BaseController {
* 查询墒情设备列表
*/
@GetMapping("/soilList")
public AjaxResult getSoilList() {
public AjaxResult getSoilList(Long projectId) {
LambdaQueryWrapper<DeviceInformationMoisture> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(DeviceInformationMoisture::getId,DeviceInformationMoisture::getName,
DeviceInformationMoisture::getLongitude,DeviceInformationMoisture::getLatitude);
DeviceInformationMoisture::getLongitude,DeviceInformationMoisture::getLatitude)
.eq(DeviceInformationMoisture::getProjectId,projectId);
return success(deviceInformationMoistureMapper.selectList(queryWrapper));
}
/**
* 查询杀虫灯设备列表
*/
@GetMapping("/lightList")
public AjaxResult getLightList() {
public AjaxResult getLightList(Long projectId) {
LambdaQueryWrapper<DeviceInformationTargetpests> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(DeviceInformationTargetpests::getId,DeviceInformationTargetpests::getName,
DeviceInformationTargetpests::getLongitude,DeviceInformationTargetpests::getLatitude);
DeviceInformationTargetpests::getLongitude,DeviceInformationTargetpests::getLatitude)
.eq(DeviceInformationTargetpests::getProjectId,projectId);
return success(deviceInformationTargetpestsMapper.selectList(queryWrapper));
}
/**
* 查询苗情设备列表
*/
@GetMapping("/miaoList")
public AjaxResult getmiaoList() {
public AjaxResult getmiaoList(Long projectId) {
LambdaQueryWrapper<DeviceInformationMiaoqing> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(DeviceInformationMiaoqing::getId,DeviceInformationMiaoqing::getName,
DeviceInformationMiaoqing::getLongitude,DeviceInformationMiaoqing::getLatitude);
DeviceInformationMiaoqing::getLongitude,DeviceInformationMiaoqing::getLatitude)
.eq(DeviceInformationMiaoqing::getProjectId,projectId);
return success(deviceInformationMiaoqingMapper.selectList(queryWrapper));
}
/**
* 查询监控站设备列表
*/
@GetMapping("/monitorList")
public AjaxResult getmonitorList() {
public AjaxResult getmonitorList(Long projectId) {
LambdaQueryWrapper<DeviceInformationMonitor> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(DeviceInformationMonitor::getId,DeviceInformationMonitor::getName,
DeviceInformationMonitor::getLongitude,DeviceInformationMonitor::getLatitude);
DeviceInformationMonitor::getLongitude,DeviceInformationMonitor::getLatitude)
.eq(DeviceInformationMonitor::getProjectId,projectId);
return success(deviceInformationMonitorMapper.selectList(queryWrapper));
}
}

View File

@ -3,6 +3,7 @@ package com.fastbee.data.controller.aaScreenAgricultural.deviceBaseInfo;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.fastbee.deviceInfo.mapper.DeviceInformationMeteorologyMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
@ -35,11 +36,13 @@ public class DeviceInformationMeteorologyController extends BaseController
{
@Autowired
private IDeviceInformationMeteorologyService deviceInformationMeteorologyService;
@Autowired
private DeviceInformationMeteorologyMapper deviceInformationMeteorologyMapper;
/**
* 查询气象设备基础信息列表
*/
@PreAuthorize("@ss.hasPermi('deviceInfo:meteorology:list')")
//@PreAuthorize("@ss.hasPermi('deviceInfo:meteorology:list')")
@GetMapping("/list")
@ApiOperation("查询气象设备基础信息列表")
public TableDataInfo list(DeviceInformationMeteorology deviceInformationMeteorology)
@ -75,7 +78,7 @@ public class DeviceInformationMeteorologyController extends BaseController
/**
* 新增气象设备基础信息
*/
@PreAuthorize("@ss.hasPermi('deviceInfo:meteorology:add')")
//@PreAuthorize("@ss.hasPermi('deviceInfo:meteorology:add')")
@PostMapping
@ApiOperation("新增气象设备基础信息")
public AjaxResult add(@RequestBody DeviceInformationMeteorology deviceInformationMeteorology)
@ -86,7 +89,7 @@ public class DeviceInformationMeteorologyController extends BaseController
/**
* 修改气象设备基础信息
*/
@PreAuthorize("@ss.hasPermi('deviceInfo:meteorology:edit')")
//@PreAuthorize("@ss.hasPermi('deviceInfo:meteorology:edit')")
@PutMapping
@ApiOperation("修改气象设备基础信息")
public AjaxResult edit(@RequestBody DeviceInformationMeteorology deviceInformationMeteorology)
@ -97,11 +100,13 @@ public class DeviceInformationMeteorologyController extends BaseController
/**
* 删除气象设备基础信息
*/
@PreAuthorize("@ss.hasPermi('deviceInfo:meteorology:remove')")
@DeleteMapping("/{ids}")
//@PreAuthorize("@ss.hasPermi('deviceInfo:meteorology:remove')")
@DeleteMapping("/{id}")
@ApiOperation("删除气象设备基础信息")
public AjaxResult remove(@PathVariable Long[] ids)
public AjaxResult remove(@PathVariable Long id)
{
return toAjax(deviceInformationMeteorologyService.deleteDeviceInformationMeteorologyByIds(ids));
int flag=deviceInformationMeteorologyMapper.deleteDeviceInformationMeteorologyById(id);
return toAjax(flag);
//return toAjax(deviceInformationMeteorologyService.deleteDeviceInformationMeteorologyByIds(ids));
}
}

View File

@ -3,6 +3,7 @@ package com.fastbee.data.controller.aaScreenAgricultural.deviceBaseInfo;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.fastbee.deviceInfo.mapper.DeviceInformationMonitorMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
@ -35,11 +36,13 @@ public class DeviceInformationMonitorController extends BaseController
{
@Autowired
private IDeviceInformationMonitorService deviceInformationMonitorService;
@Autowired
private DeviceInformationMonitorMapper deviceInformationMonitorMapper;
/**
* 查询监控站设备基础信息列表
*/
@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:list')")
//@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:list')")
@GetMapping("/list")
@ApiOperation("查询监控站设备基础信息列表")
public TableDataInfo list(DeviceInformationMonitor deviceInformationMonitor)
@ -53,7 +56,7 @@ public class DeviceInformationMonitorController extends BaseController
* 导出监控站设备基础信息列表
*/
@ApiOperation("导出监控站设备基础信息列表")
@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:export')")
//@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, DeviceInformationMonitor deviceInformationMonitor)
{
@ -75,7 +78,7 @@ public class DeviceInformationMonitorController extends BaseController
/**
* 新增监控站设备基础信息
*/
@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:add')")
//@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:add')")
@PostMapping
@ApiOperation("新增监控站设备基础信息")
public AjaxResult add(@RequestBody DeviceInformationMonitor deviceInformationMonitor)
@ -86,7 +89,7 @@ public class DeviceInformationMonitorController extends BaseController
/**
* 修改监控站设备基础信息
*/
@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:edit')")
//@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:edit')")
@PutMapping
@ApiOperation("修改监控站设备基础信息")
public AjaxResult edit(@RequestBody DeviceInformationMonitor deviceInformationMonitor)
@ -97,11 +100,13 @@ public class DeviceInformationMonitorController extends BaseController
/**
* 删除监控站设备基础信息
*/
@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:remove')")
@DeleteMapping("/{ids}")
//@PreAuthorize("@ss.hasPermi('deviceInfo:monitor:remove')")
@DeleteMapping("/{id}")
@ApiOperation("删除监控站设备基础信息")
public AjaxResult remove(@PathVariable Long[] ids)
public AjaxResult remove(@PathVariable Long id)
{
return toAjax(deviceInformationMonitorService.deleteDeviceInformationMonitorByIds(ids));
//return toAjax(deviceInformationMonitorService.deleteDeviceInformationMonitorByIds(ids));
int flag=deviceInformationMonitorMapper.deleteDeviceInformationMonitorById(id);
return toAjax(flag);
}
}

View File

@ -21,8 +21,8 @@ public class DeviceRealtimedataMeteorologyController {
* 获取最新的一条气象数据
*/
@GetMapping(value = "/weather/realtimedata")
public AjaxResult getLatestWeatherRealtimedata() {
return AjaxResult.success(deviceRealtimedataMeteorologyService.getLatestWeatherRealtimedata());
public AjaxResult getLatestWeatherRealtimedata(String deviceEncoding) {
return AjaxResult.success(deviceRealtimedataMeteorologyService.getLatestWeatherRealtimedata(deviceEncoding));
}
}

View File

@ -2,6 +2,7 @@ package com.fastbee.data.controller.aaScreenAgricultural.deviceRealTimeData;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.common.holder.ProjectHolder;
import com.fastbee.deviceData.api.yingshiyun.service.YingshiyunService;
import com.fastbee.deviceInfo.domain.DeviceInformationMonitor;
import com.fastbee.deviceInfo.mapper.DeviceInformationMonitorMapper;
@ -30,14 +31,24 @@ public class DeviceRealtimedataSeedlingGrowthController {
* 获取苗情监测监控设备列表
*/
@GetMapping("/monitorDeviceList")
public AjaxResult getMonitorDeviceList() {
public AjaxResult getMonitorDeviceList(Long projectId) {
System.err.println("/monitorDeviceList");
System.err.println("projectId:"+projectId);
List<DeviceInformationMonitor> list = new LambdaQueryChainWrapper<>(monitorMapper)
.select(DeviceInformationMonitor::getId,
DeviceInformationMonitor::getName,
DeviceInformationMonitor::getDeviceEncoding,
DeviceInformationMonitor::getLatitude,
DeviceInformationMonitor::getLongitude)
DeviceInformationMonitor::getLongitude,
DeviceInformationMonitor::getRemarksInformation,
DeviceInformationMonitor::getProjectId)
.eq(DeviceInformationMonitor::getProjectId,projectId)
//.eq(DeviceInformationMonitor::getDeviceEncoding,deviceEncoding)
.list();
for(int i=0;i<list.size();i++)
{
System.err.println("{"+list.get(i).getDeviceEncoding()+":"+list.get(i).getProjectId()+"}");
}
//获取监控播放地址
list.forEach(this::setPlayUrl);
return AjaxResult.success(list);
@ -57,5 +68,23 @@ public class DeviceRealtimedataSeedlingGrowthController {
Object accessToken = videoPlayMap.get("accessToken");
monitor.setAccessToken(accessToken.toString());
}
if(videoPlayMap.containsKey("status")){
Object status=videoPlayMap.get("status");//设备在线状态0=离线1=在线
Object statusDesc=videoPlayMap.get("statusDesc");//设备在线状态描述
monitor.setStatusDesc(statusDesc.toString());
monitor.setStatus((Long) status);
}
}
/**
* 更新设备状态测试接口
* @return
* @throws Exception
*/
@GetMapping("/status")
public AjaxResult getMonitorDeviceRealtimeStatusData() throws Exception {
return AjaxResult.success(yingshiyunService.getMonitorDeviceRealtimeStatusData());
}
}

View File

@ -6,6 +6,7 @@ import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.json.ObjectMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.dtflys.forest.annotation.Success;
import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.core.domain.AjaxResult;
@ -141,9 +142,19 @@ public class WeChatPayController extends BaseController {
System.out.println("生成订单");
int flag=0;
List<NgMerchants> merchantsList=new LambdaQueryChainWrapper<>(ngMerchantsMapper)
.eq(NgMerchants::getAreaCode,String.valueOf(recharge.getAreacode()))
.list();
if(merchantsList.size()==0)
{
return error("不存在此区域号对应的商户");
}
NgMerchants ngMerchants=merchantsList.get(0);
recharge.setDeptId(ngMerchants.getDeptId());
UserRechargeCards userRechargeCards=new UserRechargeCards();
userRechargeCards.setCardNumber(String.valueOf(recharge.getCardnumber()));
userRechargeCards.setAreaCode(String.valueOf(recharge.getAreacode()));
userRechargeCards.setDeptId(recharge.getDeptId());
List<UserRechargeCards> list=userRechargeCardsMapper.selectUserRechargeCardsList(userRechargeCards);
if(list.size()==0)

View File

@ -100,13 +100,15 @@ public class DeviceReportSSEController extends BaseController {
return AjaxResultPro.success(1102,"voiceType不能为空!",null);
}
if(StringUtils.isBlank(reportInfo.getFacType())){
return AjaxResultPro.success(111,"facType不能为空!",null);
return AjaxResultPro.success(1102,"facType不能为空!",null);
}
if(StringUtils.isBlank(reportInfo.getTestRecord())){
return AjaxResultPro.success(111,"testRecord不能为空!",null);
return AjaxResultPro.success(1102,"testRecord不能为空!",null);
}
if(StringUtils.isBlank(reportInfo.getAreaCode())){
return AjaxResultPro.success(1102,"areaCode不能为空!",null);
}
// String deviceNumber = generateDeviceNumber();
//映射字段
@ -123,6 +125,7 @@ public class DeviceReportSSEController extends BaseController {
deviceReportInfo.setVoiceManufacturer(Long.valueOf(reportInfo.getVoiceType()));
deviceReportInfo.setReplaceManufacturer(Long.valueOf(reportInfo.getFacType()));
deviceReportInfo.setTestRecord(reportInfo.getTestRecord());
deviceReportInfo.setAreaCode(reportInfo.getAreaCode());
//设置状态为未审核
deviceReportInfo.setStatus(0);
//设备编码查重
@ -152,6 +155,7 @@ public class DeviceReportSSEController extends BaseController {
.set(DeviceReportInfo::getVoiceManufacturer, Long.valueOf(reportInfo.getVoiceType()))
.set(DeviceReportInfo::getReplaceManufacturer, Long.valueOf(reportInfo.getFacType()))
.set(DeviceReportInfo::getTestRecord,reportInfo.getTestRecord())
.set(DeviceReportInfo::getAreaCode,reportInfo.getAreaCode())
.eq(DeviceReportInfo::getImei, deviceReportInfo.getImei())
.update();
if (update) {
@ -187,7 +191,7 @@ public class DeviceReportSSEController extends BaseController {
if(inserted==0){
return AjaxResultPro.success(1104,"设备上电审核信息插入失败!",null);
}
//插入成功后,插入设备信息
//插入成功后,插入设备信息----------------------------------------------插入即可mqtt连接--------------------------------
Device device= new Device();
device.setDeviceName(genDeviceNumber);
device.setProductName("内乡县水电双计设备02");

View File

@ -18,16 +18,16 @@ public class WeatherController {
* 获取七天的天气预报
*/
@GetMapping("/qitian")
public AjaxResult getWeather() {
return AjaxResult.success(TianqiApi.QitianApi());
public AjaxResult getWeather(Long projectId) {
return AjaxResult.success(TianqiApi.QitianApi(projectId));
}
/**
* 获取实时天气
*/
@GetMapping("/shishi")
public AjaxResult getWeatherShiShi() {
return AjaxResult.success(TianqiApi.weatherNow());
public AjaxResult getWeatherShiShi(Long projectId) {
return AjaxResult.success(TianqiApi.weatherNow(projectId));
}
}

View File

@ -0,0 +1,110 @@
package com.fastbee.data.controller.yingshiIntegration;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.fastbee.common.annotation.Log;
import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.common.enums.BusinessType;
import com.fastbee.deviceData.domain.NgYingshiCloudIntegrationInfo;
import com.fastbee.deviceData.service.INgYingshiCloudIntegrationInfoService;
import com.fastbee.common.utils.poi.ExcelUtil;
import com.fastbee.common.core.page.TableDataInfo;
/**
* 萤石云对接信息Controller
*
* @author kerwincui
* @date 2025-01-09
*/
@RestController
@RequestMapping("/deviceData/info")
@Api(tags = "萤石云对接信息")
public class NgYingshiCloudIntegrationInfoController extends BaseController
{
@Autowired
private INgYingshiCloudIntegrationInfoService ngYingshiCloudIntegrationInfoService;
/**
* 查询萤石云对接信息列表
*/
@PreAuthorize("@ss.hasPermi('deviceData:info:list')")
@GetMapping("/list")
@ApiOperation("查询萤石云对接信息列表")
public TableDataInfo list(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo)
{
startPage();
List<NgYingshiCloudIntegrationInfo> list = ngYingshiCloudIntegrationInfoService.selectNgYingshiCloudIntegrationInfoList(ngYingshiCloudIntegrationInfo);
return getDataTable(list);
}
/**
* 导出萤石云对接信息列表
*/
@ApiOperation("导出萤石云对接信息列表")
@PreAuthorize("@ss.hasPermi('deviceData:info:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo)
{
List<NgYingshiCloudIntegrationInfo> list = ngYingshiCloudIntegrationInfoService.selectNgYingshiCloudIntegrationInfoList(ngYingshiCloudIntegrationInfo);
ExcelUtil<NgYingshiCloudIntegrationInfo> util = new ExcelUtil<NgYingshiCloudIntegrationInfo>(NgYingshiCloudIntegrationInfo.class);
util.exportExcel(response, list, "萤石云对接信息数据");
}
/**
* 获取萤石云对接信息详细信息
*/
@PreAuthorize("@ss.hasPermi('deviceData:info:query')")
@GetMapping(value = "/{id}")
@ApiOperation("获取萤石云对接信息详细信息")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(ngYingshiCloudIntegrationInfoService.selectNgYingshiCloudIntegrationInfoById(id));
}
/**
* 新增萤石云对接信息
*/
@PreAuthorize("@ss.hasPermi('deviceData:info:add')")
@PostMapping
@ApiOperation("新增萤石云对接信息")
public AjaxResult add(@RequestBody NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo)
{
return toAjax(ngYingshiCloudIntegrationInfoService.insertNgYingshiCloudIntegrationInfo(ngYingshiCloudIntegrationInfo));
}
/**
* 修改萤石云对接信息
*/
@PreAuthorize("@ss.hasPermi('deviceData:info:edit')")
@PutMapping
@ApiOperation("修改萤石云对接信息")
public AjaxResult edit(@RequestBody NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo)
{
return toAjax(ngYingshiCloudIntegrationInfoService.updateNgYingshiCloudIntegrationInfo(ngYingshiCloudIntegrationInfo));
}
/**
* 删除萤石云对接信息
*/
@PreAuthorize("@ss.hasPermi('deviceData:info:remove')")
@DeleteMapping("/{ids}")
@ApiOperation("删除萤石云对接信息")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(ngYingshiCloudIntegrationInfoService.deleteNgYingshiCloudIntegrationInfoByIds(ids));
}
}

View File

@ -15,11 +15,19 @@ public class TianqiApi {
/**
* 获取未来天气预测
*/
public static JSONObject QitianApi() {
public static JSONObject QitianApi(Long projectId) {
String location="";
if(projectId==35){//黑龙江项目
location="YBMUBR41ZWVC";
}else if(projectId==39){//开鲁
location="WXY201PUQV5D";
}
// System.out.println(location);
String url = UrlConstant.QitianApi + "?key=" +
UrlConstant.PrivateKey +
"&location=YBMUBR41ZWVC&language=zh-Hans&unit=c";//指定URL
"&location="+location+"&language=zh-Hans&unit=c";//指定URL
// System.out.println(url);
HttpResponse execute = HttpUtil.createGet(url).execute();
if (execute.getStatus() == HttpStatus.HTTP_OK) {
JSONObject jsonObject = new JSONObject(execute.body());
@ -33,10 +41,19 @@ public class TianqiApi {
/**
* 获取天气实况
*/
public static JSONObject weatherNow() {
public static JSONObject weatherNow(Long projectId) {
String location="";
if(projectId==35){//黑龙江项目
location="YBMUBR41ZWVC";
}else if(projectId==39){//开鲁项目
location="WXY201PUQV5D";
}
// System.out.println(location);
String url = UrlConstant.ShishiApi + "?key=" +
UrlConstant.PrivateKey +
"&location=YBMUBR41ZWVC&language=zh-Hans&unit=c";//指定URL
"&location="+location+"&language=zh-Hans&unit=c";//指定URL
// System.out.println(url);
HttpResponse execute = HttpUtil.createGet(url).execute();
if (execute.getStatus() == HttpStatus.HTTP_OK) {
JSONObject jsonObject = new JSONObject(execute.body());
@ -71,7 +88,15 @@ public class TianqiApi {
return null;
}
public static void main(String[] args) {
TianqiApi.weatherNow();
public static void main(String[] args)
{
TianqiApi.weatherNow(39L);
/*String url="https://api.seniverse.com/v3/location/search.json?key="+UrlConstant.PrivateKey
+"&q="+"开鲁";
HttpResponse execute = HttpUtil.createGet(url).execute();
if (execute.getStatus() == HttpStatus.HTTP_OK) {
JSONObject jsonObject = new JSONObject(execute.body());
System.out.println("jsonObject = " + jsonObject);
}*/
}
}

View File

@ -4,8 +4,17 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.fastbee.common.holder.ProjectHolder;
import com.fastbee.deviceData.domain.NgYingshiCloudIntegrationInfo;
import com.fastbee.deviceData.mapper.NgYingshiCloudIntegrationInfoMapper;
import com.fastbee.deviceInfo.domain.DeviceInformationMonitor;
import com.fastbee.deviceInfo.mapper.DeviceInformationMonitorMapper;
import com.fastbee.deviceInfo.service.IDeviceInformationMonitorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@ -13,8 +22,10 @@ import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
@ -22,16 +33,101 @@ public class YingshiyunService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private DeviceInformationMonitorMapper deviceInformationMonitorMapper;
@Autowired
private NgYingshiCloudIntegrationInfoMapper ngYingshiCloudIntegrationInfoMapper;
@Autowired
private DeviceInformationMonitorMapper monitorMapper;
@Autowired
private NgYingshiCloudIntegrationInfoMapper yingshiCloudIntegrationInfoMapper;
@Autowired
private IDeviceInformationMonitorService deviceInformationMonitorService;
/**
* 获取监控设备实时状态并更新
*/
public String getMonitorDeviceRealtimeStatusData() throws Exception{
try{
//获取所有监控设备编码列表
List<DeviceInformationMonitor> monitorList=new LambdaQueryChainWrapper<>(monitorMapper)
.select(DeviceInformationMonitor::getDeviceEncoding,DeviceInformationMonitor::getStatus,DeviceInformationMonitor::getId,DeviceInformationMonitor::getProjectId)
.list();
System.err.println("monitorLIST:"+monitorList);
//获取所有萤石云对接信息列表
List<NgYingshiCloudIntegrationInfo> integrationInfoList=new LambdaQueryChainWrapper<>(yingshiCloudIntegrationInfoMapper)
.select(NgYingshiCloudIntegrationInfo::getAppkey,NgYingshiCloudIntegrationInfo::getAppsecret,NgYingshiCloudIntegrationInfo::getProjectid)
.list();
System.err.println("integrationInfoList:"+integrationInfoList);
//根据projectId进行分组
Map<Long, List<DeviceInformationMonitor>> collect = monitorList.stream().collect(Collectors.groupingBy(DeviceInformationMonitor::getProjectId));
System.err.println("collect:"+collect);
if(integrationInfoList.size()==0)
{
System.err.println("设备信息不存在");
}
//k为projectIdv为projectId下的设备列表
collect.forEach((k,v)->{
System.err.println("k:"+k);
System.err.println("v:"+v);
//获取萤石云对接信息
List<NgYingshiCloudIntegrationInfo> list = new LambdaQueryChainWrapper<>(yingshiCloudIntegrationInfoMapper)
.select(NgYingshiCloudIntegrationInfo::getAppkey, NgYingshiCloudIntegrationInfo::getAppsecret)
.eq(NgYingshiCloudIntegrationInfo::getProjectid, k)
.list();
NgYingshiCloudIntegrationInfo yingshiCloudIntegrationInfo;
if(!list.isEmpty())
{
yingshiCloudIntegrationInfo=list.get(0);
//获取accessToken
String accessToken=getAuth(yingshiCloudIntegrationInfo.getAppkey(),yingshiCloudIntegrationInfo.getAppsecret());
//获取设备信息列表
int page=0;
JSONObject deviceInfoList = getInfoList(accessToken);
JSONArray data= deviceInfoList.getJSONArray("data");
System.err.println("data:"+data);
data.forEach(d->{
JSONObject object = JSONUtil.parseObj(d.toString());
String deviceSerial=object.getStr("deviceSerial");//设备编码
Long status=object.getLong("status");//设备状态
for(DeviceInformationMonitor device:v)
{
if(device.getDeviceEncoding().equals(deviceSerial))
{
device.setStatus(status);//设置status0=离线1=在线
break;
}
}
});
}
//批量更新设备状态数据
boolean flag=deviceInformationMonitorService.updateBatchById(v);
if(!flag)
{
System.err.println("监控设备状态更新失败");
}
});
}catch (Exception e){
System.err.println("获取监控设备实时状态失败"+e.getMessage());
}
return "";
}
//获取鉴权
public String getAuth(){
if(Boolean.TRUE.equals(stringRedisTemplate.hasKey("yingshiyun:user:accessToken"))){
public String getAuth(String appKey,String appSecret){
/*if(Boolean.TRUE.equals(stringRedisTemplate.hasKey("yingshiyun:user:accessToken"))){
System.err.println(stringRedisTemplate.opsForValue().get("yingshiyun:user:accessToken"));
return stringRedisTemplate.opsForValue().get("yingshiyun:user:accessToken");
}*/
if(Boolean.TRUE.equals(stringRedisTemplate.hasKey("yingshiyun:user"+appKey+":"+appSecret+":accessToken"))){
System.err.println(stringRedisTemplate.opsForValue().get("yingshiyun:user"+appKey+":"+appSecret+":accessToken"));
return stringRedisTemplate.opsForValue().get("yingshiyun:user"+appKey+":"+appSecret+":accessToken");
}
// 鉴权请求
String AUTH_URL = "https://open.ys7.com/api/lapp/token/get";
String appKey = "b21f910dc7044d668e7625a3c0392e62";
String appSecret = "b4beff5f8f6694dd6993c8c5b618417b";
/*String appKey = "b21f910dc7044d668e7625a3c0392e62";
String appSecret = "b4beff5f8f6694dd6993c8c5b618417b";*/
// 构建请求体参数
String body = StrUtil.format("appKey={}&appSecret={}", appKey, appSecret);
HttpResponse response = HttpRequest.post(AUTH_URL)
@ -45,21 +141,84 @@ public class YingshiyunService {
JSONObject data = JSONUtil.parseObj(jsonObject.get("data"));
String accessToken = data.get("accessToken").toString();
stringRedisTemplate.opsForValue().set("yingshiyun:user:accessToken",accessToken, 60*60*24*6, TimeUnit.MILLISECONDS);
//stringRedisTemplate.opsForValue().set("yingshiyun:user:accessToken",accessToken, 60*60*24*6, TimeUnit.MILLISECONDS);
stringRedisTemplate.opsForValue().set("yingshiyun:user"+appKey+":"+appSecret+":accessToken",accessToken, 60*60*24*6, TimeUnit.MILLISECONDS);
return accessToken;
}
//获取视频播放地址
public Map<String,Object> getVideoPlayUrl(String deviceSerial){
String accessToken = getAuth();
// System.err.println(accessToken);
/**
* 根据设备编码查找项目id根据项目id查找萤石云对接账号信息
*/
System.err.println("deviceSerial:"+deviceSerial);
Map<String,Object> map = new HashMap<>();
List<DeviceInformationMonitor> monitorList=new LambdaQueryChainWrapper<>(deviceInformationMonitorMapper)
.select(DeviceInformationMonitor::getProjectId)
.eq(DeviceInformationMonitor::getDeviceEncoding,deviceSerial)
.list();
if(monitorList.size()==0)
{
System.err.println("设备信息未找到");
return map;
}
Long projectId=monitorList.get(0).getProjectId();
/*String projectId=ProjectHolder.getProjectInfo().getProjectId();
System.err.println("projectId:"+projectId);*/
List<NgYingshiCloudIntegrationInfo> infoList=new LambdaQueryChainWrapper<>(ngYingshiCloudIntegrationInfoMapper)
.select(NgYingshiCloudIntegrationInfo::getAppkey,NgYingshiCloudIntegrationInfo::getAppsecret)
.eq(NgYingshiCloudIntegrationInfo::getProjectid,projectId)
.list();
if(infoList.size()==0)
{
System.err.println("萤石云信息不存在");
return map;
}
String accessToken = getAuth(infoList.get(0).getAppkey(),infoList.get(0).getAppsecret());
System.err.println(accessToken);
/**
* 获取单个设备信息,包括设备在线状态和设备是否加密
*/
Map<String,Object> info=getInfo(accessToken,deviceSerial);
Long status= (Long) info.get("status"); //设备状态。0=离线1=在线
String statusDesc= info.get("statusDesc").toString();//设备状态描述
int isEncrypt= (int) info.get("isEncrypt");//设备是否加密1=加密
//在数据库中更新设备状态为当前状态
new LambdaUpdateChainWrapper<>(deviceInformationMonitorMapper)
.set(DeviceInformationMonitor::getStatus,status)
.eq(DeviceInformationMonitor::getDeviceEncoding,deviceSerial)
.update();
System.err.println("更新数据库状态为"+status);
if(status==0)
{
map.put("status",status);
map.put("statusDesc","离线");
return map;
}
if(isEncrypt==1)
{
//解密
int decryptFlag=decrypt(accessToken,deviceSerial);//设备解密,1=解密成功
if(decryptFlag!=1)
{
return map;
}
}
/**
* 获取设备播放地址
*/
String VIDEO_PLAY_URL = "https://open.ys7.com/api/lapp/v2/live/address/get";
String body = StrUtil.format("accessToken={}&deviceSerial={}&protocol={}",accessToken ,deviceSerial,"2");
HttpResponse response = HttpRequest.post(VIDEO_PLAY_URL)
.body(body).execute();
JSONObject jsonObject = JSONUtil.parseObj(response.body());
Map<String,Object> map = new HashMap<>();
System.err.println("jsonObject:"+jsonObject);
if(!jsonObject.get("code").toString().equals("200")){
return map;
}
@ -71,10 +230,84 @@ public class YingshiyunService {
map.put("playUrl",playUrl);
map.put("accessToken",accessToken);
map.put("status",status);//设备在线状态-0=离线1=在线
map.put("statusDesc",statusDesc);//状态描述
System.err.println("playUrl:"+playUrl);
System.err.println("accessToken:"+accessToken);
System.err.println("status:"+status);
System.err.println("statusDesc:"+statusDesc);
return map;
}
/**
* 获取单个设备信息,包括在线状态和是否加密
* @param accessToken
* @param deviceSerial
* @return
*/
public Map<String,Object> getInfo(String accessToken,String deviceSerial)
{
Map<String,Object> map = new HashMap<>();//结果
String INFO_URL="https://open.ys7.com/api/lapp/device/info";//获取单个设备信息接口地址
String infoBody=StrUtil.format("accessToken={}&deviceSerial={}",accessToken,deviceSerial);
HttpResponse infoResponse=HttpRequest.post(INFO_URL)
.body(infoBody).execute();
if(!JSONUtil.parseObj(infoResponse.body()).get("code").toString().equals("200"))
{
return map;
}
JSONObject infoData=JSONUtil.parseObj(infoResponse.body()).getJSONObject("data");
Long status=infoData.getLong("status");//获取设备在线状态
String statusDesc= status==0 ? "离线" : "在线";//如果status是0则是离线否则是在线
int isEncrypt=infoData.getInt("isEncrypt");//设备是否加密0-不加密1-加密
map.put("status",status);
map.put("statusDesc",statusDesc);
map.put("isEncrypt",isEncrypt);
return map;
}
/**
* 设备解密
* @param accessToken
* @param deviceSerial
* @return
*/
public int decrypt(String accessToken,String deviceSerial)
{
//设备解密,1=成功
String VIDEO_DECODE_URL = "https://open.ys7.com/api/lapp/device/encrypt/off";
String decodeBody=StrUtil.format("accessToken={}&deviceSerial={}",accessToken ,deviceSerial);
HttpResponse decodeResponse=HttpRequest.post(VIDEO_DECODE_URL).body(decodeBody).execute();
JSONObject decodeJsonObject=JSONUtil.parseObj(decodeResponse.body());
System.err.println("decodeJsonObject:"+decodeJsonObject);
if(!decodeJsonObject.get("code").toString().equals("200"))
{
return 0;
}
return 1;
}
/**
* 获取设备信息列表,包括在线状态和是否加密
* @param accessToken
* @return
*/
public JSONObject getInfoList(String accessToken)
{
String INFO_URL="https://open.ys7.com/api/lapp/device/list";//获取单个设备信息接口地址
String infoBody=StrUtil.format("accessToken={}",accessToken);
HttpResponse infoResponse=HttpRequest.post(INFO_URL)
.body(infoBody).execute();
if(!JSONUtil.parseObj(infoResponse.body()).get("code").toString().equals("200"))
{
return null;
}
JSONObject response=JSONUtil.parseObj(infoResponse.body());
return response;
}

View File

@ -0,0 +1,65 @@
package com.fastbee.deviceData.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.fastbee.common.annotation.Excel;
import com.fastbee.common.core.domain.BaseEntity;
/**
* 萤石云对接信息对象 ng_yingshi_cloud_integration_info
*
* @author kerwincui
* @date 2025-01-09
*/
@ApiModel(value = "NgYingshiCloudIntegrationInfo",description = "萤石云对接信息 ng_yingshi_cloud_integration_info")
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ng_yingshi_cloud_integration_info")
public class NgYingshiCloudIntegrationInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键ID */
private Long id;
/** 机构id */
@Excel(name = "机构id")
@ApiModelProperty("机构id")
private Long deptid;
/** 项目id */
@Excel(name = "项目id")
@ApiModelProperty("项目id")
private Long projectid;
/** 用户id */
@Excel(name = "用户id")
@ApiModelProperty("用户id")
private Long userid;
/** 获取token所需appkey */
@Excel(name = "获取token所需appkey")
@ApiModelProperty("获取token所需appkey")
private String appkey;
/** 获取token所需appSecret */
@Excel(name = "获取token所需appSecret")
@ApiModelProperty("获取token所需appSecret")
private String appsecret;
/** 萤石云登陆账号 */
@Excel(name = "萤石云登陆账号")
@ApiModelProperty("萤石云登陆账号")
private String yingshiAccount;
/** 萤石云登陆密码 */
@Excel(name = "萤石云登陆密码")
@ApiModelProperty("萤石云登陆密码")
private String yingshiPwd;
}

View File

@ -0,0 +1,65 @@
package com.fastbee.deviceData.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fastbee.deviceData.domain.NgYingshiCloudIntegrationInfo;
import org.apache.ibatis.annotations.Mapper;
/**
* 萤石云对接信息Mapper接口
*
* @author kerwincui
* @date 2025-01-09
*/
@Mapper
public interface NgYingshiCloudIntegrationInfoMapper extends BaseMapper<NgYingshiCloudIntegrationInfo>
{
/**
* 查询萤石云对接信息
*
* @param id 萤石云对接信息主键
* @return 萤石云对接信息
*/
public NgYingshiCloudIntegrationInfo selectNgYingshiCloudIntegrationInfoById(Long id);
/**
* 查询萤石云对接信息列表
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 萤石云对接信息集合
*/
public List<NgYingshiCloudIntegrationInfo> selectNgYingshiCloudIntegrationInfoList(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo);
/**
* 新增萤石云对接信息
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 结果
*/
public int insertNgYingshiCloudIntegrationInfo(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo);
/**
* 修改萤石云对接信息
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 结果
*/
public int updateNgYingshiCloudIntegrationInfo(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo);
/**
* 删除萤石云对接信息
*
* @param id 萤石云对接信息主键
* @return 结果
*/
public int deleteNgYingshiCloudIntegrationInfoById(Long id);
/**
* 批量删除萤石云对接信息
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteNgYingshiCloudIntegrationInfoByIds(Long[] ids);
}

View File

@ -68,5 +68,5 @@ public interface IDeviceRealtimedataMeteorologyService extends IService<DeviceRe
* 获取最新的一条气象数据
* @return
*/
public Map<String,Object> getLatestWeatherRealtimedata();
public Map<String,Object> getLatestWeatherRealtimedata(String deviceEncoding);
}

View File

@ -0,0 +1,61 @@
package com.fastbee.deviceData.service;
import java.util.List;
import com.fastbee.deviceData.domain.NgYingshiCloudIntegrationInfo;
/**
* 萤石云对接信息Service接口
*
* @author kerwincui
* @date 2025-01-09
*/
public interface INgYingshiCloudIntegrationInfoService
{
/**
* 查询萤石云对接信息
*
* @param id 萤石云对接信息主键
* @return 萤石云对接信息
*/
public NgYingshiCloudIntegrationInfo selectNgYingshiCloudIntegrationInfoById(Long id);
/**
* 查询萤石云对接信息列表
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 萤石云对接信息集合
*/
public List<NgYingshiCloudIntegrationInfo> selectNgYingshiCloudIntegrationInfoList(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo);
/**
* 新增萤石云对接信息
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 结果
*/
public int insertNgYingshiCloudIntegrationInfo(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo);
/**
* 修改萤石云对接信息
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 结果
*/
public int updateNgYingshiCloudIntegrationInfo(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo);
/**
* 批量删除萤石云对接信息
*
* @param ids 需要删除的萤石云对接信息主键集合
* @return 结果
*/
public int deleteNgYingshiCloudIntegrationInfoByIds(Long[] ids);
/**
* 删除萤石云对接信息信息
*
* @param id 萤石云对接信息主键
* @return 结果
*/
public int deleteNgYingshiCloudIntegrationInfoById(Long id);
}

View File

@ -107,31 +107,69 @@ public class DeviceRealtimedataMeteorologyServiceImpl extends ServiceImpl<Device
* @return
*/
@Override
public Map<String,Object> getLatestWeatherRealtimedata(){
public Map<String,Object> getLatestWeatherRealtimedata(String deviceEncoding){
Map<String,Object> rest= new HashMap<>();
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.orderByDesc("real_time");
queryWrapper.eq("device_id",deviceEncoding);
queryWrapper.last("limit 1");
DeviceRealtimedataMeteorology meteorology = deviceRealtimedataMeteorologyMapper.selectOne(queryWrapper);
System.err.println(meteorology.getDeviceId()+"最新一条气象数据,时间:"+meteorology.getRealTime());
List<DeviceProperties> devicePropertiesList = new ArrayList<>();
rest.put("props",devicePropertiesList);
if(Objects.isNull(meteorology)){
return rest;
}
if(meteorology.getAirTemp()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("空气温度").value(meteorology.getAirTemp().toString()).unit("°C").build());
}
if(meteorology.getAirHumi()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("空气湿度").value(meteorology.getAirHumi().toString()).unit("%").build());
}
devicePropertiesList.add(DeviceProperties.builder().name("风速").value(meteorology.getWindSpeed().toString()).unit("m/s").build());
if(meteorology.getWindDir()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("风向").value(windDirMap(meteorology.getWindDir())).unit("").build());
}
if(meteorology.getAirPre()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("大气压力").value(meteorology.getAirPre().toString()).unit("hPa").build());
}
if(meteorology.getGuangzhao()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("光照度").value(meteorology.getGuangzhao().toString()).unit("lx").build());
}
if(meteorology.getFushe()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("光合有效辐射").value(meteorology.getFushe().toString()).unit("Lux").build());
}
if(meteorology.getSumRain()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("累积雨量").value(meteorology.getSumRain().toString()).unit("mm").build());
}
if(meteorology.getInsRain()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("瞬时雨量").value(meteorology.getInsRain().toString()).unit("mm").build());
}
if(meteorology.getDayRain()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("日雨量").value(meteorology.getDayRain().toString()).unit("mm").build());
}
if(meteorology.getZhengfa()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("蒸发量").value(meteorology.getZhengfa().toString()).unit("t/h").build());
}
if(meteorology.getSoilTemp()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("土壤温度").value(meteorology.getSoilTemp().toString()).unit("°C").build());
}
if(meteorology.getSoilHumi()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("土壤湿度").value(meteorology.getSoilHumi().toString()).unit("%").build());
}
Map<String,Object> info=new HashMap<>();
info.put("deviceEncoding", meteorology.getDeviceId());

View File

@ -0,0 +1,96 @@
package com.fastbee.deviceData.service.impl;
import java.util.List;
import com.fastbee.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fastbee.deviceData.mapper.NgYingshiCloudIntegrationInfoMapper;
import com.fastbee.deviceData.domain.NgYingshiCloudIntegrationInfo;
import com.fastbee.deviceData.service.INgYingshiCloudIntegrationInfoService;
/**
* 萤石云对接信息Service业务层处理
*
* @author kerwincui
* @date 2025-01-09
*/
@Service
public class NgYingshiCloudIntegrationInfoServiceImpl implements INgYingshiCloudIntegrationInfoService
{
@Autowired
private NgYingshiCloudIntegrationInfoMapper ngYingshiCloudIntegrationInfoMapper;
/**
* 查询萤石云对接信息
*
* @param id 萤石云对接信息主键
* @return 萤石云对接信息
*/
@Override
public NgYingshiCloudIntegrationInfo selectNgYingshiCloudIntegrationInfoById(Long id)
{
return ngYingshiCloudIntegrationInfoMapper.selectNgYingshiCloudIntegrationInfoById(id);
}
/**
* 查询萤石云对接信息列表
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 萤石云对接信息
*/
@Override
public List<NgYingshiCloudIntegrationInfo> selectNgYingshiCloudIntegrationInfoList(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo)
{
return ngYingshiCloudIntegrationInfoMapper.selectNgYingshiCloudIntegrationInfoList(ngYingshiCloudIntegrationInfo);
}
/**
* 新增萤石云对接信息
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 结果
*/
@Override
public int insertNgYingshiCloudIntegrationInfo(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo)
{
ngYingshiCloudIntegrationInfo.setCreateTime(DateUtils.getNowDate());
return ngYingshiCloudIntegrationInfoMapper.insertNgYingshiCloudIntegrationInfo(ngYingshiCloudIntegrationInfo);
}
/**
* 修改萤石云对接信息
*
* @param ngYingshiCloudIntegrationInfo 萤石云对接信息
* @return 结果
*/
@Override
public int updateNgYingshiCloudIntegrationInfo(NgYingshiCloudIntegrationInfo ngYingshiCloudIntegrationInfo)
{
ngYingshiCloudIntegrationInfo.setUpdateTime(DateUtils.getNowDate());
return ngYingshiCloudIntegrationInfoMapper.updateNgYingshiCloudIntegrationInfo(ngYingshiCloudIntegrationInfo);
}
/**
* 批量删除萤石云对接信息
*
* @param ids 需要删除的萤石云对接信息主键
* @return 结果
*/
@Override
public int deleteNgYingshiCloudIntegrationInfoByIds(Long[] ids)
{
return ngYingshiCloudIntegrationInfoMapper.deleteNgYingshiCloudIntegrationInfoByIds(ids);
}
/**
* 删除萤石云对接信息信息
*
* @param id 萤石云对接信息主键
* @return 结果
*/
@Override
public int deleteNgYingshiCloudIntegrationInfoById(Long id)
{
return ngYingshiCloudIntegrationInfoMapper.deleteNgYingshiCloudIntegrationInfoById(id);
}
}

View File

@ -93,4 +93,9 @@ private static final long serialVersionUID = 1L;
@ApiModelProperty("状态1在线0离线")
private Long status;
/** projectId */
@Excel(name = "projectId")
@ApiModelProperty("projectId")
private Long projectId;
}

View File

@ -89,4 +89,9 @@ private static final long serialVersionUID = 1L;
/** 删除标志0代表存在2代表删除 */
private Integer delFlag;
/** 项目id */
@Excel(name = "项目id")
@ApiModelProperty("项目id")
private Long projectId;
}

View File

@ -99,4 +99,9 @@ private static final long serialVersionUID = 1L;
@ApiModelProperty("状态1在线0离线")
private Long status;
/** 项目id */
@Excel(name = "项目id")
@ApiModelProperty("项目id")
private Long projectId;
}

View File

@ -2,6 +2,7 @@ package com.fastbee.deviceInfo.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
@ -126,4 +127,15 @@ public class DeviceInformationMonitor extends BaseEntity
@ApiModelProperty("accessToken")
private String accessToken;
/** projectId */
@Excel(name = "projectId")
@ApiModelProperty("projectId")
private Long projectId;
/**设备状态描述,离线/在线 */
@TableField(exist=false)
private String statusDesc;
}

View File

@ -90,4 +90,9 @@ private static final long serialVersionUID = 1L;
@ApiModelProperty("状态1在线0离线")
private Long status;
/** 项目id */
@Excel(name = "项目id")
@ApiModelProperty("项目id")
private Long projectId;
}

View File

@ -88,4 +88,9 @@ private static final long serialVersionUID = 1L;
@ApiModelProperty("状态1在线0离线")
private Long status;
/** 项目id */
@Excel(name = "项目id")
@ApiModelProperty("项目id")
private Long projectId;
}

View File

@ -1,13 +1,13 @@
package com.fastbee.deviceInfo.manager;
import com.fastbee.deviceData.domain.DeviceRealtimedataPhotovoltaic;
import com.fastbee.deviceData.domain.dto.DeviceProperties;
import com.fastbee.deviceInfo.domain.*;
import com.fastbee.deviceInfo.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
public class DeviceInformationManager {
@ -34,22 +34,63 @@ public class DeviceInformationManager {
/**
* 获取所有设备
*/
public Map<String,Object> getAllDeviceCount() {
List<DeviceInformationMeteorology> meteorologieList = meteorologyMapper.selectDeviceInformationMeteorologyList(null);
List<DeviceInformationMiaoqing> miaoqingList = miaoqingMapper.selectDeviceInformationMiaoqingList(null);
List<DeviceInformationMoisture> moistureList= moistureMapper.selectDeviceInformationMoistureList(null);
List<DeviceInformationMonitor> monitorList = monitorMapper.selectDeviceInformationMonitorList(null);
List<DeviceInformationTargetpests> targetpestList= targetpestsMapper.selectDeviceInformationTargetpestsList(null);
List<DeviceInformationWorms> wormList = wormsMapper.selectDeviceInformationWormsList(null);
public Map<String,Object> getAllDeviceCount(Long projectId) {
System.err.println("projectId:"+projectId);
DeviceInformationMeteorology informationMeteorology=new DeviceInformationMeteorology();
informationMeteorology.setProjectId(projectId);
DeviceInformationMiaoqing informationMiaoqing=new DeviceInformationMiaoqing();
informationMiaoqing.setProjectId(projectId);
DeviceInformationMoisture informationMoisture=new DeviceInformationMoisture();
informationMoisture.setProjectId(projectId);
DeviceInformationMonitor informationMonitor=new DeviceInformationMonitor();
informationMonitor.setProjectId(projectId);
DeviceInformationTargetpests informationTargetpests=new DeviceInformationTargetpests();
informationTargetpests.setProjectId(projectId);
DeviceInformationWorms informationWorms=new DeviceInformationWorms();
informationWorms.setProjectId(projectId);
List<DeviceInformationMeteorology> meteorologieList = meteorologyMapper.selectDeviceInformationMeteorologyList(informationMeteorology);
List<DeviceInformationMiaoqing> miaoqingList = miaoqingMapper.selectDeviceInformationMiaoqingList(informationMiaoqing);
List<DeviceInformationMoisture> moistureList= moistureMapper.selectDeviceInformationMoistureList(informationMoisture);
List<DeviceInformationMonitor> monitorList = monitorMapper.selectDeviceInformationMonitorList(informationMonitor);
List<DeviceInformationTargetpests> targetpestList= targetpestsMapper.selectDeviceInformationTargetpestsList(informationTargetpests);
List<DeviceInformationWorms> wormList = wormsMapper.selectDeviceInformationWormsList(informationWorms);
Map<String,Object> resp =new HashMap<>();
resp.put("meteorologieTotal",meteorologieList.size());
/*resp.put("meteorologieTotal",meteorologieList.size());
resp.put("miaoqingTotal",miaoqingList.size());
resp.put("moistureTotal",moistureList.size());
resp.put("monitorTotal",monitorList.size());
resp.put("targetpestTotal",targetpestList.size());
resp.put("wormTotal",wormList.size());
resp.put("photovoltaicTotal",miaoqingList.size());
resp.put("photovoltaicTotal",miaoqingList.size());*/
List<DeviceProperties> devicePropertiesList = new ArrayList<>();
if(meteorologieList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("meteorologieTotal").value(String.valueOf(meteorologieList.size())).unit("气象设备").build());
}
if(miaoqingList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("miaoqingTotal").value(String.valueOf(miaoqingList.size())).unit("苗情设备").build());
}
if(moistureList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("moistureTotal").value(String.valueOf(moistureList.size())).unit("墒情设备").build());
}
if(targetpestList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("targetpestTotal").value(String.valueOf(targetpestList.size())).unit("靶标害虫设备").build());
}
if(wormList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("wormTotal").value(String.valueOf(wormList.size())).unit("虫情设备").build());
devicePropertiesList.add(DeviceProperties.builder().name("photovoltaicTotal").value(String.valueOf(wormList.size())).unit("光伏设备").build());
}
if(monitorList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("monitorTotal").value(String.valueOf(monitorList.size())).unit("监控设备").build());
}
resp.put("props",devicePropertiesList);
return resp;
}

View File

@ -1,7 +1,11 @@
package com.fastbee.deviceInfo.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fastbee.deviceInfo.domain.DeviceInformationMonitor;
import com.fastbee.deviceInfo.mapper.DeviceInformationMonitorMapper;
/**
* 监控站设备基础信息Service接口
@ -9,12 +13,11 @@ import com.fastbee.deviceInfo.domain.DeviceInformationMonitor;
* @author kerwincui
* @date 2024-11-18
*/
public interface IDeviceInformationMonitorService
public interface IDeviceInformationMonitorService extends IService<DeviceInformationMonitor>
{
/**
* 查询监控站设备基础信息
*
* @param id 监控站设备基础信息主键
* @return 监控站设备基础信息
*/
public DeviceInformationMonitor selectDeviceInformationMonitorById(String deviceEncoding);

View File

@ -1,6 +1,8 @@
package com.fastbee.deviceInfo.service.impl;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fastbee.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -15,7 +17,7 @@ import com.fastbee.deviceInfo.service.IDeviceInformationMonitorService;
* @date 2024-11-18
*/
@Service
public class DeviceInformationMonitorServiceImpl implements IDeviceInformationMonitorService
public class DeviceInformationMonitorServiceImpl extends ServiceImpl<DeviceInformationMonitorMapper,DeviceInformationMonitor> implements IDeviceInformationMonitorService
{
@Autowired
private DeviceInformationMonitorMapper deviceInformationMonitorMapper;
@ -23,7 +25,6 @@ public class DeviceInformationMonitorServiceImpl implements IDeviceInformationMo
/**
* 查询监控站设备基础信息
*
* @param id 监控站设备基础信息主键
* @return 监控站设备基础信息
*/
@Override

View File

@ -22,10 +22,12 @@
<result property="createBy" column="create_by" />
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="projectId" column="project_id" />
<result property="status" column="status" />
</resultMap>
<sql id="selectDeviceInformationMeteorologyVo">
select id, name, device_brand, device_type, device_encoding, type, longitude, latitude, installation_location, name_project, construction_year, docking_method, del_flag, create_time, create_by, update_time, update_by from iot_device_information_meteorology
select id, name, device_brand, device_type, device_encoding, type, longitude, latitude, installation_location, name_project, construction_year, docking_method, del_flag, create_time, create_by, update_time, update_by,project_id,status from iot_device_information_meteorology
</sql>
<select id="selectDeviceInformationMeteorologyList" parameterType="DeviceInformationMeteorology" resultMap="DeviceInformationMeteorologyResult">
@ -42,6 +44,8 @@
<if test="nameProject != null and nameProject != ''"> and name_project = #{nameProject}</if>
<if test="constructionYear != null "> and construction_year = #{constructionYear}</if>
<if test="dockingMethod != null and dockingMethod != ''"> and docking_method = #{dockingMethod}</if>
<if test="projectId != null and projectId != ''"> and project_id = #{projectId}</if>
<if test="status != null and status != ''"> and status = #{status}</if>
</where>
</select>
@ -69,6 +73,8 @@
<if test="createBy != null">create_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="projectId != null">project_id,</if>
<if test="status != null">status,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
@ -87,6 +93,8 @@
<if test="createBy != null">#{createBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="projectId != null">#{projectId},</if>
<if test="status != null">#{status},</if>
</trim>
</insert>
@ -109,6 +117,8 @@
<if test="createBy != null">create_by = #{createBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="projectId != null">project_id = #{projectId},</if>
<if test="status != null">status = #{status},</if>
</trim>
where id = #{id}
</update>

View File

@ -22,10 +22,11 @@
<result property="createBy" column="create_by" />
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="projectId" column="project_id" />
</resultMap>
<sql id="selectDeviceInformationMiaoqingVo">
select id, name, device_brand, device_type, device_encoding, type, longitude, latitude, installation_location, name_project, construction_year, docking_method, del_flag, create_time, create_by, update_time, update_by from iot_device_information_miaoQing
select id, name, device_brand, device_type, device_encoding, type, longitude, latitude, installation_location, name_project, construction_year, docking_method, del_flag, create_time, create_by, update_time, update_by,project_id from iot_device_information_miaoQing
</sql>
<select id="selectDeviceInformationMiaoqingList" parameterType="DeviceInformationMiaoqing" resultMap="DeviceInformationMiaoqingResult">
@ -42,6 +43,7 @@
<if test="nameProject != null and nameProject != ''"> and name_project = #{nameProject}</if>
<if test="constructionYear != null "> and construction_year = #{constructionYear}</if>
<if test="dockingMethod != null and dockingMethod != ''"> and docking_method = #{dockingMethod}</if>
<if test="projectId != null and projectId != ''"> and project_id = #{projectId}</if>
</where>
</select>
@ -69,6 +71,7 @@
<if test="createBy != null">create_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="projectId != null">project_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
@ -87,6 +90,7 @@
<if test="createBy != null">#{createBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="projectId != null">#{projectId},</if>
</trim>
</insert>
@ -109,6 +113,7 @@
<if test="createBy != null">create_by = #{createBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="projectId != null">project_id = #{projectId},</if>
</trim>
where id = #{id}
</update>

View File

@ -23,10 +23,11 @@
<result property="createBy" column="create_by" />
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="projectId" column="project_id" />
</resultMap>
<sql id="selectDeviceInformationMoistureVo">
select id, name, products_name, device_brand, device_type, device_encoding, type, longitude, latitude, installation_location, name_project, construction_year, docking_method, del_flag, create_time, create_by, update_time, update_by from iot_device_information_moisture
select id, name, products_name, device_brand, device_type, device_encoding, type, longitude, latitude, installation_location, name_project, construction_year, docking_method, del_flag, create_time, create_by, update_time, update_by, project_id from iot_device_information_moisture
</sql>
<select id="selectDeviceInformationMoistureList" parameterType="DeviceInformationMoisture" resultMap="DeviceInformationMoistureResult">
@ -44,6 +45,7 @@
<if test="nameProject != null and nameProject != ''"> and name_project = #{nameProject}</if>
<if test="constructionYear != null "> and construction_year = #{constructionYear}</if>
<if test="dockingMethod != null and dockingMethod != ''"> and docking_method = #{dockingMethod}</if>
<if test="projectId != null and projectId != ''"> and project_id = #{projectId}</if>
</where>
</select>
@ -72,6 +74,7 @@
<if test="createBy != null">create_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="projectId != null">project_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
@ -91,6 +94,7 @@
<if test="createBy != null">#{createBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="projectId != null">#{projectId},</if>
</trim>
</insert>
@ -114,6 +118,7 @@
<if test="createBy != null">create_by = #{createBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="projectId != null">project_id = #{projectId},</if>
</trim>
where id = #{id}
</update>

View File

@ -27,10 +27,12 @@
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="playUrl" column="play_url" />
<result property="projectId" column="project_id" />
<result property="status" column="status" />
</resultMap>
<sql id="selectDeviceInformationMonitorVo">
select id, name, device_encoding, type, longitude, latitude, installation_location, device_brand, device_type, name_project, construction_year, affiliation_township, management_leader, management_leader_telephone, management_unit, remarks_information, del_flag, create_time, create_by, update_time, update_by, play_url from iot_device_information_monitor
select id, name, device_encoding, type, longitude, latitude, installation_location, device_brand, device_type, name_project, construction_year, affiliation_township, management_leader, management_leader_telephone, management_unit, remarks_information, del_flag, create_time, create_by, update_time, update_by, play_url,project_id,status from iot_device_information_monitor
</sql>
<select id="selectDeviceInformationMonitorList" parameterType="DeviceInformationMonitor" resultMap="DeviceInformationMonitorResult">
@ -52,6 +54,8 @@
<if test="managementUnit != null and managementUnit != ''"> and management_unit = #{managementUnit}</if>
<if test="remarksInformation != null and remarksInformation != ''"> and remarks_information = #{remarksInformation}</if>
<if test="playUrl != null and playUrl != ''"> and play_url = #{playUrl}</if>
<if test="projectId != null and projectId != ''"> and project_id = #{projectId}</if>
<if test="status != null and status != ''"> and status = #{status}</if>
</where>
</select>
@ -84,6 +88,8 @@
<if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="playUrl != null">play_url,</if>
<if test="projectId != null">project_id,</if>
<if test="status != null">status,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
@ -107,6 +113,8 @@
<if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="playUrl != null">#{playUrl},</if>
<if test="projectId != null">#{projectId},</if>
<if test="status != null">#{status},</if>
</trim>
</insert>
@ -134,6 +142,8 @@
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="playUrl != null">play_url = #{playUrl},</if>
<if test="projectId != null">project_id = #{projectId},</if>
<if test="status != null">status = #{status},</if>
</trim>
where id = #{id}
</update>

View File

@ -22,10 +22,11 @@
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="name" column="name" />
<result property="projectId" column="project_id" />
</resultMap>
<sql id="selectDeviceInformationTargetpestsVo">
select id, device_brand, type, device_type, power_supply, device_encoding, address_code, installation_location, longitude, latitude, docking_method, del_flag, create_time, create_by, update_time, update_by, name from iot_device_information_targetPests
select id, device_brand, type, device_type, power_supply, device_encoding, address_code, installation_location, longitude, latitude, docking_method, del_flag, create_time, create_by, update_time, update_by, name,project_id from iot_device_information_targetPests
</sql>
<select id="selectDeviceInformationTargetpestsList" parameterType="DeviceInformationTargetpests" resultMap="DeviceInformationTargetpestsResult">
@ -42,6 +43,7 @@
<if test="latitude != null and latitude != ''"> and latitude = #{latitude}</if>
<if test="dockingMethod != null and dockingMethod != ''"> and docking_method = #{dockingMethod}</if>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="projectId != null and projectId != ''"> and project_id = #{projectId}</if>
</where>
</select>
@ -69,6 +71,7 @@
<if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="name != null">name,</if>
<if test="projectId != null">project_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="deviceBrand != null">#{deviceBrand},</if>
@ -87,6 +90,7 @@
<if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="name != null">#{name},</if>
<if test="projectId != null">#{projectId},</if>
</trim>
</insert>
@ -109,6 +113,7 @@
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="name != null">name = #{name},</if>
<if test="projectId != null">project_id = #{projectId},</if>
</trim>
where id = #{id}
</update>

View File

@ -21,6 +21,7 @@
<result property="createBy" column="create_by" />
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="projectId" column="project_id" />
</resultMap>
<sql id="selectDeviceInformationWormsVo">
@ -40,6 +41,7 @@
<if test="nameProject != null and nameProject != ''"> and name_project = #{nameProject}</if>
<if test="constructionYear != null "> and construction_year = #{constructionYear}</if>
<if test="dockingMethod != null and dockingMethod != ''"> and docking_method = #{dockingMethod}</if>
<if test="projectId != null and projectId != ''"> and project_id = #{projectId}</if>
</where>
</select>
@ -66,6 +68,7 @@
<if test="createBy != null">create_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="projectId != null">project_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
@ -83,6 +86,7 @@
<if test="createBy != null">#{createBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="projectId != null">#{projectId},</if>
</trim>
</insert>
@ -104,6 +108,7 @@
<if test="createBy != null">create_by = #{createBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="projectId != null">project_id = #{projectId},</if>
</trim>
where id = #{id}
</update>

View File

@ -18,6 +18,7 @@ public class DevicePowerDTO {
private String facType;
private String testRecord;
private String areaCode;
//---------------------------------
String serialNumber;
}

View File

@ -1,5 +1,8 @@
package com.fastbee.iot.timer;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.fastbee.deviceData.api.devlink.service.ZhanLianMetDataService;
@ -8,6 +11,7 @@ import com.fastbee.deviceData.api.devlink.service.ZhanLianMoistureDataService;
import com.fastbee.deviceData.api.devlink.service.ZhanLianPhotovoltaicDataService;
import com.fastbee.deviceData.api.renke.service.RenkeTargetpestsDeviceDataService;
import com.fastbee.deviceData.api.renke.service.RenkeWormDeviceDataService;
import com.fastbee.deviceData.api.yingshiyun.service.YingshiyunService;
import com.fastbee.deviceData.domain.*;
import com.fastbee.deviceData.mapper.*;
@ -15,14 +19,13 @@ import com.fastbee.deviceData.service.IDeviceRealtimedataWormsService;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMeteorologyServiceImpl;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMoistureServiceImpl;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataWormsServiceImpl;
import com.fastbee.deviceInfo.domain.DeviceInformationMeteorology;
import com.fastbee.deviceInfo.domain.DeviceInformationMoisture;
import com.fastbee.deviceInfo.domain.DeviceInformationTargetpests;
import com.fastbee.deviceInfo.domain.DeviceInformationWorms;
import com.fastbee.deviceInfo.domain.*;
import com.fastbee.deviceInfo.mapper.*;
import com.fastbee.deviceInfo.service.IDeviceInformationMonitorService;
import com.fastbee.iot.mapper.DeviceMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@ -98,6 +101,15 @@ public class DeviceDateTask {
@Autowired
private DeviceInformationTargetpestsMapper targetpestsMapper;
@Autowired
private YingshiyunService yingshiyunService;
@Autowired
private NgYingshiCloudIntegrationInfoMapper yingshiCloudIntegrationInfoMapper;
@Autowired
private IDeviceInformationMonitorService deviceInformationMonitorService;
@ -252,5 +264,80 @@ public class DeviceDateTask {
System.out.println("插入数据失败!");
}
/**
* 获取监控设备实时状态并更新
*/
public void getMonitorDeviceRealtimeStatusData() throws Exception{
try{
//获取所有监控设备编码列表
List<DeviceInformationMonitor> monitorList=new LambdaQueryChainWrapper<>(monitorMapper)
.select(DeviceInformationMonitor::getDeviceEncoding,DeviceInformationMonitor::getStatus,DeviceInformationMonitor::getId,DeviceInformationMonitor::getProjectId)
.list();
// log.info("monitorLIST:"+monitorList);
//根据projectId对监控设备列表进行分组
Map<Long, List<DeviceInformationMonitor>> collect = monitorList.stream().collect(Collectors.groupingBy(DeviceInformationMonitor::getProjectId));
// System.err.println("collect:"+collect);
//获取所有萤石云对接信息列表
List<NgYingshiCloudIntegrationInfo> integrationInfoList=new LambdaQueryChainWrapper<>(yingshiCloudIntegrationInfoMapper)
.select(NgYingshiCloudIntegrationInfo::getAppkey,NgYingshiCloudIntegrationInfo::getAppsecret,NgYingshiCloudIntegrationInfo::getProjectid)
.list();
// System.err.println("integrationInfoList:"+integrationInfoList);
if(integrationInfoList.size()==0)
{
// System.err.println("设备信息不存在");
log.warn("设备信息不存在");
}
//k为projectIdv为projectId下的设备列表
collect.forEach((k,v)->{
/*log.info("k:"+k);
log.info("v:"+v);*/
//获取萤石云对接信息
List<NgYingshiCloudIntegrationInfo> list = new LambdaQueryChainWrapper<>(yingshiCloudIntegrationInfoMapper)
.select(NgYingshiCloudIntegrationInfo::getAppkey, NgYingshiCloudIntegrationInfo::getAppsecret)
.eq(NgYingshiCloudIntegrationInfo::getProjectid, k)
.list();
NgYingshiCloudIntegrationInfo yingshiCloudIntegrationInfo;
if(!list.isEmpty())
{
yingshiCloudIntegrationInfo=list.get(0);
//获取accessToken
String accessToken=yingshiyunService.getAuth(yingshiCloudIntegrationInfo.getAppkey(),yingshiCloudIntegrationInfo.getAppsecret());
//获取设备信息列表
JSONObject deviceInfoList = yingshiyunService.getInfoList(accessToken);
log.info(k+"的监控设备json"+deviceInfoList);
if(deviceInfoList.isEmpty())
{
log.warn(k+"的监控设备json为空");
}
JSONArray data= deviceInfoList.getJSONArray("data");
log.info(k+"的监控设备信息:"+data);
data.forEach(d->{
JSONObject object = JSONUtil.parseObj(d.toString());
String deviceSerial=object.getStr("deviceSerial");//设备编码
Long status=object.getLong("status");//设备状态
for(DeviceInformationMonitor device:v)
{
if(device.getDeviceEncoding().equals(deviceSerial))
{
device.setStatus(status);//设置status0=离线1=在线
break;
}
}
});
}
//批量更新设备状态数据
boolean flag=deviceInformationMonitorService.updateBatchById(v);
if(!flag)
{
log.warn("监控设备状态更新失败");
}
});
}catch (Exception e){
log.warn("获取监控设备实时状态失败",e);
}
}
}

View File

@ -69,4 +69,9 @@ private static final long serialVersionUID = 1L;
@ApiModelProperty("平台证书序列号")
private String platformCertificateSerialNumber;
/** 区域号 */
@Excel(name = "区域号")
@ApiModelProperty("区域号")
private String areaCode;
}

View File

@ -106,6 +106,7 @@ public class NgUserRechargeRecordsServiceImpl implements INgUserRechargeRecordsS
//查询用户充值卡信息
String cardNumber=String.valueOf(rechargecardUser.getCardnumber());
String areaCode=String.valueOf(rechargecardUser.getAreacode());
Long deptId=rechargecardUser.getDeptId();
UserRechargeCards info=userRechargeCardsMapper.selectUserRechargeCardsByCardNumberAndAreaCode(cardNumber,areaCode);
/*if (info == null) {
// 如果没有找到对应的记录返回0或者一个错误码

View File

@ -60,7 +60,7 @@ public class UserWechatPayServiceImpl implements IUserWechatPayService {
//支付结果回调地址
// public static String notify_url="https://1f647120.r3.cpolar.cn/pay/getresult";//https://1f647120.r3.cpolar.cn
//TODO 生产环境支付结果异步通知地址
public static String notify_url="https://farmh5.hze2.com/prod-api/pay/getresult";
public static String notify_url="https://www.farm315.com/prod-api/pay/getresult";
//https://5f655ed0.r3.cpolar.cn
//微信小程序appid
public static String appId="wx308612d2a8423311";

View File

@ -15,10 +15,11 @@
<result property="platformCertificates" column="platform_certificates" />
<result property="wechatPublicKeyId" column="wechat_public_key_id" />
<result property="platformCertificateSerialNumber" column="platform_certificate_serial_number" />
<result property="areaCode" column="area_code" />
</resultMap>
<sql id="selectNgMerchantsVo">
select id, mch_id, private_key_path, serial_no, api_v3_key, public_key_path, dept_id, platform_certificates, wechat_public_key_id, platform_certificate_serial_number from ng_merchants
select id, mch_id, private_key_path, serial_no, api_v3_key, public_key_path, dept_id, platform_certificates, wechat_public_key_id, platform_certificate_serial_number,area_code from ng_merchants
</sql>
<select id="selectNgMerchantsList" parameterType="NgMerchants" resultMap="NgMerchantsResult">
@ -53,6 +54,7 @@
<if test="platformCertificates != null">platform_certificates,</if>
<if test="wechatPublicKeyId != null">wechat_public_key_id,</if>
<if test="platformCertificateSerialNumber != null">platform_certificate_serial_number,</if>
<if test="areaCode != null">area_code,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="mchId != null">#{mchId},</if>
@ -64,6 +66,7 @@
<if test="platformCertificates != null">#{platformCertificates},</if>
<if test="wechatPublicKeyId != null">#{wechatPublicKeyId},</if>
<if test="platformCertificateSerialNumber != null">#{platformCertificateSerialNumber},</if>
<if test="areaCode != null">#{areaCode},</if>
</trim>
</insert>
@ -79,6 +82,7 @@
<if test="platformCertificates != null">platform_certificates = #{platformCertificates},</if>
<if test="wechatPublicKeyId != null">wechat_public_key_id = #{wechatPublicKeyId},</if>
<if test="platformCertificateSerialNumber != null">platform_certificate_serial_number = #{platformCertificateSerialNumber},</if>
<if test="areaCode != null">area_code = #{areaCode},</if>
</trim>
where id = #{id}
</update>