add item analysis

main
chenshuichuan 2 years ago
parent 258e51cd15
commit a2a2b50ac7

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.erp.framework.bean;
import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
//关键重量单位不允许更改
@Getter
@AllArgsConstructor
public enum ProductUnitEnum {
Ton(2L, "t"),
Kilogram(3L, "kg"),
Gram(4L, "g"),
Each(5L, "个");
/**
*
*/
private final Long unitId;
/**
*
*/
private final String name;
}

@ -1,11 +1,13 @@
package cn.iocoder.yudao.module.erp.service.product; package cn.iocoder.yudao.module.erp.service.product;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.unit.ErpProductUnitPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.unit.ErpProductUnitPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.unit.ErpProductUnitSaveReqVO; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.unit.ErpProductUnitSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductUnitMapper; import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductUnitMapper;
import cn.iocoder.yudao.module.erp.framework.bean.ProductUnitEnum;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -46,6 +48,12 @@ public class ErpProductUnitServiceImpl implements ErpProductUnitService {
@Override @Override
public void updateProductUnit(ErpProductUnitSaveReqVO updateReqVO) { public void updateProductUnit(ErpProductUnitSaveReqVO updateReqVO) {
if(updateReqVO.getId().equals(ProductUnitEnum.Ton.getUnitId()) ||
updateReqVO.getId().equals(ProductUnitEnum.Kilogram.getUnitId())
|| updateReqVO.getId().equals(ProductUnitEnum.Gram.getUnitId())
|| updateReqVO.getId().equals(ProductUnitEnum.Each.getUnitId())){
throw exception(new ErrorCode(500,"内置单位不允许更改"));
}
// 1.1 校验存在 // 1.1 校验存在
validateProductUnitExists(updateReqVO.getId()); validateProductUnitExists(updateReqVO.getId());
// 1.2 校验名字唯一 // 1.2 校验名字唯一
@ -72,6 +80,10 @@ public class ErpProductUnitServiceImpl implements ErpProductUnitService {
@Override @Override
public void deleteProductUnit(Long id) { public void deleteProductUnit(Long id) {
if(id.equals(ProductUnitEnum.Ton.getUnitId()) || id.equals(ProductUnitEnum.Kilogram.getUnitId())
|| id.equals(ProductUnitEnum.Gram.getUnitId()) || id.equals(ProductUnitEnum.Each.getUnitId())){
throw exception(new ErrorCode(500,"内置单位不允许更改"));
}
// 1.1 校验存在 // 1.1 校验存在
validateProductUnitExists(id); validateProductUnitExists(id);
// 1.2 校验产品是否使用 // 1.2 校验产品是否使用

@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.iot.controller.admin.device; package cn.iocoder.yudao.module.iot.controller.admin.device;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.gateway.GatewayDO;
import cn.iocoder.yudao.module.iot.framework.gateway.service.impl.TheGatewayServiceImpl;
import cn.iocoder.yudao.module.iot.service.gateway.GatewayService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -37,6 +40,8 @@ public class DeviceController {
@Resource @Resource
private DeviceService deviceService; private DeviceService deviceService;
@Resource
private GatewayService gatewayService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建物联设备") @Operation(summary = "创建物联设备")
@ -91,7 +96,15 @@ public class DeviceController {
ExcelUtils.write(response, "物联设备.xls", "数据", DeviceRespVO.class, ExcelUtils.write(response, "物联设备.xls", "数据", DeviceRespVO.class,
BeanUtils.toBean(list, DeviceRespVO.class)); BeanUtils.toBean(list, DeviceRespVO.class));
} }
@GetMapping("/pushDevice")
@Operation(summary = "下发物联设备配置到网关")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('iot:device:update')")
public CommonResult<String> pushDevice(@RequestParam("id") Long id) {
DeviceDO device = deviceService.getDevice(id);
GatewayDO gatewayDO = gatewayService.getGateway(device.getGatewayId());
return deviceService.pushDevice(device,gatewayDO);
}
// ==================== 子表(设备属性) ==================== // ==================== 子表(设备属性) ====================
@GetMapping("/device-attribute/page") @GetMapping("/device-attribute/page")
@ -107,6 +120,8 @@ public class DeviceController {
@Operation(summary = "创建设备属性") @Operation(summary = "创建设备属性")
@PreAuthorize("@ss.hasPermission('iot:device:create')") @PreAuthorize("@ss.hasPermission('iot:device:create')")
public CommonResult<Long> createDeviceAttribute(@Valid @RequestBody DeviceAttributeDO deviceAttribute) { public CommonResult<Long> createDeviceAttribute(@Valid @RequestBody DeviceAttributeDO deviceAttribute) {
DeviceDO deviceDO = deviceService.getDevice(deviceAttribute.getDeviceId());
deviceAttribute.setDeviceCode(deviceDO.getDeviceCode());
return success(deviceService.createDeviceAttribute(deviceAttribute)); return success(deviceService.createDeviceAttribute(deviceAttribute));
} }

@ -130,7 +130,7 @@ public class DeviceAttributeDO extends BaseDO {
/** /**
* *
*/ */
private String modbusFieldSize; private Integer modbusFieldSize;
/** /**
* 10 * 10
*/ */
@ -161,6 +161,10 @@ public class DeviceAttributeDO extends BaseDO {
* id * id
*/ */
private Long deviceId; private Long deviceId;
/**
* code
*/
private String deviceCode;
/** /**
* id * id
*/ */

@ -26,5 +26,7 @@ public interface DeviceAttributeMapper extends BaseMapperX<DeviceAttributeDO> {
default int deleteByDeviceId(Long deviceId) { default int deleteByDeviceId(Long deviceId) {
return delete(DeviceAttributeDO::getDeviceId, deviceId); return delete(DeviceAttributeDO::getDeviceId, deviceId);
} }
default List<DeviceAttributeDO> selectByDeviceId(Long deviceId) {
return selectList(DeviceAttributeDO::getDeviceId, deviceId);
}
} }

@ -4,10 +4,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceAttributeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*; import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*;
import java.util.List;
/** /**
* Mapper * Mapper
* *
@ -57,4 +60,7 @@ public interface DeviceMapper extends BaseMapperX<DeviceDO> {
default int deleteByGatewayId(Long gatewayId) { default int deleteByGatewayId(Long gatewayId) {
return delete(DeviceDO::getGatewayId, gatewayId); return delete(DeviceDO::getGatewayId, gatewayId);
} }
default List<DeviceDO> selectByGatewayId(Long gatewayId) {
return selectList(DeviceDO::getGatewayId, gatewayId);
}
} }

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.iot.framework.constant;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
@Getter
@AllArgsConstructor
public enum DeviceTypeEnum {
modbus("modbus", "modbus"),
siemens("siemens", "siemens");
private final String value;
private final String name;
public static boolean isSiemens(String value) {
return ObjUtil.equal(siemens.value, value);
}
public static boolean isModbus(String value) {
return ObjUtil.equal(modbus.value, value);
}
}

@ -22,8 +22,8 @@ import java.io.UnsupportedEncodingException;
import java.util.List; import java.util.List;
@Service @Service
public class GatewayServiceImpl implements GatewayMqttService { public class GatewayMqttServiceImpl implements GatewayMqttService {
private static final Logger log = LoggerFactory.getLogger(GatewayServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(GatewayMqttServiceImpl.class);
private String cookie; private String cookie;
//先登录 //先登录
@Override @Override

@ -2,12 +2,22 @@ package cn.iocoder.yudao.module.iot.framework.gateway.service.impl;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceAttributeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.gateway.GatewayDO; import cn.iocoder.yudao.module.iot.dal.dataobject.gateway.GatewayDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceAttributeMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper;
import cn.iocoder.yudao.module.iot.framework.constant.AddressDataType;
import cn.iocoder.yudao.module.iot.framework.gateway.bo.ChangeStatus;
import cn.iocoder.yudao.module.iot.framework.gateway.bo.HttpEntity; import cn.iocoder.yudao.module.iot.framework.gateway.bo.HttpEntity;
import cn.iocoder.yudao.module.iot.framework.gateway.entity.DeviceVideoEntity; import cn.iocoder.yudao.module.iot.framework.gateway.entity.*;
import cn.iocoder.yudao.module.iot.framework.gateway.service.GatewayMqttService;
import cn.iocoder.yudao.module.iot.framework.gateway.service.IModbusPointService;
import cn.iocoder.yudao.module.iot.framework.gateway.service.ISiemensPointService;
import cn.iocoder.yudao.module.iot.framework.gateway.service.IVideoService;
import cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils; import cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils;
import cn.iocoder.yudao.module.iot.framework.gateway.util.UrlConstans; import cn.iocoder.yudao.module.iot.framework.gateway.util.UrlConstans;
import cn.iocoder.yudao.module.iot.service.device.DeviceService;
import cn.iocoder.yudao.module.iot.service.gateway.GatewayService; import cn.iocoder.yudao.module.iot.service.gateway.GatewayService;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.Data; import lombok.Data;
@ -19,6 +29,7 @@ import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -26,17 +37,19 @@ import java.util.List;
@Service @Service
public class TheGatewayServiceImpl { public class TheGatewayServiceImpl {
@Autowired @Resource
private IBeEquipmentsSiemensService beEquipmentsSiemensService; private DeviceMapper deviceMapper;
@Autowired @Resource
private IIoPointService ioPointService; private DeviceAttributeMapper deviceAttributeMapper;
@Autowired @Resource
private IVideoService videoService; private IVideoService videoService;
@Autowired @Resource
private ISiemensPointService siemensPointService; private ISiemensPointService siemensPointService;
@Autowired @Resource
private IMqttService mqttService; private IModbusPointService modbusPointService;
@Autowired @Resource
private GatewayMqttService gatewayMqttService;
@Resource
private GatewayService gatewayService; private GatewayService gatewayService;
//清除原本的西门子设备和点位数据 //清除原本的西门子设备和点位数据
@ -67,29 +80,30 @@ public class TheGatewayServiceImpl {
// } // }
//清除指定原本的西门子设备和点位数据 //清除指定原本的西门子设备和点位数据
public void deleteSiemensEntity(GatewayDO gatewayDO, String deviceCode) { public void deleteSiemensEntity(GatewayDO gatewayDO, DeviceDO deviceDO) {
siemensPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword());
List<DeviceSiemensEntity> list = siemensPointService.getSiemensList(gatewaysMessage.getAdminIp(), siemensPointService.login(gatewayDO.getAdminIp(), gatewayDO.getUsername(), gatewayDO.getPassword());
gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId); List<DeviceSiemensEntity> list = siemensPointService.getSiemensList(gatewayDO.getAdminIp(),
gatewayDO.getUsername(), gatewayDO.getPassword(), deviceDO.getDeviceCode());
if (null != list && list.size() > 0) { if (null != list && list.size() > 0) {
//先清除点位数据 //先清除点位数据
String[] deviceIds = new String[list.size()]; String[] deviceIds = new String[list.size()];
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
deviceIds[i] = list.get(i).getDeviceConfigID(); deviceIds[i] = list.get(i).getDeviceConfigID();
//删除每个设备下的原有点位 //删除每个设备下的原有点位
List<SiemensPointEntity> pointList = siemensPointService.getPointListAll(gatewaysMessage.getAdminIp(), List<SiemensPointEntity> pointList = siemensPointService.getPointListAll(gatewayDO.getAdminIp(),
list.get(i).getDeviceConfigID(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword()); list.get(i).getDeviceConfigID(), gatewayDO.getUsername(), gatewayDO.getPassword());
if (pointList != null && pointList.size() > 0) { if (pointList != null && pointList.size() > 0) {
String[] addressIds = new String[pointList.size()]; String[] addressIds = new String[pointList.size()];
for (int j = 0; j < pointList.size(); j++) { for (int j = 0; j < pointList.size(); j++) {
addressIds[j] = pointList.get(j).getDeviceConfigContentID().toString(); addressIds[j] = pointList.get(j).getDeviceConfigContentID().toString();
} }
//删除点位 //删除点位
siemensPointService.deletePoint(gatewaysMessage.getAdminIp(), String.join(",", addressIds)); siemensPointService.deletePoint(gatewayDO.getAdminIp(), String.join(",", addressIds));
} }
} }
//再清除设备数据 //再清除设备数据
siemensPointService.delete(gatewaysMessage.getAdminIp(), String.join(",", deviceIds)); siemensPointService.delete(gatewayDO.getAdminIp(), String.join(",", deviceIds));
} }
} }
@ -125,180 +139,126 @@ public class TheGatewayServiceImpl {
// } // }
//新增西门子设备 //新增西门子设备
public void addSiemensEntity(GatewayDO gatewaysMessage, DeviceDO siemens) { public void addSiemensEntity(GatewayDO gatewayDO, DeviceDO siemens) {
siemensPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword()); siemensPointService.login(gatewayDO.getAdminIp(), gatewayDO.getUsername(), gatewayDO.getPassword());
DeviceSiemensEntity deviceSiemensEntity = new DeviceSiemensEntity(); DeviceSiemensEntity deviceSiemensEntity = new DeviceSiemensEntity();
deviceSiemensEntity.setDeviceID(siemen.getDeviceId()); deviceSiemensEntity.setDeviceID(siemens.getDeviceCode());
deviceSiemensEntity.setDeviceName(siemen.getDeviceName()); deviceSiemensEntity.setDeviceName(siemens.getDeviceName());
deviceSiemensEntity.setSiemensSeries(siemen.getSiemensSeries()); deviceSiemensEntity.setSiemensSeries(siemens.getSiemensSeries());
deviceSiemensEntity.setSiemensConnectParam(siemen.getSiemensConnectParam()); deviceSiemensEntity.setSiemensConnectParam(siemens.getSiemensConnectParam());
deviceSiemensEntity.setReadCronType(siemen.getReadCronType()); deviceSiemensEntity.setReadCronType(siemens.getReadCronType());
deviceSiemensEntity.setReadRepeatValue(siemen.getReadRepeatValue()); deviceSiemensEntity.setReadRepeatValue(siemens.getReadRepeatValue());
deviceSiemensEntity.setReadRepeatUnit(siemen.getReadRepeatUnit()); deviceSiemensEntity.setReadRepeatUnit(siemens.getReadRepeatUnit());
deviceSiemensEntity.setReadCron(siemen.getReadCron()); deviceSiemensEntity.setReadCron(siemens.getReadCron());
deviceSiemensEntity.setWriteCronType(siemen.getWriteCronType()); deviceSiemensEntity.setWriteCronType(siemens.getWriteCronType());
deviceSiemensEntity.setWriteRepeatValue(siemen.getWriteRepeatValue()); deviceSiemensEntity.setWriteRepeatValue(siemens.getWriteRepeatValue());
deviceSiemensEntity.setWriteCron(siemen.getWriteCron()); deviceSiemensEntity.setWriteCron(siemens.getWriteCron());
deviceSiemensEntity.setLocalPersistent(siemen.getLocalPersistent()); deviceSiemensEntity.setLocalPersistent(siemens.getLocalPersistent());
deviceSiemensEntity.setUploadRate(siemen.getUploadRate()); deviceSiemensEntity.setUploadRate(siemens.getUploadRate());
deviceSiemensEntity.setRateCount(siemen.getRateCount()); deviceSiemensEntity.setRateCount(siemens.getRateCount());
siemensPointService.add(deviceSiemensEntity, gatewaysMessage.getAdminIp()); siemensPointService.add(deviceSiemensEntity, gatewayDO.getAdminIp());
} }
//下发完成西门子设备后 下发对应设备的点位 //下发完成西门子设备后 下发对应设备的点位
public void addDeviceSiemensEntity(BeGatewaysMessage gatewaysMessage,String equipmentsId, String deviceId) { public void addDeviceSiemensEntity(GatewayDO gatewayDO,Long machineId, DeviceDO deviceDO) {
siemensPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword()); siemensPointService.login(gatewayDO.getAdminIp(), gatewayDO.getUsername(), gatewayDO.getPassword());
/*下发好设备后获取设备列表找点位*/ /*下发好设备后获取设备列表找点位*/
List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(gatewaysMessage.getAdminIp(), List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(gatewayDO.getAdminIp(),
gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId); gatewayDO.getUsername(), gatewayDO.getPassword(), deviceDO.getDeviceCode());
for (DeviceSiemensEntity deviceSiemensEntity : siemensList) { for (DeviceSiemensEntity deviceSiemensEntity : siemensList) {
//根据deviceId 和机台编码查询sql数据库点位信息 //根据deviceId 和机台编码查询sql数据库点位信息
IoPoint bo = new IoPoint(); List<DeviceAttributeDO> points = deviceAttributeMapper.selectByDeviceId(deviceDO.getId());
bo.setDeviceId(deviceSiemensEntity.getDeviceID());
bo.setEquipmentsId(equipmentsId);
//检索
List<IoPoint> points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
List<SiemensPointEntity> list = new ArrayList<>(); List<SiemensPointEntity> list = new ArrayList<>();
for (IoPoint point : points) { for (DeviceAttributeDO point : points) {
//新增点位
SiemensPointEntity siemensPointEntity = new SiemensPointEntity();
siemensPointEntity.setSiemensFieldName(point.getPointCode());
siemensPointEntity.setSiemensFieldAddress(point.getAddress());
Integer dataType = AddressDataType.getGatewayDataTypeMap(point.getDataType()); Integer dataType = AddressDataType.getGatewayDataTypeMap(point.getDataType());
siemensPointEntity.setSiemensFieldDataType(dataType);
siemensPointEntity.setSiemensFieldPrecision(point.getSiemensFieldPrecision());
siemensPointEntity.setSiemensFieldUnit(point.getUnit());
list.add(siemensPointEntity);
}
if (list.size() > 0)
siemensPointService.add(list, gatewaysMessage.getAdminIp(), deviceSiemensEntity.getDeviceConfigID());
}
}
//下发完成西门子设备后 下发对应设备的点位
public void addDeviceSiemensEntity(BeEquipments equipments) {
siemensPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
/*下发好设备后获取设备列表找点位*/
List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(equipments.getAdminIp(),
equipments.getUsername(), equipments.getPassword());
for (DeviceSiemensEntity deviceSiemensEntity : siemensList) {
//根据deviceId 和机台编码查询sql数据库点位信息
IoPoint bo = new IoPoint();
bo.setDeviceId(deviceSiemensEntity.getDeviceID());
bo.setEquipmentsId(equipments.getEquipmentsId());
//检索
List<IoPoint> points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
List<SiemensPointEntity> list = new ArrayList<>();
for (IoPoint point : points) {
//新增点位 //新增点位
SiemensPointEntity siemensPointEntity = new SiemensPointEntity(); SiemensPointEntity siemensPointEntity = new SiemensPointEntity()
siemensPointEntity.setSiemensFieldName(point.getPointCode()); .setSiemensFieldName(point.getAttributeCode())
siemensPointEntity.setSiemensFieldAddress(point.getAddress()); .setSiemensFieldAddress(point.getAddress())
Integer dataType = AddressDataType.getGatewayDataTypeMap(point.getDataType()); .setSiemensFieldDataType(dataType)
siemensPointEntity.setSiemensFieldDataType(dataType); .setSiemensFieldPrecision(point.getSiemensFieldPrecision())
siemensPointEntity.setSiemensFieldPrecision(point.getSiemensFieldPrecision()); .setSiemensFieldUnit(point.getUnit());
siemensPointEntity.setSiemensFieldUnit(point.getUnit());
list.add(siemensPointEntity); list.add(siemensPointEntity);
} }
if (list.size() > 0) if (list.size() > 0)
siemensPointService.add(list, equipments.getAdminIp(), deviceSiemensEntity.getDeviceConfigID()); siemensPointService.add(list, gatewayDO.getAdminIp(), deviceSiemensEntity.getDeviceConfigID());
} }
} }
//清除原本的Modbus设备数据 //清除原本的Modbus设备数据
public void deleteModbusEntity(BeEquipments equipments) { // public void deleteModbusEntity(BeEquipments equipments) {
modbusPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword()); // modbusPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
List<DeviceModbusEntity> list = modbusPointService.getModbusList(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword()); // List<DeviceModbusEntity> list = modbusPointService.getModbusList(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
if (null != list && list.size() > 0) { // if (null != list && list.size() > 0) {
//先清除点位数据 // //先清除点位数据
String[] deviceIds = new String[list.size()]; // String[] deviceIds = new String[list.size()];
for (int i = 0; i < list.size(); i++) { // for (int i = 0; i < list.size(); i++) {
deviceIds[i] = list.get(i).getDeviceConfigID(); // deviceIds[i] = list.get(i).getDeviceConfigID();
//删除每个设备下的原有点位 // //删除每个设备下的原有点位
List<ModbusPointEntity> pointList = modbusPointService.getPointList(equipments.getAdminIp(), // List<ModbusPointEntity> pointList = modbusPointService.getPointList(equipments.getAdminIp(),
equipments.getUsername(), equipments.getPassword(), list.get(i).getDeviceConfigID()); // equipments.getUsername(), equipments.getPassword(), list.get(i).getDeviceConfigID());
if (pointList != null && pointList.size() > 0) { // if (pointList != null && pointList.size() > 0) {
String[] addressIds = new String[pointList.size()]; // String[] addressIds = new String[pointList.size()];
for (int j = 0; j < pointList.size(); j++) { // for (int j = 0; j < pointList.size(); j++) {
addressIds[j] = pointList.get(j).getDeviceConfigContentID().toString(); // addressIds[j] = pointList.get(j).getDeviceConfigContentID().toString();
} // }
//删除点位数据 // //删除点位数据
modbusPointService.deletePoint(equipments.getAdminIp(), String.join(",", addressIds)); // modbusPointService.deletePoint(equipments.getAdminIp(), String.join(",", addressIds));
} // }
} // }
//再清除设备数据 // //再清除设备数据
modbusPointService.delete(equipments.getAdminIp(), String.join(",", deviceIds)); // modbusPointService.delete(equipments.getAdminIp(), String.join(",", deviceIds));
} // }
} // }
//清除原本的Modbus设备数据 //清除原本的Modbus设备数据
public void deleteModbusEntity(BeGatewaysMessage gatewaysMessage, String deviceId) { public void deleteModbusEntity(GatewayDO gatewayDO, String deviceId) {
modbusPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword()); modbusPointService.login(gatewayDO.getAdminIp(), gatewayDO.getUsername(), gatewayDO.getPassword());
List<DeviceModbusEntity> list = modbusPointService.getModbusList(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId); List<DeviceModbusEntity> list = modbusPointService.getModbusList(gatewayDO.getAdminIp(),
gatewayDO.getUsername(), gatewayDO.getPassword(), deviceId);
if (null != list && list.size() > 0) { if (null != list && list.size() > 0) {
//先清除点位数据 //先清除点位数据
String[] deviceIds = new String[list.size()]; String[] deviceIds = new String[list.size()];
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
deviceIds[i] = list.get(i).getDeviceConfigID(); deviceIds[i] = list.get(i).getDeviceConfigID();
//删除每个设备下的原有点位 //删除每个设备下的原有点位
List<ModbusPointEntity> pointList = modbusPointService.getPointListAll(gatewaysMessage.getAdminIp(), List<ModbusPointEntity> pointList = modbusPointService.getPointListAll(gatewayDO.getAdminIp(),
gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), list.get(i).getDeviceConfigID()); gatewayDO.getUsername(), gatewayDO.getPassword(), list.get(i).getDeviceConfigID());
if (pointList != null && pointList.size() > 0) { if (pointList != null && pointList.size() > 0) {
String[] addressIds = new String[pointList.size()]; String[] addressIds = new String[pointList.size()];
for (int j = 0; j < pointList.size(); j++) { for (int j = 0; j < pointList.size(); j++) {
addressIds[j] = pointList.get(j).getDeviceConfigContentID(); addressIds[j] = pointList.get(j).getDeviceConfigContentID();
} }
//删除点位数据 //删除点位数据
modbusPointService.deletePoint(gatewaysMessage.getAdminIp(), String.join(",", addressIds)); modbusPointService.deletePoint(gatewayDO.getAdminIp(), String.join(",", addressIds));
} }
} }
//再清除设备数据 //再清除设备数据
modbusPointService.delete(gatewaysMessage.getAdminIp(), String.join(",", deviceIds)); modbusPointService.delete(gatewayDO.getAdminIp(), String.join(",", deviceIds));
} }
} }
public void addModbusEntity(BeEquipments equipments) { public void addModbusEntity(GatewayDO gatewayDO) {
modbusPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword()); modbusPointService.login(gatewayDO.getAdminIp(), gatewayDO.getUsername(), gatewayDO.getPassword());
BeEquipmentsModbus bo = new BeEquipmentsModbus(); List<DeviceDO> modbuses = deviceMapper.selectByGatewayId(gatewayDO.getId());
bo.setEquipmentsId(equipments.getEquipmentsId());
List<BeEquipmentsModbus> modbuses = beEquipmentsModbusService.list(beEquipmentsModbusService.buildQueryWrapper(bo));
List<DeviceModbusEntity> list = new ArrayList<>(); List<DeviceModbusEntity> list = new ArrayList<>();
if (modbuses != null && modbuses.size() > 0) { if (modbuses != null && modbuses.size() > 0) {
for (BeEquipmentsModbus modbus : modbuses) { for (DeviceDO modbus : modbuses) {
DeviceModbusEntity deviceModbusEntity = new DeviceModbusEntity(); DeviceModbusEntity deviceModbusEntity = initEntity(modbus);
deviceModbusEntity.setEquipmentsId(modbus.getEquipmentsId());
deviceModbusEntity.setDeviceId(modbus.getDeviceId());
deviceModbusEntity.setDeviceName(modbus.getDeviceName());
deviceModbusEntity.setModbusProtocol(modbus.getModbusProtocol());
deviceModbusEntity.setModbusPattern(modbus.getModbusPattern());
deviceModbusEntity.setPortName(modbus.getPortName());
deviceModbusEntity.setModbusConnectParam(modbus.getModbusConnectParam());
deviceModbusEntity.setReadCronType(modbus.getReadCronType());
deviceModbusEntity.setReadRepeatValue(modbus.getReadRepeatValue());
deviceModbusEntity.setReadRepeatUnit(modbus.getReadRepeatUnit());
deviceModbusEntity.setReadCron(modbus.getReadCron());
deviceModbusEntity.setWriteCronType(modbus.getWriteCronType());
deviceModbusEntity.setWriteRepeatValue(modbus.getWriteRepeatValue());
deviceModbusEntity.setWriteRepeatUnit(modbus.getWriteRepeatUnit());
deviceModbusEntity.setWriteCron(modbus.getWriteCron());
deviceModbusEntity.setLocalPersistent(modbus.getLocalPersistent());
deviceModbusEntity.setUploadRate(modbus.getUploadRate());
deviceModbusEntity.setRateCount(modbus.getRateCount());
deviceModbusEntity.setModbusReadAddrGap(modbus.getModbusReadAddrGap());
list.add(deviceModbusEntity); list.add(deviceModbusEntity);
//mob 下发失败 {"code":500,"msg":"该串口已经配置"} //mob 下发失败 {"code":500,"msg":"该串口已经配置"}
} }
if (list.size() > 0) modbusPointService.add(list, equipments.getAdminIp()); modbusPointService.add(list, gatewayDO.getAdminIp());
} }
} }
public void addModbusEntity(BeGatewaysMessage gatewaysMessage, BeEquipmentsModbus modbus) { private DeviceModbusEntity initEntity(DeviceDO modbus) {
DeviceModbusEntity deviceModbusEntity = new DeviceModbusEntity(); DeviceModbusEntity deviceModbusEntity = new DeviceModbusEntity();
deviceModbusEntity.setEquipmentsId(modbus.getEquipmentsId()); deviceModbusEntity.setEquipmentsId(modbus.getOrgId().toString());
deviceModbusEntity.setDeviceId(modbus.getDeviceId()); deviceModbusEntity.setDeviceId(modbus.getDeviceCode());
deviceModbusEntity.setDeviceName(modbus.getDeviceName()); deviceModbusEntity.setDeviceName(modbus.getDeviceName());
deviceModbusEntity.setModbusProtocol(modbus.getModbusProtocol()); deviceModbusEntity.setModbusProtocol(modbus.getModbusProtocol());
deviceModbusEntity.setModbusPattern(modbus.getModbusPattern()); deviceModbusEntity.setModbusPattern(modbus.getModbusPattern());
@ -316,70 +276,68 @@ public class TheGatewayServiceImpl {
deviceModbusEntity.setUploadRate(modbus.getUploadRate()); deviceModbusEntity.setUploadRate(modbus.getUploadRate());
deviceModbusEntity.setRateCount(modbus.getRateCount()); deviceModbusEntity.setRateCount(modbus.getRateCount());
deviceModbusEntity.setModbusReadAddrGap(modbus.getModbusReadAddrGap()); deviceModbusEntity.setModbusReadAddrGap(modbus.getModbusReadAddrGap());
return deviceModbusEntity;
}
public void addModbusEntity(GatewayDO gatewayDO, DeviceDO modbus) {
DeviceModbusEntity deviceModbusEntity = initEntity(modbus);
//mob 下发失败 {"code":500,"msg":"该串口已经配置"} //mob 下发失败 {"code":500,"msg":"该串口已经配置"}
modbusPointService.add(deviceModbusEntity, gatewaysMessage.getAdminIp()); modbusPointService.add(deviceModbusEntity, gatewayDO.getAdminIp());
} }
public void addDeviceModbusEntity(BeEquipments equipments) { public void addDeviceModbusEntity(GatewayDO gatewayDO) {
modbusPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword()); modbusPointService.login(gatewayDO.getAdminIp(), gatewayDO.getUsername(), gatewayDO.getPassword());
/*下发好设备后获取设备列表找点位*/ /*下发好设备后获取设备列表找点位*/
List<DeviceModbusEntity> modbusPointList = modbusPointService.getModbusList(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword()); List<DeviceModbusEntity> modbusPointList = modbusPointService.getModbusList(gatewayDO.getAdminIp(),
gatewayDO.getUsername(), gatewayDO.getPassword());
for (DeviceModbusEntity deviceModbusEntity : modbusPointList) { for (DeviceModbusEntity deviceModbusEntity : modbusPointList) {
//根据deviceId 和机台编码查询sql数据库点位信息 //根据deviceId 和机台编码查询sql数据库点位信息
IoPoint bo = new IoPoint(); List<DeviceAttributeDO> points = deviceAttributeMapper.selectByDeviceId(1L);
bo.setDeviceId(deviceModbusEntity.getDeviceId()); getModbusPointEntityList(gatewayDO, deviceModbusEntity, points);
bo.setEquipmentsId(equipments.getEquipmentsId()); List<ModbusPointEntity> list = getModbusPointEntityList(gatewayDO, deviceModbusEntity, points);
List<IoPoint> points = ioPointService.list(ioPointService.buildQueryWrapper(bo)); //下发
List<ModbusPointEntity> list = new ArrayList<>();
for (IoPoint point : points) {
//新增点位
ModbusPointEntity modbusPointEntity = new ModbusPointEntity();
modbusPointEntity.setModbusSlaveID(point.getModbusSlaveId());
modbusPointEntity.setModbusFieldName(point.getPointName());
modbusPointEntity.setModbusFieldAddress(point.getModbusFieldAddress());
modbusPointEntity.setModbusAddressType(point.getModbusAddressType());
modbusPointEntity.setModbusFieldSize(point.getModbusFieldSize());
modbusPointEntity.setModbusFieldPrecision(point.getModbusFieldPrecision());
modbusPointEntity.setModbusFieldDataType(point.getDataType());
modbusPointEntity.setModbusFieldOrder(point.getModbusFieldOrder());
modbusPointEntity.setModbusFieldUnit(point.getUnit());
list.add(modbusPointEntity);
}
if (list.size() > 0) if (list.size() > 0)
modbusPointService.add(list, equipments.getAdminIp(), deviceModbusEntity.getDeviceConfigID()); modbusPointService.add(list, gatewayDO.getAdminIp(), deviceModbusEntity.getDeviceConfigID());
} }
} }
public void addDeviceModbusEntity(BeGatewaysMessage gatewaysMessage,String equipmentsId, String deviceId) { public void addDeviceModbusEntity(GatewayDO gatewayDO, DeviceDO deviceDO) {
modbusPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword()); modbusPointService.login(gatewayDO.getAdminIp(), gatewayDO.getUsername(), gatewayDO.getPassword());
/*下发好设备后获取设备列表找点位*/ /*下发好设备后获取设备列表找点位*/
List<DeviceModbusEntity> modbusPointList = modbusPointService.getModbusList(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId); List<DeviceModbusEntity> modbusPointList = modbusPointService.getModbusList(gatewayDO.getAdminIp(),
gatewayDO.getUsername(), gatewayDO.getPassword(), deviceDO.getDeviceCode());
for (DeviceModbusEntity deviceModbusEntity : modbusPointList) { for (DeviceModbusEntity deviceModbusEntity : modbusPointList) {
//根据deviceId 和机台编码查询sql数据库点位信息 //根据deviceId 和机台编码查询sql数据库点位信息
IoPoint bo = new IoPoint();
bo.setDeviceId(deviceModbusEntity.getDeviceId()); List<DeviceAttributeDO> points = deviceAttributeMapper.selectByDeviceId(deviceDO.getId());
bo.setEquipmentsId(equipmentsId); List<ModbusPointEntity> list = getModbusPointEntityList(gatewayDO, deviceModbusEntity, points);
List<IoPoint> points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
List<ModbusPointEntity> list = new ArrayList<>();
for (IoPoint point : points) {
//新增点位
ModbusPointEntity modbusPointEntity = new ModbusPointEntity();
modbusPointEntity.setModbusSlaveID(point.getModbusSlaveId());
modbusPointEntity.setModbusFieldName(point.getPointCode());
modbusPointEntity.setModbusFieldAddress(point.getModbusFieldAddress());
modbusPointEntity.setModbusAddressType(point.getModbusAddressType());
modbusPointEntity.setModbusFieldSize(point.getModbusFieldSize());
modbusPointEntity.setModbusFieldPrecision(point.getModbusFieldPrecision());
modbusPointEntity.setModbusFieldDataType(point.getDataType());
modbusPointEntity.setModbusFieldOrder(point.getModbusFieldOrder());
modbusPointEntity.setModbusFieldUnit(point.getUnit());
list.add(modbusPointEntity);
}
if (list.size() > 0) if (list.size() > 0)
modbusPointService.add(list, gatewaysMessage.getAdminIp(), deviceModbusEntity.getDeviceConfigID()); modbusPointService.add(list, gatewayDO.getAdminIp(), deviceModbusEntity.getDeviceConfigID());
} }
} }
private List<ModbusPointEntity> getModbusPointEntityList(GatewayDO gatewayDO,
DeviceModbusEntity deviceModbusEntity,
List<DeviceAttributeDO> points) {
List<ModbusPointEntity> list = new ArrayList<>();
for (DeviceAttributeDO point : points) {
//新增点位
ModbusPointEntity modbusPointEntity = new ModbusPointEntity();
modbusPointEntity.setModbusSlaveID(point.getModbusSlaveId());
modbusPointEntity.setModbusFieldName(point.getAttributeCode());
modbusPointEntity.setModbusFieldAddress(point.getModbusFieldAddress());
modbusPointEntity.setModbusAddressType(point.getModbusAddressType());
modbusPointEntity.setModbusFieldSize(point.getModbusFieldSize());
modbusPointEntity.setModbusFieldPrecision(point.getModbusFieldPrecision());
modbusPointEntity.setModbusFieldDataType(point.getDataType());
modbusPointEntity.setModbusFieldOrder(point.getModbusFieldOrder());
modbusPointEntity.setModbusFieldUnit(point.getUnit());
list.add(modbusPointEntity);
}
return list;
}
/** /**
* mqtt * mqtt
* 1 * 1
@ -388,30 +346,30 @@ public class TheGatewayServiceImpl {
* 4 * 4
* 5 * 5
*/ */
public void deleteMqttEntity(BeEquipments equipments) { public void deleteMqttEntity(GatewayDO gatewayDO) {
//modbusPointService.login(equipments.getAdminIp(),equipments.getUsername(),equipments.getPassword()); modbusPointService.login(gatewayDO.getAdminIp(),gatewayDO.getUsername(),gatewayDO.getPassword());
List<MqttBrokerEntity> mqttBrokerEntity = mqttService.getMqttBrokerEntity(equipments.getAdminIp(), List<MqttBrokerEntity> mqttBrokerEntity = gatewayMqttService.getMqttBrokerEntity(gatewayDO.getAdminIp(),
equipments.getUsername(), equipments.getPassword()); gatewayDO.getUsername(), gatewayDO.getPassword());
for (MqttBrokerEntity brokerEntity : mqttBrokerEntity) { for (MqttBrokerEntity brokerEntity : mqttBrokerEntity) {
mqttService.delete(equipments.getAdminIp(), brokerEntity.getCloudConfigID()); gatewayMqttService.delete(gatewayDO.getAdminIp(), brokerEntity.getCloudConfigID());
} }
} }
/***启用设备 */ /***启用设备 */
public void changeStatus(BeGatewaysMessage gatewaysMessage, String deviceId, String type) { public void changeStatus(GatewayDO gatewayDO, String deviceCode, String type) {
List<String> deviceIds = new ArrayList<>(); List<String> deviceIds = new ArrayList<>();
if (type.equals("modbus")) { if (type.equals("modbus")) {
/*下发好设备后获取设备列表找点位*/ /*下发好设备后获取设备列表找点位*/
List<DeviceModbusEntity> modbusPointList = modbusPointService.getModbusList(gatewaysMessage.getAdminIp(), List<DeviceModbusEntity> modbusPointList = modbusPointService.getModbusList(gatewayDO.getAdminIp(),
gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId); gatewayDO.getUsername(), gatewayDO.getPassword(), deviceCode);
for (DeviceModbusEntity entity : modbusPointList) { for (DeviceModbusEntity entity : modbusPointList) {
deviceIds.add(entity.getDeviceConfigID()); deviceIds.add(entity.getDeviceConfigID());
} }
} }
if (type.equals("siemens")) { if (type.equals("siemens")) {
/*下发好设备后获取设备列表找点位*/ /*下发好设备后获取设备列表找点位*/
List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(gatewaysMessage.getAdminIp(), List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(gatewayDO.getAdminIp(),
gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId); gatewayDO.getUsername(), gatewayDO.getPassword(), deviceCode);
for (DeviceSiemensEntity entity : siemensList) { for (DeviceSiemensEntity entity : siemensList) {
deviceIds.add(entity.getDeviceConfigID()); deviceIds.add(entity.getDeviceConfigID());
@ -420,17 +378,17 @@ public class TheGatewayServiceImpl {
ChangeStatus changeStatus = new ChangeStatus(); ChangeStatus changeStatus = new ChangeStatus();
changeStatus.setNewStatus("2"); changeStatus.setNewStatus("2");
changeStatus.setOldStatus("1"); changeStatus.setOldStatus("1");
siemensPointService.changeStatusDevice(deviceIds, changeStatus, gatewaysMessage.getAdminIp()); siemensPointService.changeStatusDevice(deviceIds, changeStatus, gatewayDO.getAdminIp());
} }
/***启用设备 */ /***启用设备 */
public void changeStatus(BeEquipments equipments) { public void changeStatus(GatewayDO gatewayDO) {
/*下发好设备后获取设备列表找点位*/ /*下发好设备后获取设备列表找点位*/
List<DeviceModbusEntity> modbusPointList = modbusPointService.getModbusList(equipments.getAdminIp(), List<DeviceModbusEntity> modbusPointList = modbusPointService.getModbusList(gatewayDO.getAdminIp(),
equipments.getUsername(), equipments.getPassword()); gatewayDO.getUsername(), gatewayDO.getPassword());
/*下发好设备后获取设备列表找点位*/ /*下发好设备后获取设备列表找点位*/
List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(equipments.getAdminIp(), List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(gatewayDO.getAdminIp(),
equipments.getUsername(), equipments.getPassword()); gatewayDO.getUsername(), gatewayDO.getPassword());
List<String> deviceIds = new ArrayList<>(); List<String> deviceIds = new ArrayList<>();
for (DeviceModbusEntity entity : modbusPointList) { for (DeviceModbusEntity entity : modbusPointList) {
deviceIds.add(entity.getDeviceConfigID()); deviceIds.add(entity.getDeviceConfigID());
@ -441,43 +399,39 @@ public class TheGatewayServiceImpl {
ChangeStatus changeStatus = new ChangeStatus(); ChangeStatus changeStatus = new ChangeStatus();
changeStatus.setNewStatus("2"); changeStatus.setNewStatus("2");
changeStatus.setOldStatus("1"); changeStatus.setOldStatus("1");
siemensPointService.changeStatusDevice(deviceIds, changeStatus, equipments.getAdminIp()); siemensPointService.changeStatusDevice(deviceIds, changeStatus, gatewayDO.getAdminIp());
} }
public BeEquipments getEquipments(Integer gatewayMessageId) {
BeGatewaysMessage gatewaysMessage = gatewaysMessageService.getById(gatewayMessageId);
BeEquipments bo = new BeEquipments();
bo.setEquipmentsId(gatewaysMessage.getEquipmentId());
bo = equipmentsService.getOne(equipmentsService.buildQueryWrapper(bo));
return bo;
}
/*检测下发数据和实际下发数量是否匹配*/ /*检测下发数据和实际下发数量是否匹配*/
public AjaxResult compare(String url, String username, String password, String deviceId, String equipmentId, String type) { public CommonResult<String> compare(GatewayDO gatewayDO, DeviceDO deviceDO, String type) {
String deviceConfigID = null; String deviceConfigID = null;
Integer pointList = 0; Integer pointList = 0;
if ("m".equals(type)) { if ("modbus".equals(type)) {
List<DeviceModbusEntity> modbusList = modbusPointService.getModbusList(url, username, password, deviceId); List<DeviceModbusEntity> modbusList = modbusPointService.getModbusList(gatewayDO.getAdminIp(),
gatewayDO.getUsername(), gatewayDO.getPassword(), deviceDO.getDeviceCode());
if (modbusList != null && modbusList.size() > 0) { if (modbusList != null && modbusList.size() > 0) {
deviceConfigID = modbusList.get(0).getDeviceConfigID(); deviceConfigID = modbusList.get(0).getDeviceConfigID();
} }
pointList = modbusPointService.getPointListByCount(url, username, password, deviceConfigID); pointList = modbusPointService.getPointListByCount(gatewayDO.getAdminIp(),
gatewayDO.getUsername(), gatewayDO.getPassword(), deviceConfigID);
} else { } else {
List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(url, username, password, deviceId); List<DeviceSiemensEntity> siemensList = siemensPointService.getSiemensList(gatewayDO.getAdminIp(),
gatewayDO.getUsername(), gatewayDO.getPassword(), deviceDO.getDeviceCode());
if (siemensList != null && siemensList.size() > 0) { if (siemensList != null && siemensList.size() > 0) {
deviceConfigID = siemensList.get(0).getDeviceConfigID(); deviceConfigID = siemensList.get(0).getDeviceConfigID();
} }
pointList = siemensPointService.getPointListByCount(url, deviceConfigID, username, password); pointList = siemensPointService.getPointListByCount(gatewayDO.getAdminIp(), deviceConfigID,
gatewayDO.getUsername(), gatewayDO.getPassword());
} }
//根据deviceId 和机台编码查询sql数据库点位信息 //根据deviceId 和机台编码查询sql数据库点位信息
IoPoint bo = new IoPoint();
bo.setDeviceId(deviceId); List<DeviceAttributeDO> points = deviceAttributeMapper.selectByDeviceId(deviceDO.getId());
bo.setEquipmentsId(equipmentId);
List<IoPoint> points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
int size = points.size(); int size = points.size();
return size!=pointList?AjaxResult.error("下发失败!应下发" + points.size() + "个地址,实下发" + pointList + "个地址") String str = "应下发" + points.size() + "个地址,实下发" + pointList + "个地址";
:AjaxResult.success("下发成功!应下发" + points.size() + "个地址,实下发" + pointList + "个地址"); return size!=pointList? CommonResult.error(500,"下发失败!"+str)
: CommonResult.success("下发成功!"+str);
} }
/**网关登录测试*/ /**网关登录测试*/
@ -537,13 +491,13 @@ public class TheGatewayServiceImpl {
} }
} }
public void addVideo(String adminIp,String username,String password, Monitor monitor) { // public void addVideo(String adminIp,String username,String password, Monitor monitor) {
videoService.login(adminIp,username,password); // videoService.login(adminIp,username,password);
DeviceVideoEntity deviceVideoEntity = new DeviceVideoEntity(); // DeviceVideoEntity deviceVideoEntity = new DeviceVideoEntity();
deviceVideoEntity.setDeviceID(monitor.getMonitorCode()); // deviceVideoEntity.setDeviceID(monitor.getMonitorCode());
deviceVideoEntity.setDeviceName(monitor.getMonitorName()); // deviceVideoEntity.setDeviceName(monitor.getMonitorName());
deviceVideoEntity.setServerAddress(monitor.getServiceAddress()); // deviceVideoEntity.setServerAddress(monitor.getServiceAddress());
deviceVideoEntity.setVideoAddress(monitor.getVideoAddress()); // deviceVideoEntity.setVideoAddress(monitor.getVideoAddress());
videoService.add(deviceVideoEntity, adminIp); // videoService.add(deviceVideoEntity, adminIp);
} // }
} }

@ -26,6 +26,8 @@ import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -37,6 +39,12 @@ public class TestApp {
private ISiemensPointService iopointUploadService; private ISiemensPointService iopointUploadService;
public static void main(String[] args){ public static void main(String[] args){
BigDecimal b1 = new BigDecimal("123.564");
BigDecimal b2 = new BigDecimal("3.3");
BigDecimal divide = b1.divide(b2, 3, RoundingMode.HALF_UP);
System.out.println(divide);
System.out.println(DateUtils.getMillsLong());//1657075430559 1657461174420 System.out.println(DateUtils.getMillsLong());//1657075430559 1657461174420
//get(); //get();

@ -1,11 +1,13 @@
package cn.iocoder.yudao.module.iot.service.device; package cn.iocoder.yudao.module.iot.service.device;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*; import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceAttributeDO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceAttributeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.gateway.GatewayDO;
import javax.validation.Valid; import javax.validation.Valid;
@ -54,6 +56,7 @@ public interface DeviceService {
*/ */
PageResult<DeviceDO> getDevicePage(DevicePageReqVO pageReqVO); PageResult<DeviceDO> getDevicePage(DevicePageReqVO pageReqVO);
CommonResult<String> pushDevice(DeviceDO deviceDO, GatewayDO gatewayDO);
// ==================== 子表(设备属性) ==================== // ==================== 子表(设备属性) ====================
/** /**

@ -1,7 +1,12 @@
package cn.iocoder.yudao.module.iot.service.device; package cn.iocoder.yudao.module.iot.service.device;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.gateway.GatewayDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper; import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper;
import cn.iocoder.yudao.module.iot.framework.constant.DeviceTypeEnum;
import cn.iocoder.yudao.module.iot.framework.gateway.service.impl.TheGatewayServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -14,9 +19,14 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceAttributeMapper; import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceAttributeMapper;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
@ -34,6 +44,9 @@ public class DeviceServiceImpl implements DeviceService {
@Resource @Resource
private DeviceAttributeMapper deviceAttributeMapper; private DeviceAttributeMapper deviceAttributeMapper;
@Resource
private TheGatewayServiceImpl theGatewayService;
@Override @Override
public Long createDevice(DeviceSaveReqVO createReqVO) { public Long createDevice(DeviceSaveReqVO createReqVO) {
// 插入 // 插入
@ -79,7 +92,63 @@ public class DeviceServiceImpl implements DeviceService {
public PageResult<DeviceDO> getDevicePage(DevicePageReqVO pageReqVO) { public PageResult<DeviceDO> getDevicePage(DevicePageReqVO pageReqVO) {
return deviceMapper.selectPage(pageReqVO); return deviceMapper.selectPage(pageReqVO);
} }
@Override
public CommonResult<String> pushDevice(DeviceDO deviceDO, GatewayDO gatewayDO){
if(DeviceTypeEnum.isSiemens(deviceDO.getDeviceType())){
return siemensAdd(deviceDO,gatewayDO);
}
else if(DeviceTypeEnum.isModbus(deviceDO.getDeviceType())){
return modbusAdd(deviceDO,gatewayDO);
}
else return CommonResult.error(500,"未知类型设备!");
}
public CommonResult<String> siemensAdd(DeviceDO deviceDO, GatewayDO gatewayDO) {
if (gatewayDO != null && deviceDO != null &&
deviceDO.getDeviceCode() != null && gatewayDO.getGatewayCode() != null) {
try {
//清除原本的西门子设备和点位数据
theGatewayService.deleteSiemensEntity(gatewayDO, deviceDO);
//新增西门子设备
theGatewayService.addSiemensEntity(gatewayDO, deviceDO);
//下发完成西门子设备后 下发对应设备的点位
theGatewayService.addDeviceSiemensEntity(gatewayDO, deviceDO.getOrgMachineId(), deviceDO);
//修改下发标识
deviceDO.setIsUpload("1");
deviceMapper.updateById(deviceDO);
//启用设备
//todo 启用有点问题
theGatewayService.changeStatus(gatewayDO, deviceDO.getDeviceCode(), "siemens");
return theGatewayService.compare(gatewayDO, deviceDO, "siemens");
} catch (Exception e) {
e.getLocalizedMessage();
}
}
return CommonResult.error(500,"设备或网关不存在!");
}
/*modbus设备下发*/
public CommonResult<String> modbusAdd(DeviceDO deviceDO, GatewayDO gatewayDO) {
if (deviceDO.getDeviceCode() != null && gatewayDO.getGatewayCode() != null) {
try {
//清除原本的Modbus设备和点位数据
theGatewayService.deleteModbusEntity(gatewayDO, deviceDO.getDeviceCode());
//新增Modbus
theGatewayService.addModbusEntity(gatewayDO, deviceDO);
//下发完成Modbus设备后 下发对应设备的点位
theGatewayService.addDeviceModbusEntity(gatewayDO, deviceDO);
//修改下发标识
deviceDO.setIsUpload("1");
deviceMapper.updateById(deviceDO);
//启用设备
theGatewayService.changeStatus(gatewayDO, deviceDO.getDeviceCode(), "modbus");
return theGatewayService.compare(gatewayDO, deviceDO, "modbus");
} catch (Exception e) {
e.getLocalizedMessage();
}
}
return CommonResult.error(500,"设备或网关不存在!");
}
// ==================== 子表(设备属性) ==================== // ==================== 子表(设备属性) ====================
@Override @Override

@ -33,4 +33,8 @@ public interface BomMapper extends BaseMapperX<BomDO> {
default BomDO selectByNo(String no) { default BomDO selectByNo(String no) {
return selectOne(BomDO::getCode, no); return selectOne(BomDO::getCode, no);
} }
default BomDO selectByProductId(Long productId) {
return selectOne(BomDO::getProductId, productId,
BomDO::getIsEnable,true);
}
} }

@ -1,11 +1,16 @@
package cn.iocoder.yudao.module.mes.dal.mysql.stockworkshop; package cn.iocoder.yudao.module.mes.dal.mysql.stockworkshop;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*;
@ -25,5 +30,15 @@ public interface StockWorkshopMapper extends BaseMapperX<StockWorkshopDO> {
.betweenIfPresent(StockWorkshopDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(StockWorkshopDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(StockWorkshopDO::getId)); .orderByDesc(StockWorkshopDO::getId));
} }
default BigDecimal selectSumByProductId(Long productId) {
// SQL sum 查询
List<Map<String, Object>> result = selectMaps(new QueryWrapper<StockWorkshopDO>()
.select("SUM(count) AS sumCount")
.eq("item_id", productId));
// 获得数量
if (CollUtil.isEmpty(result)) {
return BigDecimal.ZERO;
}
return BigDecimal.valueOf(MapUtil.getDouble(result.get(0), "sumCount", 0D));
}
} }

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.mes.framework.redis; package cn.iocoder.yudao.module.mes.dal.redis;
/** /**
* CRM Redis Key * CRM Redis Key

@ -1,8 +1,10 @@
package cn.iocoder.yudao.module.mes.framework.redis; package cn.iocoder.yudao.module.mes.dal.redis.no;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.iocoder.yudao.module.mes.dal.redis.RedisKeyConstants;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -16,6 +18,7 @@ import java.time.LocalDateTime;
* @author HUIHUI * @author HUIHUI
*/ */
@Repository @Repository
@Component
public class MesNoRedisDAO { public class MesNoRedisDAO {

@ -64,4 +64,20 @@ public interface BomService {
*/ */
List<BomDetailRespVO> getBomDetailListByBomId(Long bomId); List<BomDetailRespVO> getBomDetailListByBomId(Long bomId);
/**
*
*
* @param productId ID
* @return BOM
*/
List<BomDetailDO> getBomDetailListByProductId(Long productId);
/**
*
*
* @param productId ID
* @return BOM
*/
List<BomDetailDO> getBomDetailListByProductId(Long productId, Long number);
BomDO selectByProductId(Long productId);
} }

@ -1,24 +1,26 @@
package cn.iocoder.yudao.module.mes.service.bom; package cn.iocoder.yudao.module.mes.service.bom;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.erp.framework.bean.ProductUnitEnum;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService;
import cn.iocoder.yudao.module.mes.framework.redis.MesNoRedisDAO; import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*; import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.bom.vo.*; import cn.iocoder.yudao.module.mes.controller.admin.bom.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDO; import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDetailDO; import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDetailDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.dal.mysql.bom.BomMapper; import cn.iocoder.yudao.module.mes.dal.mysql.bom.BomMapper;
@ -28,7 +30,6 @@ import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PURCHASE_ORDER_NO_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
/** /**
@ -53,6 +54,12 @@ public class BomServiceImpl implements BomService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createBom(BomSaveReqVO createReqVO) { public Long createBom(BomSaveReqVO createReqVO) {
if(createReqVO.getIsEnable()){
BomDO temp = bomMapper.selectByProductId(createReqVO.getProductId());
if(temp!=null){
throw exception(new ErrorCode(500,"每个产品启用的BOM只能有一个请先禁用改产品其他BOM"));
}
}
// 插入 // 插入
BomDO bom = BeanUtils.toBean(createReqVO, BomDO.class); BomDO bom = BeanUtils.toBean(createReqVO, BomDO.class);
bomMapper.insert(bom); bomMapper.insert(bom);
@ -60,7 +67,7 @@ public class BomServiceImpl implements BomService {
// 1.4 生成订单号,并校验唯一性 // 1.4 生成订单号,并校验唯一性
String no = noRedisDAO.generate2(MesNoRedisDAO.BOM_NO_PREFIX); String no = noRedisDAO.generate2(MesNoRedisDAO.BOM_NO_PREFIX);
if (bomMapper.selectByNo(no) != null) { if (bomMapper.selectByNo(no) != null) {
throw exception(PURCHASE_ORDER_NO_EXISTS); throw exception(BOM_EXISTS);
} }
bom.setCode(no); bom.setCode(no);
} }
@ -73,6 +80,12 @@ public class BomServiceImpl implements BomService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateBom(BomSaveReqVO updateReqVO) { public void updateBom(BomSaveReqVO updateReqVO) {
if(updateReqVO.getIsEnable()){
BomDO temp = bomMapper.selectByProductId(updateReqVO.getProductId());
if(temp!=null && !Objects.equals(temp.getId(), updateReqVO.getId())){
throw exception(new ErrorCode(500,"每个产品启用的BOM只能有一个请先禁用改产品其他BOM"));
}
}
// 校验存在 // 校验存在
validateBomExists(updateReqVO.getId()); validateBomExists(updateReqVO.getId());
// 更新 // 更新
@ -105,7 +118,10 @@ public class BomServiceImpl implements BomService {
public BomDO getBom(Long id) { public BomDO getBom(Long id) {
return bomMapper.selectById(id); return bomMapper.selectById(id);
} }
@Override
public BomDO selectByProductId(Long productId) {
return bomMapper.selectByProductId(productId);
}
@Override @Override
public PageResult<BomRespVO> getBomPage(BomPageReqVO pageReqVO) { public PageResult<BomRespVO> getBomPage(BomPageReqVO pageReqVO) {
PageResult<BomDO> pageResult = bomMapper.selectPage(pageReqVO); PageResult<BomDO> pageResult = bomMapper.selectPage(pageReqVO);
@ -134,6 +150,34 @@ public class BomServiceImpl implements BomService {
List<BomDetailDO> list = bomDetailMapper.selectListByBomId(bomId); List<BomDetailDO> list = bomDetailMapper.selectListByBomId(bomId);
return buildDetailVOList(list); return buildDetailVOList(list);
} }
@Override
public List<BomDetailDO> getBomDetailListByProductId(Long productId) {
BomDO bomDO = bomMapper.selectByProductId(productId);
List<BomDetailDO> list = bomDetailMapper.selectListByBomId(bomDO.getId());
return list;
}
/***idbomkg
*
*/
@Override
public List<BomDetailDO> getBomDetailListByProductId(Long productId, Long number) {
BomDO bomDO = bomMapper.selectByProductId(productId);
List<BomDetailDO> list = bomDetailMapper.selectListByBomId(bomDO.getId());
for (BomDetailDO detail : list) {
BigDecimal result = detail.getUsageNumber().multiply(BigDecimal.valueOf(number));
//如果是g则统一到kg
if(detail.getUnitId().equals(ProductUnitEnum.Gram.getUnitId())){
detail.setUsageNumber(result.divide(BigDecimal.valueOf(1000),3, RoundingMode.HALF_UP));
detail.setUnitId(ProductUnitEnum.Kilogram.getUnitId());
}else{
detail.setUsageNumber(result);
}
}
return list;
}
private List<BomDetailRespVO> buildDetailVOList(List<BomDetailDO> list) { private List<BomDetailRespVO> buildDetailVOList(List<BomDetailDO> list) {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return Collections.emptyList(); return Collections.emptyList();

@ -0,0 +1,46 @@
package cn.iocoder.yudao.module.mes.service.itemrequisition;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDetailDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDO;
import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock;
import javax.validation.Valid;
import java.util.List;
/**
* Service
*
* @author
*/
public interface ItemAnalysisService {
/**
*
*
* @param taskDO
* @return
*/
public List<ItemRequisitionAndStock> getItemAnalysis(TaskDO taskDO);
/**
*
*
* @param plan
* @return
*/
public List<ItemRequisitionAndStock> getItemAnalysis(PlanDO plan);
/**
*
*
* @param saleOrderDO
* @return
*/
public List<ItemRequisitionAndStock> getItemAnalysis(ErpSaleOrderDO saleOrderDO);
}

@ -0,0 +1,183 @@
package cn.iocoder.yudao.module.mes.service.itemrequisition;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import cn.iocoder.yudao.module.erp.framework.bean.ProductUnitEnum;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService;
import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOrderService;
import cn.iocoder.yudao.module.erp.service.stock.ErpStockService;
import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDetailDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDetailDO;
import cn.iocoder.yudao.module.mes.service.bom.BomService;
import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock;
import cn.iocoder.yudao.module.mes.service.stockworkshop.StockWorkshopService;
import cn.iocoder.yudao.module.mes.service.task.TaskService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
/**
* Service
*
* @author
*/
@Service
@Validated
public class ItemAnalysisServiceImpl implements ItemAnalysisService {
private static final Logger log = LoggerFactory.getLogger(ItemAnalysisServiceImpl.class);
private static final String UNIT_ERROR = "物料bom单位不一致";
@Resource
private ErpStockService erpStockService;
@Resource
private StockWorkshopService stockWorkshopService;
@Resource
private TaskService taskService;
@Resource
private BomService bomService;
@Resource
private ErpProductService productService;
@Resource
private ErpProductUnitService productUnitService;
@Resource
private ErpSaleOrderService saleOrderService;
//分析任务单的物料需求
@Override
public List<ItemRequisitionAndStock> getItemAnalysis(TaskDO taskDO) {
List<TaskDetailDO> detailDOList = taskService.getTaskDetailListByTaskId(taskDO.getId());
Map<Long, ItemRequisitionAndStock> itemMap = new HashMap<>();
//算物料需求
for (TaskDetailDO detail :detailDOList) {
//这里要求销售的单位和物料单位一致等于内置单位
BomDO bomDO = bomService.selectByProductId(detail.getProductId());
if(!bomDO.getUnitId().equals(ProductUnitEnum.Each.getUnitId())
|| !detail.getUnitId().equals(ProductUnitEnum.Each.getUnitId())){
log.error(UNIT_ERROR);
throw exception(new ErrorCode(500, UNIT_ERROR));
}
//每个taskDetail计算一次物料需求汇总到map里面
List<BomDetailDO> bomDetailDOList =
bomService.getBomDetailListByProductId(detail.getProductId(), detail.getNumber());
buildItemMap(itemMap, bomDetailDOList);
}
//算库存
for (Long key : itemMap.keySet()) {
BigDecimal stockCount = erpStockService.getStockCount(key);
itemMap.get(key).setStockNumber(stockCount);
BigDecimal stockWorkshopCount = stockWorkshopService.getStockCount(key);
itemMap.get(key).setStockWorkshopNumber(stockWorkshopCount);
}
List<ItemRequisitionAndStock> list = new ArrayList<>(itemMap.values());
list = buildDetailVOList(list);
return list;
}
//分析计划的物料需求
@Override
public List<ItemRequisitionAndStock> getItemAnalysis(PlanDO plan) {
List<ItemRequisitionAndStock> list = new ArrayList<>();
List<BomDetailDO> bomDetailDOList =
bomService.getBomDetailListByProductId(plan.getProductId(), plan.getPlanNumber());
for (BomDetailDO bomDetail : bomDetailDOList) {
Long itemId = bomDetail.getProductId();
ItemRequisitionAndStock temp = new ItemRequisitionAndStock()
.setItemId(itemId)
.setNumber(bomDetail.getUsageNumber());
BigDecimal stockCount = erpStockService.getStockCount(itemId);
temp.setStockNumber(stockCount);
BigDecimal stockWorkshopCount = stockWorkshopService.getStockCount(itemId);
temp.setStockWorkshopNumber(stockWorkshopCount);
list.add(temp);
}
return list;
}
@Override
public List<ItemRequisitionAndStock> getItemAnalysis(ErpSaleOrderDO saleOrderDO) {
List<ErpSaleOrderItemDO> detailDOList = saleOrderService.getSaleOrderItemListByOrderId(saleOrderDO.getId());
Map<Long, ItemRequisitionAndStock> itemMap = new HashMap<>();
//算物料需求
for (ErpSaleOrderItemDO detail :detailDOList) {
//这里要求销售的单位和物料单位一致等于内置单位
BomDO bomDO = bomService.selectByProductId(detail.getProductId());
if(!bomDO.getUnitId().equals(ProductUnitEnum.Each.getUnitId())
|| !detail.getProductUnitId().equals(ProductUnitEnum.Each.getUnitId())){
log.error(UNIT_ERROR);
throw exception(new ErrorCode(500, UNIT_ERROR));
}
//每个detail计算一次物料需求汇总到map里面
List<BomDetailDO> bomDetailDOList =
bomService.getBomDetailListByProductId(detail.getProductId(), detail.getCount().longValue());
buildItemMap(itemMap, bomDetailDOList);
}
//算库存
for (Long key : itemMap.keySet()) {
BigDecimal stockCount = erpStockService.getStockCount(key);
itemMap.get(key).setStockNumber(stockCount);
BigDecimal stockWorkshopCount = stockWorkshopService.getStockCount(key);
itemMap.get(key).setStockWorkshopNumber(stockWorkshopCount);
}
List<ItemRequisitionAndStock> list = new ArrayList<>(itemMap.values());
list = buildDetailVOList(list);
return list;
}
//添加原料名称,添加单位名称
private List<ItemRequisitionAndStock> buildDetailVOList(List<ItemRequisitionAndStock> list) {
if (CollUtil.isEmpty(list)) {
return Collections.emptyList();
}
Map<Long, ErpProductDO> map = productService.getProductMap(
convertSet(list, ItemRequisitionAndStock::getItemId));
Map<Long, ErpProductUnitDO> unitMap = productUnitService.getProductUnitMap(
convertSet(list, ItemRequisitionAndStock::getUnitId));
return BeanUtils.toBean(list, ItemRequisitionAndStock.class, item -> {
MapUtils.findAndThen(map, item.getItemId(),
product -> item.setItemName(product.getName()));
MapUtils.findAndThen(unitMap, item.getUnitId(),
unit -> item.setUnitName(unit.getName()));
});
}
private void buildItemMap(Map<Long, ItemRequisitionAndStock> itemMap, List<BomDetailDO> bomDetailDOList){
for (BomDetailDO bomDetail : bomDetailDOList) {
if(itemMap.containsKey(bomDetail.getProductId())){
ItemRequisitionAndStock temp = itemMap.get(bomDetail.getProductId());
//比较单位是否一致
if(! temp.getUnitId().equals(bomDetail.getUnitId())){
log.error(UNIT_ERROR);
throw exception(new ErrorCode(500, UNIT_ERROR));
}
temp.setNumber(temp.getNumber().add(bomDetail.getUsageNumber()));
}
else{
ItemRequisitionAndStock temp = new ItemRequisitionAndStock()
.setItemId(bomDetail.getProductId())
.setNumber(bomDetail.getUsageNumber())
.setUnitId(bomDetail.getUnitId());
itemMap.put(bomDetail.getProductId(),temp);
}
}
}
}

@ -1,6 +1,6 @@
package cn.iocoder.yudao.module.mes.service.itemrequisition; package cn.iocoder.yudao.module.mes.service.itemrequisition;
import cn.iocoder.yudao.module.mes.framework.redis.MesNoRedisDAO; import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -11,7 +11,6 @@ import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDO; import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDetailDO; import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDetailDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.dal.mysql.itemrequisition.ItemRequisitionMapper; import cn.iocoder.yudao.module.mes.dal.mysql.itemrequisition.ItemRequisitionMapper;

@ -0,0 +1,53 @@
package cn.iocoder.yudao.module.mes.service.itemrequisition.entity;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
*
*
* @author
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ItemRequisitionAndStock {
/**
* ID
*/
private Long itemId;
/**
*
*/
private String itemName;
/**
* id
*/
private Long unitId;
/**
*
*/
private String unitName;
/**
*
*/
private BigDecimal number;
/**
*
*/
private BigDecimal stockNumber;
/**
*
*/
private BigDecimal stockWorkshopNumber;
}

@ -3,25 +3,20 @@ package cn.iocoder.yudao.module.mes.service.plan;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import cn.iocoder.yudao.module.mes.controller.admin.bom.vo.BomRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDO; import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDO;
import cn.iocoder.yudao.module.mes.framework.redis.MesNoRedisDAO; import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO;
import cn.iocoder.yudao.module.mes.service.task.TaskService; import cn.iocoder.yudao.module.mes.service.task.TaskService;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.*; import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.dal.mysql.plan.PlanMapper; import cn.iocoder.yudao.module.mes.dal.mysql.plan.PlanMapper;
@ -30,7 +25,6 @@ import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PURCHASE_ORDER_NO_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
/** /**

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.mes.service.stockworkshop; package cn.iocoder.yudao.module.mes.service.stockworkshop;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO;
@ -53,4 +54,14 @@ public interface StockWorkshopService {
*/ */
PageResult<StockWorkshopDO> getStockWorkshopPage(StockWorkshopPageReqVO pageReqVO); PageResult<StockWorkshopDO> getStockWorkshopPage(StockWorkshopPageReqVO pageReqVO);
/**
*
*
* 0
*
* @param productId
* @return
*/
BigDecimal getStockCount(Long productId);
} }

@ -4,6 +4,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO;
@ -72,4 +73,10 @@ public class StockWorkshopServiceImpl implements StockWorkshopService {
return stockWorkshopMapper.selectPage(pageReqVO); return stockWorkshopMapper.selectPage(pageReqVO);
} }
@Override
public BigDecimal getStockCount(Long productId) {
BigDecimal count = stockWorkshopMapper.selectSumByProductId(productId);
return count != null ? count : BigDecimal.ZERO;
}
} }

@ -4,13 +4,9 @@ import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService;
import cn.iocoder.yudao.module.mes.controller.admin.bom.vo.BomDetailRespVO; import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO;
import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDetailDO;
import cn.iocoder.yudao.module.mes.framework.redis.MesNoRedisDAO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;

@ -150,7 +150,7 @@ yudao:
base-package: cn.iocoder.yudao base-package: cn.iocoder.yudao
web: web:
admin-ui: admin-ui:
url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址 url: http://localhost # Admin 管理后台 UI 的地址
security: security:
permit-all_urls: permit-all_urls:
- /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,不需要登录 - /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,不需要登录

Loading…
Cancel
Save