Commit 1b68dfaa authored by tianbo's avatar tianbo

feat(cylinder-info): 气瓶接口同步调整

parent fa32d31b
......@@ -2,9 +2,11 @@ package com.yeejoin.amos;
import java.net.InetAddress;
import com.yeejoin.amos.api.openapi.service.StartPlatformTokenService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......@@ -15,6 +17,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.env.Environment;
......@@ -55,6 +58,9 @@ public class OpenapiApplication {
private static final Logger logger = LogManager.getLogger(OpenapiApplication.class);
@Autowired
private StartPlatformTokenService startPlatformTokenService;
public static void main(String[] args) throws Exception {
// //license授权验证
// System.setProperty("root.path",ClassPathUtil.getPath()+"/config");
......@@ -71,4 +77,9 @@ public class OpenapiApplication {
+ "Application Amos-Biz-Boot is running! Access URLs:\n\t" + "Swagger文档: \thttp://" + ip + ":" + port
+ path + "/doc.html\n" + "----------------------------------------------------------");
}
@Bean
public void init() {
startPlatformTokenService.getToken();
}
}
package com.yeejoin.amos.api.openapi.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.yeejoin.amos.api.common.restful.utils.ResponseHelper;
import com.yeejoin.amos.api.common.restful.utils.ResponseModel;
import com.yeejoin.amos.api.openapi.face.model.*;
import com.yeejoin.amos.api.openapi.face.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.sf.json.JSONObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -17,15 +18,11 @@ import org.typroject.tyboot.component.event.RestEventTrigger;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.doc.TycloudResource;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.yeejoin.amos.api.common.restful.utils.ResponseHelper;
import com.yeejoin.amos.api.common.restful.utils.ResponseModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.sf.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/cylinder")
......@@ -55,8 +52,8 @@ public class CylinderController {
@ApiOperation(value = "气瓶企业信息")
@PostMapping(value = "/unit")
@RestEventTrigger(value = "openapiLogEventHandler")
public ResponseModel<String> cylinderUnit(@RequestBody List<TmCylinderUnitModel> unitData) throws Exception {
cylinderFillingDataValidationService.validatEcylinderUnit(unitData);
public ResponseModel<String> cylinderUnit(@RequestBody List<TmCylinderUnitModel> unitData) {
cylinderFillingDataValidationService.validateCylinderUnit(unitData);
return ResponseHelper.buildResponse(cylinderUnitService.createCylinderUnit(unitData));
}
......@@ -64,7 +61,7 @@ public class CylinderController {
@ApiOperation(value = "气瓶基础数据")
@PostMapping(value = "/info")
@RestEventTrigger(value = "openapiLogEventHandler")
public ResponseModel<String> cylinderInfo(@RequestBody List<TmCylinderInfoModel> infoData) throws Exception {
public ResponseModel<String> cylinderInfo(@RequestBody List<TmCylinderInfoModel> infoData) {
cylinderFillingDataValidationService.validateCylinderInfo(infoData);
return ResponseHelper.buildResponse(cylinderInfoService.createCylinderInfo(infoData));
}
......@@ -73,7 +70,7 @@ public class CylinderController {
@ApiOperation(value = "气瓶标签数据")
@PostMapping(value = "/tag")
@RestEventTrigger(value = "openapiLogEventHandler")
public ResponseModel<String> cylinderTagInfo(@RequestBody List<TmCylinderTagsModel> tagData) throws Exception {
public ResponseModel<String> cylinderTagInfo(@RequestBody List<TmCylinderTagsModel> tagData) {
cylinderFillingDataValidationService.validateCylinderTag(tagData);
return ResponseHelper.buildResponse(cylinderTagsService.createCylinderTag(tagData));
}
......@@ -82,7 +79,7 @@ public class CylinderController {
@ApiOperation(value = "气瓶检验数据")
@PostMapping(value = "/inspection")
@RestEventTrigger(value = "openapiLogEventHandler")
public ResponseModel<String> cylinderInspectionInfo(@RequestBody List<TmCylinderInspectionModel> inspectionData) throws Exception {
public ResponseModel<String> cylinderInspectionInfo(@RequestBody List<TmCylinderInspectionModel> inspectionData) {
cylinderFillingDataValidationService.validateCylinderInspection(inspectionData);
return ResponseHelper.buildResponse(cylinderInspectionService.createCylinderInspection(inspectionData));
......@@ -94,43 +91,34 @@ public class CylinderController {
@RestEventTrigger(value = "openapiLogEventHandler")
public ResponseModel<String> cylinderFillingInfo(@RequestBody String fillingData) throws Exception {
// logger.info("气瓶充装数据"+fillingData);
JSONObject jsonobject = JSONObject.fromObject(fillingData);
cylinderFillingDataValidationService.validateFilling(jsonobject);
Map<String, Class> classMap = new HashMap<String, Class>();
Map<String, Class> classMap = new HashMap<>();
classMap.put("fillingBefore", TmCylinderFillingModel.class);
classMap.put("filling", TmCylinderFillingRecordModel.class);
classMap.put("fillingAfter", TmCylinderFillingCheckModel.class);
TmCylinderFillingModelList cylinderFillingModelList = (TmCylinderFillingModelList) JSONObject.toBean(jsonobject,
TmCylinderFillingModelList.class, classMap);
List<TmCylinderFillingModel> fillingBefores = cylinderFillingModelList.getFillingBefore();
List<TmCylinderFillingRecordModel> fillings = cylinderFillingModelList.getFilling();
List<TmCylinderFillingCheckModel> fillingAfters = cylinderFillingModelList.getFillingAfter();
if (ValidationUtil.isEmpty(fillingBefores) && ValidationUtil.isEmpty(fillings) && ValidationUtil.isEmpty(fillingAfters)) {
List<TmCylinderFillingModel> fillingBeforeList = cylinderFillingModelList.getFillingBefore();
List<TmCylinderFillingRecordModel> fillingList = cylinderFillingModelList.getFilling();
List<TmCylinderFillingCheckModel> fillingAfterList = cylinderFillingModelList.getFillingAfter();
if (ValidationUtil.isEmpty(fillingBeforeList) && ValidationUtil.isEmpty(fillingList) && ValidationUtil.isEmpty(fillingAfterList)) {
throw new BadRequest("液化气体气瓶充装信息-充装前检查信息、液化气体气瓶充装信息-充装记录信息、液化气体气瓶充装信息-充装后复查信息为空.");
}
cylinderFillingService.createCylinderFillingBefore(fillingBefores);
cylinderFillingRecordService.createCylinderFilling(fillings);
cylinderFillingCheckService.createCylinderFillingAfter(fillingAfters);
// if (ValidationUtil.isEmpty(fillings)) {
// throw new BadRequest("液化气体气瓶充装信息-充装记录信息为空.");
// }else {
// }
// if (ValidationUtil.isEmpty(fillingAfters)) {
// throw new BadRequest("液化气体气瓶充装信息-充装后复查信息为空.");
// }else {
// }
return ResponseHelper.buildResponse("");
cylinderFillingService.createCylinderFillingBefore(fillingBeforeList);
cylinderFillingRecordService.createCylinderFilling(fillingList);
cylinderFillingCheckService.createCylinderFillingAfter(fillingAfterList);
return ResponseHelper.buildResponse("OK");
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(value = "气瓶充装审核数据")
@PostMapping(value = "/fillingAudit")
@RestEventTrigger(value = "openapiLogEventHandler")
public ResponseModel<String> cylinderFillingAudit(@RequestBody List<TmCylinderFillingExamineModel> fillingAuditData) throws Exception {
public ResponseModel<String> cylinderFillingAudit(@RequestBody List<TmCylinderFillingExamineModel> fillingAuditData) {
cylinderFillingDataValidationService.validateCylinderFillingExamineModel(fillingAuditData);
return ResponseHelper.buildResponse(cylinderFillingExamineService.createCylinderFillingExamine(fillingAuditData));
......
......@@ -2,7 +2,9 @@ package com.yeejoin.amos.api.openapi.controller;
import com.yeejoin.amos.api.common.restful.utils.ResponseHelper;
import com.yeejoin.amos.api.common.restful.utils.ResponseModel;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.enums.FileFolderPathEnum;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import io.swagger.annotations.Api;
......@@ -10,8 +12,12 @@ import io.swagger.annotations.ApiOperation;
import net.sf.json.JSONObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
......@@ -28,13 +34,22 @@ import java.util.Map;
public class FilesController {
private static final Logger logger = LogManager.getLogger(FilesController.class);
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@Autowired
private RedisTemplate redisTemplate;
@TycloudOperation(ApiLevel = UserType.AGENCY, enableLimitStrategy = true, needAuth = false)
@ApiOperation(value = "气瓶充装审核数据")
@PostMapping(value = "/")
@PostMapping(value = "/upload")
public ResponseModel<String> uploadCylinderFiles(
@RequestBody MultipartFile file) throws Exception {
@RequestBody MultipartFile file) {
logger.info(file);
JSONObject jsonObj = uploadFile(file, FileFolderPathEnum.CYLINDER.getPath());
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX, RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) this.redisTemplate.opsForValue().get(tokenKey);
if (bizTokenModel == null) {
throw new BadRequest("登录信息失效.");
}
String appId = bizTokenModel.getAppId();
JSONObject jsonObj = uploadFile(file, FileFolderPathEnum.CYLINDER.getPath() + appId);
return ResponseHelper.buildResponse(jsonObj.toString());
}
......@@ -42,7 +57,7 @@ public class FilesController {
@ApiOperation(value = "检验报告数据")
@PostMapping(value = "/csei")
public ResponseModel<String> uploadCseiFiles(
@RequestBody MultipartFile file) throws Exception {
@RequestBody MultipartFile file) {
logger.info(file);
JSONObject jsonObj = uploadFile(file, FileFolderPathEnum.JY.getPath());
return ResponseHelper.buildResponse(jsonObj.toString());
......
......@@ -14,20 +14,18 @@ public enum CylinderFillingAuditFieldEnum {
fillingExamineId(true, true),
fillingAuditDate(true, false),
fillingAuditUrl(true, false),
fillingAuditname(true, false),
fillingAuditName(true, false),
syncDate(true, false),
syncState(true, false);
private boolean isRequire;
private boolean isUnique;
private final boolean isRequire;
private final boolean isUnique;
public static List<String> getAllRequireKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isRequire).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isRequire).map(Enum::name).collect(Collectors.toList());
}
public static List<String> getAllUniqueKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isUnique).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isUnique).map(Enum::name).collect(Collectors.toList());
}
}
......@@ -20,6 +20,7 @@ public enum CylinderInfoFieldEnum {
fillingMediaName(true, false),
manufacturingUnit(true, false),
manufacturingDate(true, false),
manufacturingUnitCreditCode(true, false),
valveManufacturUnit(true, false),
nominalWorkPressure(true, false),
volume(true, false),
......@@ -35,12 +36,10 @@ public enum CylinderInfoFieldEnum {
private boolean isUnique;
public static List<String> getAllRequireKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isRequire).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isRequire).map(Enum::name).collect(Collectors.toList());
}
public static List<String> getAllUniqueKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isUnique).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isUnique).map(Enum::name).collect(Collectors.toList());
}
}
......@@ -11,24 +11,23 @@ import java.util.stream.Collectors;
@Getter
public enum CylinderInspectionFieldEnum {
sequenceCode(true, true),
inspectionUnit(true, true),
inspectionDate(true, true),
inspectionResult(true, true),
scrapQuantity(true, true),
nextInspectionDate(true, true),
syncDate(true, true),
syncState(true, true);
inspectionUnit(true, false),
inspectionDate(true, false),
inspectionResult(true, false),
scrapQuantity(true, false),
nextInspectionDate(true, false),
syncDate(true, false),
syncState(true, false);
private boolean isRequire;
private boolean isUnique;
private final boolean isRequire;
private final boolean isUnique;
public static List<String> getAllRequireKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isRequire).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isRequire).map(Enum::name).collect(Collectors.toList());
}
public static List<String> getAllUniqueKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isUnique).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isUnique).map(Enum::name).collect(Collectors.toList());
}
}
......@@ -13,20 +13,18 @@ public enum CylinderTagFieldEnum {
sequenceCode(true, true),
qrCode(true, true),
electronicLabelCode(true, true),
gasCylinderStamp(true, true),
gasCylinderStamp(true, false),
syncDate(true, false),
syncState(true, false);
private boolean isRequire;
private boolean isUnique;
private final boolean isRequire;
private final boolean isUnique;
public static List<String> getAllRequireKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isRequire).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isRequire).map(Enum::name).collect(Collectors.toList());
}
public static List<String> getAllUniqueKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isUnique).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isUnique).map(Enum::name).collect(Collectors.toList());
}
}
......@@ -24,18 +24,19 @@ public enum CylinderUnitFieldEnum {
securityAdmPhone(true, false),
postalCode(true, false),
syncDate(true, false),
syncState(true, false);
syncState(true, false),
qualificationFile(true, false),
useRegisterFile(true, false),
deviceSummaryFile(true, false);
private boolean isRequire;
private boolean isUnique;
private final boolean isRequire;
private final boolean isUnique;
public static List<String> getAllRequireKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isRequire).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isRequire).map(Enum::name).collect(Collectors.toList());
}
public static List<String> getAllUniqueKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isUnique).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isUnique).map(Enum::name).collect(Collectors.toList());
}
}
......@@ -18,7 +18,7 @@ public enum FileFolderPathEnum {
/**
* 气瓶
*/
CYLINDER("cylinder","/cylinder"),
CYLINDER("cylinder","cylinder/"),
/**
* 一码通
*/
......
......@@ -15,7 +15,7 @@ public enum FillingAfterFieldEnum {
withinScope(true, false),
sealedState(true, false),
defective(true, false),
abnormaLTemperature(true, false),
abnormalTemperature(true, false),
warningSign(true, false),
compliance(true, false),
checkResults(true, false),
......@@ -25,16 +25,14 @@ public enum FillingAfterFieldEnum {
syncDate(true, false),
syncState(true, false);
private boolean isRequire;
private boolean isUnique;
private final boolean isRequire;
private final boolean isUnique;
public static List<String> getAllRequireKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isRequire).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isRequire).map(Enum::name).collect(Collectors.toList());
}
public static List<String> getAllUniqueKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isUnique).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isUnique).map(Enum::name).collect(Collectors.toList());
}
}
......@@ -30,16 +30,14 @@ public enum FillingBeforeFieldEnum {
syncDate(true, false),
syncState(true, false);
private boolean isRequire;
private boolean isUnique;
private final boolean isRequire;
private final boolean isUnique;
public static List<String> getAllRequireKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isRequire).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isRequire).map(Enum::name).collect(Collectors.toList());
}
public static List<String> getAllUniqueKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isUnique).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isUnique).map(Enum::name).collect(Collectors.toList());
}
}
......@@ -27,16 +27,14 @@ public enum FillingRecordFieldEnum {
syncDate(true, false),
syncState(true, false);
private boolean isRequire;
private boolean isUnique;
private final boolean isRequire;
private final boolean isUnique;
public static List<String> getAllRequireKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isRequire).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isRequire).map(Enum::name).collect(Collectors.toList());
}
public static List<String> getAllUniqueKeys() {
List<String> keys = Arrays.stream(values()).filter(e -> e.isUnique).map(e -> e.name()).collect(Collectors.toList());
return keys;
return Arrays.stream(values()).filter(e -> e.isUnique).map(Enum::name).collect(Collectors.toList());
}
}
package com.yeejoin.amos.api.openapi.face.builder;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.List;
public interface QueryConditionBuilder {
<T> void buildQueryWrapper(QueryWrapper<T> queryWrapper, List<T> entity);
}
package com.yeejoin.amos.api.openapi.face.builder;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.yeejoin.amos.api.openapi.face.orm.entity.*;
import java.util.List;
import java.util.stream.Collectors;
public class UniqueFieldsQueryBuilder implements QueryConditionBuilder{
@Override
public <T> void buildQueryWrapper(QueryWrapper<T> queryWrapper, List<T> entityList) {
Assert.notEmpty(entityList, "error: entityList must not be empty");
T entity = entityList.get(0); // 根据气瓶对接数据具体业务,每个接口都只包含一种类型,所以可根据其中一个元素来进行类型判断
if (entity instanceof TmCylinderUnit) {
List<TmCylinderUnit> unitList = (List<TmCylinderUnit>) entityList;
queryWrapper.eq("app_id", unitList.stream().map(AbstractBaseEntity::getAppId).findFirst().get());
}
if (entity instanceof TmCylinderInfo) {
List<TmCylinderInfo> infoList = (List<TmCylinderInfo>) entityList;
queryWrapper.in("app_id", infoList.stream().map(AbstractBaseEntity::getAppId).collect(Collectors.toList()));
queryWrapper.in("sequence_code", infoList.stream().map(TmCylinderInfo::getSequenceCode).collect(Collectors.toList()));
}
if (entity instanceof TmCylinderTags) {
List<TmCylinderTags> tagsList = (List<TmCylinderTags>) entityList;
queryWrapper.in("app_id", tagsList.stream().map(AbstractBaseEntity::getAppId).collect(Collectors.toList()));
queryWrapper.in("sequence_code", tagsList.stream().map(TmCylinderTags::getSequenceCode).collect(Collectors.toList()));
}
if (entity instanceof TmCylinderInspection) {
List<TmCylinderInspection> inspectionList = (List<TmCylinderInspection>) entityList;
queryWrapper.in("app_id", inspectionList.stream().map(AbstractBaseEntity::getAppId).collect(Collectors.toList()));
queryWrapper.in("sequence_code", inspectionList.stream().map(TmCylinderInspection::getSequenceCode).collect(Collectors.toList()));
queryWrapper.in("inspection_date", inspectionList.stream().map(TmCylinderInspection::getInspectionDate).collect(Collectors.toList()));
}
if (entity instanceof TmCylinderFillingExamine) {
List<TmCylinderFillingExamine> fillingExamineList = (List<TmCylinderFillingExamine>) entityList;
queryWrapper.in("app_id", fillingExamineList.stream().map(AbstractBaseEntity::getAppId).collect(Collectors.toList()));
queryWrapper.in("sequence_code", fillingExamineList.stream().map(TmCylinderFillingExamine::getSequenceCode).collect(Collectors.toList()));
}
if (entity instanceof TmCylinderFillingRecord) {
List<TmCylinderFillingRecord> fillingRecordList = (List<TmCylinderFillingRecord>) entityList;
queryWrapper.in("app_id", fillingRecordList.stream().map(AbstractBaseEntity::getAppId).collect(Collectors.toList()));
queryWrapper.in("sequence_code", fillingRecordList.stream().map(TmCylinderFillingRecord::getSequenceCode).collect(Collectors.toList()));
}
if (entity instanceof TmCylinderFilling) {
List<TmCylinderFilling> fillingBeforeList = (List<TmCylinderFilling>) entityList;
queryWrapper.in("app_id", fillingBeforeList.stream().map(AbstractBaseEntity::getAppId).collect(Collectors.toList()));
queryWrapper.in("sequence_code", fillingBeforeList.stream().map(TmCylinderFilling::getSequenceCode).collect(Collectors.toList()));
}
if (entity instanceof TmCylinderFillingCheck) {
List<TmCylinderFillingCheck> fillingBeforeList = (List<TmCylinderFillingCheck>) entityList;
queryWrapper.in("app_id", fillingBeforeList.stream().map(AbstractBaseEntity::getAppId).collect(Collectors.toList()));
queryWrapper.in("sequence_code", fillingBeforeList.stream().map(TmCylinderFillingCheck::getSequenceCode).collect(Collectors.toList()));
}
}
}
......@@ -20,4 +20,10 @@ public abstract class AbstractBaseModel extends BaseModel{
* 对接公司编码
*/
protected String appId;
/**
* 对接接口版本
*/
protected String version = "v1";
}
......@@ -15,6 +15,6 @@ public class TmCylinderFillingExamineModel extends AbstractBaseModel{
private String fillingExamineId; //充装信息审核ID
private String fillingAuditDate; //报表生成时间
private String fillingAuditUrl; //充装审核报表附件地址
private String fillingAuditname; //充装审核报表附件名称
private String fillingAuditName; //充装审核报表附件名称
}
......@@ -19,6 +19,7 @@ public class TmCylinderInfoModel extends AbstractBaseModel{
private String fillingMedia;
private String manufacturingUnit;
private String manufacturingDate;
private String manufacturingUnitCreditCode;
private String productName;
private String factoryNum;
private Double volume;
......
......@@ -27,4 +27,20 @@ public class TmCylinderUnitModel extends AbstractBaseModel{
* 所属区域
*/
private String regionName;
/**
* 企业资质附件
*/
private String qualificationFile;
/**
* 使用登记证附件
*/
private String useRegisterFile;
/**
* 设备汇总表附件
*/
private String deviceSummaryFile;
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.api.openapi.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
......@@ -53,6 +54,6 @@ public class TmCylinderFilling extends AbstractBaseEntity{/**
@TableField("filling_before_id")
private String fillingBeforeId;
@ApiModelProperty(value = "对接接口版本")
protected String version = "v1";
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.api.openapi.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
......@@ -42,4 +43,7 @@ public class TmCylinderFillingCheck extends AbstractBaseEntity{/**
private String checkResults;
@TableField("nonconformances")
private String nonconformances;
@ApiModelProperty(value = "对接接口版本")
protected String version = "v1";
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.api.openapi.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
......@@ -26,5 +27,8 @@ public class TmCylinderFillingExamine extends AbstractBaseEntity{/**
@TableField("filling_audit_url")
private String fillingAuditUrl; //充装审核报表附件地址
@TableField("filling_audit_name")
private String fillingAuditname; //充装审核报表附件名称
private String fillingAuditName; //充装审核报表附件名称
@ApiModelProperty(value = "对接接口版本")
protected String version = "v1";
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.api.openapi.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
......@@ -43,4 +44,7 @@ public class TmCylinderFillingRecord extends AbstractBaseEntity{/**
private String fillingExamineId;
@TableField("discharge_volume")
private double dischargeVolume; // 卸液量(Kg) 小数点两位
@ApiModelProperty(value = "对接接口版本")
protected String version = "v1";
}
......@@ -82,5 +82,9 @@ public class TmCylinderInfo extends AbstractBaseEntity{
*/
private String fillingMediaName;
@ApiModelProperty(value = "对接接口版本")
protected String version = "v1";
@ApiModelProperty(value = "制造单位统一信用代码")
private String manufacturingUnitCreditCode;
}
......@@ -3,19 +3,22 @@ package com.yeejoin.amos.api.openapi.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.lang.reflect.Method;
/**
* 气瓶检验信息
* @author kinky
*
* @author kinky
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("tm_cylinder_inspection")
public class TmCylinderInspection extends AbstractBaseEntity{/**
*
*/
public class TmCylinderInspection extends AbstractBaseEntity {
private static final long serialVersionUID = 1L;
@TableField("scrap_quantity")
private String scrapQuantity; //不合格报废数量
......@@ -29,4 +32,8 @@ public class TmCylinderInspection extends AbstractBaseEntity{/**
private String nextInspectionDate; //下次检验日期*
@TableField("inspection_result")
private String inspectionResult; //检验结果*
@ApiModelProperty(value = "对接接口版本")
protected String version = "v1";
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.api.openapi.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
......@@ -27,4 +28,6 @@ public class TmCylinderTags extends AbstractBaseEntity{/**
@TableField("gas_cylinder_stamp")
private String gasCylinderStamp;//气瓶钢印标识
@ApiModelProperty(value = "对接接口版本")
protected String version = "v1";
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.api.openapi.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
......@@ -40,31 +41,47 @@ public class TmCylinderUnit extends AbstractBaseEntity{/**
private String securityAdmPhone;
@TableField("postal_code")
private String postalCode; //企业邮编
@TableField("unit_abbreviation")
private String unitAbbreviation; //企业简称
@TableField("filling_license")
private String fillingLicense; //充装许可证号
@TableField("filling_permit_date")
private String fillingPermitDate; //充装许可证有效期
@TableField("filling_perm_scope")
private String fillingPermScope; //充装许可范围
@TableField("inspection_license")
private String inspectionLicense; //检验许可证号
@TableField("inspection_scope")
private String inspectionScope; //检验范围
@TableField("effective_date")
private String effectiveDate; //检验许可证有效期
@TableField("manufacturing_license")
private String manufacturingLicense; //制造许可证号
@TableField("manufacturing_date")
private String manufacturingDate; //制造许可证有效期
@TableField("manufacturing_scope")
private String manufacturingScope; //制造许可范围
@TableField("manufacturing_unit_code")
private String manufacturingUnitCode; //制造单位代码
// @TableField("unit_abbreviation")
// private String unitAbbreviation; //企业简称
// @TableField("filling_license")
// private String fillingLicense; //充装许可证号
// @TableField("filling_permit_date")
// private String fillingPermitDate; //充装许可证有效期
// @TableField("filling_perm_scope")
// private String fillingPermScope; //充装许可范围
// @TableField("inspection_license")
// private String inspectionLicense; //检验许可证号
// @TableField("inspection_scope")
// private String inspectionScope; //检验范围
// @TableField("effective_date")
// private String effectiveDate; //检验许可证有效期
// @TableField("manufacturing_license")
// private String manufacturingLicense; //制造许可证号
// @TableField("manufacturing_date")
// private String manufacturingDate; //制造许可证有效期
// @TableField("manufacturing_scope")
// private String manufacturingScope; //制造许可范围
// @TableField("manufacturing_unit_code")
// private String manufacturingUnitCode; //制造单位代码
/**
* 所属区域
*/
private String regionName;
@ApiModelProperty(value = "企业资质附件")
@TableField("qualification_file")
private String qualificationFile;
@ApiModelProperty(value = "使用登记证附件")
@TableField("use_register_file")
private String useRegisterFile;
@ApiModelProperty(value = "设备汇总表附件")
@TableField("device_summary_file")
private String deviceSummaryFile;
@ApiModelProperty(value = "对接接口版本")
protected String version = "v1";
}
......@@ -26,20 +26,21 @@ public class CylinderFillingDataValidationService {
@Autowired
BaseEnterpriseInfoService enterpriseInfoService;
@Autowired
MidEquipRegistrationInfoMapper registrationInfoMapper;
/**
* 企业信息校验
*
* @param unitData
* @return
*/
public boolean validatEcylinderUnit(List<TmCylinderUnitModel> unitData) {
public void validateCylinderUnit(List<TmCylinderUnitModel> unitData) {
JSONArray jsonArray = JSONArray.fromObject(unitData);
// 1.必填校验
List<String> errorRows = validateRequired(CylinderUnitFieldEnum.getAllRequireKeys(), jsonArray);
if (!ObjectUtils.isEmpty(errorRows)) {
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
}
// 2.本次上传数据唯一性校验
errorRows = validateUnique(CylinderUnitFieldEnum.getAllUniqueKeys(), jsonArray);
......@@ -52,21 +53,20 @@ public class CylinderFillingDataValidationService {
// if (!ObjectUtils.isEmpty(errorRows)) {
// throw new BadRequest(JSONArray.fromObject(errorRows.stream().map(e -> "企业统一社会信用代码不存在:" + e).collect(Collectors.toList())).toString());
// }
return true;
}
/**
* 校验气瓶基本信息数据
*
* @param infoData
* @return
*/
public boolean validateCylinderInfo(List<TmCylinderInfoModel> infoData) {
public void validateCylinderInfo(List<TmCylinderInfoModel> infoData) {
JSONArray jsonArray = JSONArray.fromObject(infoData);
// 1.必填校验
List<String> errorRows = validateRequired(CylinderInfoFieldEnum.getAllRequireKeys(), jsonArray);
if (!ObjectUtils.isEmpty(errorRows)) {
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
}
// 2.本次上传数据唯一性校验
errorRows = validateUnique(CylinderInfoFieldEnum.getAllUniqueKeys(), jsonArray);
......@@ -85,20 +85,19 @@ public class CylinderFillingDataValidationService {
// if (!ObjectUtils.isEmpty(errorRows)) {
// throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "企业统一社会信用代码不存在:" + e).collect(Collectors.toList())).toString());
// }
return true;
}
/**
* 校验气瓶标签
*
* @param tagData
* @return
*/
public boolean validateCylinderTag(List<TmCylinderTagsModel> tagData) {
public void validateCylinderTag(List<TmCylinderTagsModel> tagData) {
JSONArray jsonArray = JSONArray.fromObject(tagData);
// 1.必填校验
List<String> errorRows = validateRequired(CylinderTagFieldEnum.getAllRequireKeys(), jsonArray);
if (!ObjectUtils.isEmpty(errorRows)) {
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
}
// 2.本次上传数据唯一性校验
......@@ -112,20 +111,19 @@ public class CylinderFillingDataValidationService {
// if (!ObjectUtils.isEmpty(errorRows)) {
// throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "气瓶唯一标识码不存在:" + e).collect(Collectors.toList())).toString());
// }
return true;
}
/**
* 气瓶检验信息
*
* @param inspectionData
* @return
*/
public boolean validateCylinderInspection(List<TmCylinderInspectionModel> inspectionData) {
public void validateCylinderInspection(List<TmCylinderInspectionModel> inspectionData) {
JSONArray jsonArray = JSONArray.fromObject(inspectionData);
// 1.必填校验
List<String> errorRows = validateRequired(CylinderInspectionFieldEnum.getAllRequireKeys(), jsonArray);
if (!ObjectUtils.isEmpty(errorRows)) {
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
}
// 2.本次上传数据唯一性校验
......@@ -139,21 +137,20 @@ public class CylinderFillingDataValidationService {
// if (!ObjectUtils.isEmpty(errorRows)) {
// throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "气瓶唯一标识码不存在:" + e).collect(Collectors.toList())).toString());
// }
return true;
}
/**
* 校验审核信息
*
* @param inspectionData
* @return
*/
public boolean validateCylinderFillingExamineModel(List<TmCylinderFillingExamineModel> inspectionData) {
public void validateCylinderFillingExamineModel(List<TmCylinderFillingExamineModel> inspectionData) {
JSONArray jsonArray = JSONArray.fromObject(inspectionData);
// 1.必填校验
List<String> errorRows = validateRequired(CylinderFillingAuditFieldEnum.getAllRequireKeys(), jsonArray);
if (!ObjectUtils.isEmpty(errorRows)) {
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "必填字段不能为空:" + e).collect(Collectors.toList())).toString());
}
// 2.本次上传数据唯一性校验
......@@ -167,7 +164,6 @@ public class CylinderFillingDataValidationService {
// if (!ObjectUtils.isEmpty(errorRows)) {
// throw new BadRequest(JSONArray.fromObject( errorRows.stream().map(e -> "气瓶唯一标识码不存在:" + e).collect(Collectors.toList())).toString());
// }
return true;
}
/**
......@@ -375,7 +371,7 @@ public class CylinderFillingDataValidationService {
public List<String> getNotExistEnterpriseInfoByCreditCode(Set<String> creditCodes) {
List<TzBaseEnterpriseInfoDto> enterpriseInfos = enterpriseInfoService.getEnterpriseInfoByCreditCode(creditCodes);
if (enterpriseInfos.size() < creditCodes.size()) {
List<String> userCodes = enterpriseInfos.stream().map(e -> e.getUseCode()).collect(Collectors.toList());
List<String> userCodes = enterpriseInfos.stream().map(TzBaseEnterpriseInfoDto::getUseCode).collect(Collectors.toList());
return creditCodes.stream().filter(c -> !userCodes.contains(c)).collect(Collectors.toList());
}
return null;
......
......@@ -9,7 +9,7 @@ import com.yeejoin.amos.api.openapi.face.orm.dao.ESCylinderInfoRepository;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto;
import com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderInfoDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderInfoDto;
import com.yeejoin.amos.boot.module.cylinder.api.enums.CylDictEnum;
import com.yeejoin.amos.boot.module.cylinder.flc.api.entity.*;
import com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.*;
import lombok.extern.slf4j.Slf4j;
......@@ -26,6 +26,7 @@ import org.typroject.tyboot.core.foundation.utils.Bean;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Slf4j
......@@ -77,6 +78,9 @@ public class SyncCylinderDataService {
@Autowired
EmqKeeper emqKeeper;
@Autowired
TmCylinderInfoService tmCylinderInfoService;
@Value("${cylinder.filling.insert.topic:cylinder/filling/insert/topic}")
private String insertTopic;
......@@ -87,6 +91,13 @@ public class SyncCylinderDataService {
public void syncCylinderInfo(final List<TmCylinderInfoModel> cylinderInfoDto) {
List<CylinderInfo> cylinderUnitList = Bean.toModels(cylinderInfoDto, CylinderInfo.class);
// 处理字典值
cylinderUnitList.forEach(cylinderInfo -> {
cylinderInfo.setCylinderStatus(Objects.requireNonNull(CylDictEnum.getEnum(cylinderInfo.getCylinderStatus(),
CylDictEnum.cylinder_Status_0.getKey())).getSeqNbr());
cylinderInfo.setCylinderVariety(Objects.requireNonNull(CylDictEnum.getEnum(cylinderInfo.getCylinderVariety(),
CylDictEnum.cylinder_Variety_1.getKey())).getSeqNbr());
});
cylinderInfoMapper.saveOrUpdateBatch(cylinderUnitList);
}
......@@ -98,11 +109,18 @@ public class SyncCylinderDataService {
public void syncCylinderFillingRecord(List<TmCylinderFillingRecordModel> cylinderFillingRecordDtos) {
List<CylinderFillingRecord> cylinderFillingRecordList = Bean.toModels(cylinderFillingRecordDtos, CylinderFillingRecord.class);
cylinderFillingRecordList.forEach(cylinderFillingRecord -> {
cylinderFillingRecord.setAbnormal(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFillingRecord.getAbnormal(), CylDictEnum.abnormal_0.getKey())).getSeqNbr());
});
cylCylinderFillingCheckMapper.batchInsertOrUpdate(cylinderFillingRecordList);
}
public void syncCylinderInspection(List<TmCylinderInspectionModel> cylinderInspectionDto) {
List<CylinderInspection> cylinderInspectionList = Bean.toModels(cylinderInspectionDto, CylinderInspection.class);
cylinderInspectionList.forEach(cylinderInspection -> {
cylinderInspection.setInspectionResult(Objects.requireNonNull(CylDictEnum.getEnum(Integer.valueOf(cylinderInspection.getInspectionResult()),
CylDictEnum.inspection_Result_0.getKey())).getSeqNbr().toString());
});
cylinderInspectionMapper.saveOrUpdateBatch(cylinderInspectionList);
}
......@@ -113,11 +131,38 @@ public class SyncCylinderDataService {
public void syncCylinderFillingBefore(List<TmCylinderFillingModel> cylinderFillingDtos) {
List<CylinderFilling> cylinderFillingList = Bean.toModels(cylinderFillingDtos, CylinderFilling.class);
cylinderFillingList.forEach(cylinderFilling -> {
cylinderFilling.setIsValid(String.valueOf(Objects.requireNonNull(CylDictEnum.getEnum(Integer.valueOf(cylinderFilling.getIsValid()), CylDictEnum.isValid_0.getKey()))));
cylinderFilling.setSame(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFilling.getSame(),
CylDictEnum.same_0.getKey())).getSeqNbr());
cylinderFilling.setIsRegulations(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFilling.getIsRegulations(),
CylDictEnum.isRegulations_0.getKey())).getSeqNbr());
cylinderFilling.setIsComplianceWithgbt(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFilling.getIsComplianceWithgbt(),
CylDictEnum.isComplianceWithGBT_0.getKey())).getSeqNbr());
cylinderFilling.setHaveStillPressure(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFilling.getHaveStillPressure(),
CylDictEnum.haveStillPressure_0.getKey())).getSeqNbr());
cylinderFilling.setIsComplete(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFilling.getIsComplete(),
CylDictEnum.isComplete_0.getKey())).getSeqNbr());
cylinderFilling.setHaveSecurityDocuments(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFilling.getHaveSecurityDocuments(),
CylDictEnum.SecurityDocuments_0.getKey())).getSeqNbr());
});
cylCylinderFillingCheckMapper.saveAndBatchInsert(cylinderFillingList);
}
public void syncCylinderFillingAfter(List<TmCylinderFillingCheckModel> cylinderFillingCheckDtos) {
List<CylinderFillingCheck> cylinderFillingChecList = Bean.toModels(cylinderFillingCheckDtos, CylinderFillingCheck.class);
cylinderFillingChecList.forEach(cylinderFillingCheck -> {
cylinderFillingCheck.setAbnormalTemperature(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFillingCheck.getAbnormalTemperature(),
CylDictEnum.abnormalTemperature_0.getKey())).getSeqNbr());
cylinderFillingCheck.setSealedState(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFillingCheck.getSealedState(),
CylDictEnum.sealedState_0.getKey())).getSeqNbr());
cylinderFillingCheck.setWarningSign(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFillingCheck.getWarningSign(),
CylDictEnum.warningSign_0.getKey())).getSeqNbr());
cylinderFillingCheck.setDefective(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFillingCheck.getDefective(),
CylDictEnum.defective_0.getKey())).getSeqNbr());
cylinderFillingCheck.setWithinScope(Objects.requireNonNull(CylDictEnum.getEnum(cylinderFillingCheck.getWithinScope(),
CylDictEnum.withinScope_0.getKey())).getSeqNbr());
});
cylinderFillingCheckMapper.saveOrUpdateByCondition(cylinderFillingChecList);
}
......@@ -130,6 +175,7 @@ public class SyncCylinderDataService {
cylinderFillingRecord.stream().map(item -> {
List<ESCylinderFillingRecordDto> collect = cylinderFillingRecordInfo.stream().filter(e -> item.getAppIdAndSequenceCode().equals(e.getAppIdAndSequenceCode())).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(collect)) {
item.setSequenceNbr(collect.get(0).getSequenceNbr());
item.setUnitName(collect.get(0).getUnitName());
item.setFactoryNum(collect.get(0).getFactoryNum());
item.setCylinderVariety(collect.get(0).getCylinderVariety());
......@@ -149,7 +195,7 @@ public class SyncCylinderDataService {
}
}
return item;
}).collect(Collectors.toList());
});
saveCylinderFillingRecord2ES(cylinderFillingRecord);
}
}
......@@ -181,32 +227,33 @@ public class SyncCylinderDataService {
}
}
public void createCylinderInfo2ES(TmCylinderInfoModel cylinderInfoModel) {
CylinderInfoDto cylinderInfoDto = Bean.toModel(cylinderInfoModel, new CylinderInfoDto());
List<ESCylinderInfoDto> esCylinderInfoDto = new ArrayList<>();
ESCylinderInfoDto esCylinderInfo = new ESCylinderInfoDto();
BeanUtils.copyProperties(cylinderInfoDto, esCylinderInfo);
esCylinderInfoDto.add(esCylinderInfo);
/**
* 同步气瓶信息至业务es
* @param cylinderInfoModel
*/
public void createCylinderInfo2ES(List<TmCylinderInfoModel> cylinderInfoModel) {
List<String> seqCodeList = Lists.newArrayList();
String appId = tmCylinderInfoService.getAppId();
List<ESCylinderInfoDto> esCylinderInfoDtoList = Bean.toModels(cylinderInfoModel, ESCylinderInfoDto.class);
esCylinderInfoDtoList.forEach(es -> {
try {
esCylinderInfo.setInspectionDateMs(ObjectUtils.isEmpty(esCylinderInfo.getInspectionDate()) ? 0L : DateUtils.dateParse(esCylinderInfo.getInspectionDate(), DateUtils.DATE_TIME_PATTERN).getTime());
es.setInspectionDateMs(ObjectUtils.isEmpty(es.getInspectionDate()) ? 0L : DateUtils.dateParse(es.getInspectionDate(), DateUtils.DATE_TIME_PATTERN).getTime());
seqCodeList.add(es.getSequenceCode());
} catch (ParseException e) {
throw new RuntimeException(e);
}
List<String> ids = Lists.newArrayList();
});
StopWatch stopWatch = new StopWatch();
stopWatch.start();
esCylinderInfoRepository.saveAll(esCylinderInfoDto);
ids.add(String.valueOf(cylinderInfoDto.getSequenceNbr()));
esCylinderInfoRepository.saveAll(esCylinderInfoDtoList);
stopWatch.stop();
if (log.isInfoEnabled()) {
log.info("存入es耗时:{} 秒", stopWatch.getTotalTimeSeconds());
}
StopWatch stopWatch1 = new StopWatch();
stopWatch1.start();
cylinderInfoMapper.updateEsCylinderInfoStatus(ids);
cylinderInfoMapper.updateCylinderInfoEsStatusBySeqCodes(appId, seqCodeList);
stopWatch1.stop();
if (log.isInfoEnabled()) {
log.info("更新业务数据耗时:{} 秒", stopWatch1.getTotalTimeSeconds());
......
package com.yeejoin.amos.api.openapi.face.service;
import java.util.Date;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingCheckDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingDto;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderFillingCheckModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderFillingCheckMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingCheck;
import com.yeejoin.amos.api.openapi.service.MyBaseServiceImpl;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderFillingCheckModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderFillingCheckMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingCheck;
import java.util.Date;
import java.util.List;
/**
......@@ -33,33 +27,38 @@ import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingCheck;
* @version $Id: ElevatorService.java, v 0.1 2021年9月30日 下午3:28:55 gwb Exp $
*/
@Component
public class TmCylinderFillingCheckService extends BaseService<TmCylinderFillingCheckModel, TmCylinderFillingCheck, TmCylinderFillingCheckMapper> {
@Autowired
private RedisTemplate redisTemplate;
public class TmCylinderFillingCheckService extends MyBaseServiceImpl<TmCylinderFillingCheckModel, TmCylinderFillingCheck, TmCylinderFillingCheckMapper> {
@Autowired
private SyncCylinderDataService syncCylinderDataService;
@DSTransactional
public String createCylinderFillingAfter(List<TmCylinderFillingCheckModel> model) {
// TODO Auto-generated method stub
// if (ValidationUtil.isEmpty(model))
// throw new BadRequest("气瓶标签信息为空.");
syncCylinderFillingAfter(model);
@Transactional
public void createCylinderFillingAfter(List<TmCylinderFillingCheckModel> model) {
String appId = getAppId();
Date now = new Date();
for (TmCylinderFillingCheckModel cylinderFillingCheckModel : model) {
cylinderFillingCheckModel.setRecDate(new Date());
cylinderFillingCheckModel.setAppId(getAppId());
this.createWithModel(cylinderFillingCheckModel);
cylinderFillingCheckModel.setSequenceNbr(null);
cylinderFillingCheckModel.setRecDate(now);
cylinderFillingCheckModel.setAppId(appId);
}
return "OK";
// 同步至气瓶业务库
syncCylinderFillingAfter(model);
List<TmCylinderFillingCheck> tmCylinderFillingCheckList = Bean.toModels(model, TmCylinderFillingCheck.class);
saveOrUpdateBatchByUniqueFields(
tmCylinderFillingCheckList,
tmCylinderFillingCheck -> new LambdaQueryWrapper<TmCylinderFillingCheck>()
.eq(TmCylinderFillingCheck::getAppId, tmCylinderFillingCheck.getAppId())
.eq(TmCylinderFillingCheck::getSequenceCode, tmCylinderFillingCheck.getSequenceCode())
.eq(TmCylinderFillingCheck::getFillingCheckId, tmCylinderFillingCheck.getFillingCheckId()),
entity -> new MultiFieldKey(entity.getFillingCheckId()),
"appId",
"sequenceCode",
"fillingCheckId");
}
private void syncCylinderFillingAfter(List<TmCylinderFillingCheckModel> model) {
syncCylinderDataService.syncCylinderFillingAfter(model);
}
private String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX,RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
}
}
package com.yeejoin.amos.api.openapi.face.service;
import java.util.Date;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderUnitModel;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingExamineDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderUnitDto;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderFillingExamineModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderFillingExamineMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingExamine;
import com.yeejoin.amos.api.openapi.service.MyBaseServiceImpl;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderFillingExamineModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderFillingExamineMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingExamine;
import java.util.Date;
import java.util.List;
/**
......@@ -36,31 +29,36 @@ import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingExamine;
* @version $Id: ElevatorService.java, v 0.1 2021年9月30日 下午3:28:55 gwb Exp $
*/
@Component
public class TmCylinderFillingExamineService extends BaseService<TmCylinderFillingExamineModel, TmCylinderFillingExamine, TmCylinderFillingExamineMapper> {
@Autowired
private RedisTemplate redisTemplate;
public class TmCylinderFillingExamineService extends MyBaseServiceImpl<TmCylinderFillingExamineModel, TmCylinderFillingExamine, TmCylinderFillingExamineMapper> {
@Autowired
private SyncCylinderDataService syncCylinderDataService;
@DSTransactional
@Transactional(rollbackFor = Exception.class)
public String createCylinderFillingExamine(List<TmCylinderFillingExamineModel> model) {
// TODO Auto-generated method stub
if (ValidationUtil.isEmpty(model))
throw new BadRequest("液化气体气瓶充装信息审核为空.");
syncCylinderFillingExamine(model);
for (TmCylinderFillingExamineModel cylinderFillingExamineModel : model) {
cylinderFillingExamineModel.setRecDate(new Date());
cylinderFillingExamineModel.setAppId(getAppId());
this.createWithModel(cylinderFillingExamineModel);
}
return "OK";
}
// 同步至气瓶业务库
syncCylinderFillingExamine(model);
private String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX,RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
List<TmCylinderFillingExamine> tmCylinderFillingExamineList = Bean.toModels(model, TmCylinderFillingExamine.class);
this.saveOrUpdateBatchByUniqueFields(
tmCylinderFillingExamineList,
tmCylinderFillingExamine -> new LambdaQueryWrapper<TmCylinderFillingExamine>()
.eq(TmCylinderFillingExamine::getAppId, getAppId())
.eq(TmCylinderFillingExamine::getSequenceCode, tmCylinderFillingExamine.getSequenceCode())
.eq(TmCylinderFillingExamine::getFillingExamineId, tmCylinderFillingExamine.getFillingExamineId()),
entity -> new MultiFieldKey(entity.getAppId(), entity.getSequenceCode(), entity.getFillingExamineId()),
"appId",
"sequenceCode",
"fillingExamineId");
return "OK";
}
private void syncCylinderFillingExamine(List<TmCylinderFillingExamineModel> model ) {
......
package com.yeejoin.amos.api.openapi.face.service;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderFillingRecordModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.ESCylinderFillingRecordRepository;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderFillingRecordMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingRecord;
import com.yeejoin.amos.api.openapi.service.MyBaseServiceImpl;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderUnitDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderFillingRecord;
import com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderFillingRecordMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderFillingRecordModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderFillingRecordMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingRecord;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
......@@ -44,7 +33,7 @@ import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFillingRecord;
* @version $Id: ElevatorService.java, v 0.1 2021年9月30日 下午3:28:55 gwb Exp $
*/
@Component
public class TmCylinderFillingRecordService extends BaseService<TmCylinderFillingRecordModel, TmCylinderFillingRecord, TmCylinderFillingRecordMapper> {
public class TmCylinderFillingRecordService extends MyBaseServiceImpl<TmCylinderFillingRecordModel, TmCylinderFillingRecord, TmCylinderFillingRecordMapper> {
@Autowired
private RedisTemplate redisTemplate;
......@@ -53,22 +42,35 @@ public class TmCylinderFillingRecordService extends BaseService<TmCylinderFillin
@Autowired
ESCylinderFillingRecordRepository esCylinderFillingRecordRepository;
@Autowired
private SyncCylinderDataService syncCylinderDataService;
@DSTransactional
public String createCylinderFilling(List<TmCylinderFillingRecordModel> model) {
// TODO Auto-generated method stub
// if (ValidationUtil.isEmpty(model))
// throw new BadRequest("气瓶标签信息为空.");
syncCylinderFilling(model);
@Transactional(rollbackFor = Exception.class)
public void createCylinderFilling(List<TmCylinderFillingRecordModel> model) {
Date now = new Date();
String appId = getAppId();
for (TmCylinderFillingRecordModel cylinderFillingRecordModel : model) {
cylinderFillingRecordModel.setRecDate(new Date());
cylinderFillingRecordModel.setAppId(getAppId());
this.createWithModel(cylinderFillingRecordModel);
cylinderFillingRecordModel.setSequenceNbr(null);
cylinderFillingRecordModel.setRecDate(now);
cylinderFillingRecordModel.setAppId(appId);
}
return "OK";
// 同步至气瓶业务库
syncCylinderFilling(model);
List<TmCylinderFillingRecord> tmCylinderFillingRecordList = Bean.toModels(model, TmCylinderFillingRecord.class);
this.saveOrUpdateBatchByUniqueFields(
tmCylinderFillingRecordList,
tmCylinderFillingRecord -> new LambdaQueryWrapper<TmCylinderFillingRecord>()
.eq(TmCylinderFillingRecord::getAppId, tmCylinderFillingRecord.getAppId())
.eq(TmCylinderFillingRecord::getSequenceCode, tmCylinderFillingRecord.getSequenceCode())
.eq(TmCylinderFillingRecord::getFillingRecordId, tmCylinderFillingRecord.getFillingRecordId()),
entity -> new MultiFieldKey(entity.getAppId(), entity.getSequenceCode(), entity.getFillingRecordId()),
"appId",
"sequenceCode",
"fillingRecordId"
);
}
@DS("tzs")
......@@ -79,12 +81,6 @@ public class TmCylinderFillingRecordService extends BaseService<TmCylinderFillin
syncCylinderDataService.createCylinderFillingRecord(models);
}
private String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX,RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
}
public List<String> getDateList() {
return baseMapper.getDateList();
}
......
package com.yeejoin.amos.api.openapi.face.service;
import java.util.Date;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderUnitModel;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderInfoDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderUnitDto;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderFillingModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderFillingMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFilling;
import com.yeejoin.amos.api.openapi.service.MyBaseServiceImpl;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderFillingModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderFillingMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFilling;
import java.util.Date;
import java.util.List;
/**
......@@ -35,36 +27,36 @@ import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderFilling;
* @version $Id: ElevatorService.java, v 0.1 2021年9月30日 下午3:28:55 gwb Exp $
*/
@Component
public class TmCylinderFillingService extends BaseService<TmCylinderFillingModel, TmCylinderFilling, TmCylinderFillingMapper> {
@Autowired
private RedisTemplate redisTemplate;
public class TmCylinderFillingService extends MyBaseServiceImpl<TmCylinderFillingModel, TmCylinderFilling, TmCylinderFillingMapper> {
@Autowired
private SyncCylinderDataService syncCylinderDataService;
@DSTransactional
public String createCylinderFillingBefore(List<TmCylinderFillingModel> model) {
// TODO Auto-generated method stub
// if (ValidationUtil.isEmpty(model))
// throw new BadRequest("气瓶标签信息为空.");
syncCylinderFillingBefore(model);
@Transactional(rollbackFor = {java.lang.Exception.class})
public void createCylinderFillingBefore(List<TmCylinderFillingModel> model) {
Date now = new Date();
String appId = getAppId();
for (TmCylinderFillingModel cylinderFillingModel : model) {
cylinderFillingModel.setRecDate(new Date());
cylinderFillingModel.setAppId(getAppId());
this.createWithModel(cylinderFillingModel);
cylinderFillingModel.setSequenceNbr(null);
cylinderFillingModel.setRecDate(now);
cylinderFillingModel.setAppId(appId);
}
return "OK";
List<TmCylinderFilling> tmCylinderFillingList = Bean.toModels(model, TmCylinderFilling.class);
// 同步至气瓶业务库
syncCylinderFillingBefore(model);
this.saveOrUpdateBatchByUniqueFields(
tmCylinderFillingList,
tmCylinderFilling -> new LambdaQueryWrapper<TmCylinderFilling>()
.eq(TmCylinderFilling::getAppId, tmCylinderFilling.getAppId())
.eq(TmCylinderFilling::getSequenceCode, tmCylinderFilling.getSequenceCode())
.eq(TmCylinderFilling::getFillingBeforeId, tmCylinderFilling.getFillingBeforeId()),
entity -> new MultiFieldKey(entity.getAppId(), entity.getSequenceCode(), entity.getFillingBeforeId()),
"appId", "sequenceCode", "fillingBeforeId");
}
private void syncCylinderFillingBefore(List<TmCylinderFillingModel> model) {
syncCylinderDataService.syncCylinderFillingBefore(model);
}
private String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX,RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
}
}
package com.yeejoin.amos.api.openapi.face.service;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.google.common.collect.Lists;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderUnitModel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderInfoModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.ESCylinderInfoRepository;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderInfoDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderInfoDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderUnitDto;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderInfoMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderInfo;
import com.yeejoin.amos.api.openapi.service.MyBaseServiceImpl;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderInfoMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StopWatch;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderInfoModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderInfoMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderInfo;
import java.util.Date;
import java.util.List;
/**
*
* <pre>
*气瓶基本信息 服务类
* 气瓶基本信息 服务类
* </pre>
*
* @author gwb
......@@ -48,7 +33,7 @@ import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderInfo;
*/
@Component
@Slf4j
public class TmCylinderInfoService extends BaseService<TmCylinderInfoModel, TmCylinderInfo, TmCylinderInfoMapper> {
public class TmCylinderInfoService extends MyBaseServiceImpl<TmCylinderInfoModel, TmCylinderInfo, TmCylinderInfoMapper> {
@Autowired
private RedisTemplate redisTemplate;
......@@ -60,31 +45,38 @@ public class TmCylinderInfoService extends BaseService<TmCylinderInfoModel, TmCy
ESCylinderInfoRepository esCylinderInfoRepository;
@DSTransactional
@Transactional(rollbackFor = {java.lang.Exception.class})
public String createCylinderInfo(List<TmCylinderInfoModel> model) {
// TODO Auto-generated method stub
if (ValidationUtil.isEmpty(model))
throw new BadRequest("气瓶基本信息数据为空.");
syncCylinderInfo(model);
String appId = getAppId();
Date now = new Date();
for (TmCylinderInfoModel cylinderInfoModel : model) {
cylinderInfoModel.setRecDate(new Date());
cylinderInfoModel.setAppId(getAppId());
syncCylinderDataService.createCylinderInfo2ES(cylinderInfoModel);
this.createWithModel(cylinderInfoModel);
cylinderInfoModel.setSequenceNbr(null);
cylinderInfoModel.setRecDate(now);
cylinderInfoModel.setAppId(appId);
}
// 同步至企业业务库
syncCylinderInfo(model);
// 保存至气瓶对接服务库
List<TmCylinderInfo> tmCylinderInfoList = Bean.toModels(model, TmCylinderInfo.class);
this.saveOrUpdateBatchByUniqueFields(
tmCylinderInfoList,
tmCylinderInfo -> new LambdaQueryWrapper<TmCylinderInfo>()
.eq(TmCylinderInfo::getSequenceCode, tmCylinderInfo.getSequenceCode())
.eq(TmCylinderInfo::getAppId, tmCylinderInfo.getAppId()),
entity -> new MultiFieldKey(entity.getAppId(), entity.getSequenceCode()),
"appId", "sequenceCode");
syncCylinderDataService.createCylinderInfo2ES(model);
return "OK";
}
private void syncCylinderInfo(List<TmCylinderInfoModel> model ) {
/**
* 同步气瓶信息至气瓶服务
*
* @param model
*/
private void syncCylinderInfo(List<TmCylinderInfoModel> model) {
syncCylinderDataService.syncCylinderInfo(model);
}
private String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX,RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
}
}
package com.yeejoin.amos.api.openapi.face.service;
import java.util.Date;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderInspectionDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderUnitDto;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderInspectionModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderInspectionMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderInspection;
import com.yeejoin.amos.api.openapi.service.MyBaseServiceImpl;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderInspectionModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderInspectionMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderInspection;
import java.util.Date;
import java.util.List;
/**
*
* <pre>
* 气瓶检验信息 服务类
* </pre>
......@@ -35,32 +27,43 @@ import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderInspection;
* @version $Id: ElevatorService.java, v 0.1 2021年9月30日 下午3:28:55 gwb Exp $
*/
@Component
public class TmCylinderInspectionService extends BaseService<TmCylinderInspectionModel, TmCylinderInspection, TmCylinderInspectionMapper> {
@Autowired
private RedisTemplate redisTemplate;
public class TmCylinderInspectionService extends MyBaseServiceImpl<TmCylinderInspectionModel, TmCylinderInspection, TmCylinderInspectionMapper> {
@Autowired
private SyncCylinderDataService syncCylinderDataService;
@DSTransactional
@Transactional(rollbackFor = {java.lang.Exception.class})
public String createCylinderInspection(List<TmCylinderInspectionModel> model) {
if (ValidationUtil.isEmpty(model))
throw new BadRequest("气瓶检验信息为空.");
syncCylinderInspectionModel(model);
if (ValidationUtil.isEmpty(model)) throw new BadRequest("气瓶检验信息为空.");
String appId = getAppId();
Date now = new Date();
for (TmCylinderInspectionModel cylinderInspectionModel : model) {
cylinderInspectionModel.setRecDate(new Date());
cylinderInspectionModel.setAppId(getAppId());
this.createWithModel(cylinderInspectionModel);
cylinderInspectionModel.setSequenceNbr(null);
cylinderInspectionModel.setRecDate(now);
cylinderInspectionModel.setAppId(appId);
}
List<TmCylinderInspection> tmCylinderInspectionList = Bean.toModels(model, TmCylinderInspection.class);
syncCylinderInspectionModel(model);
this.saveOrUpdateBatchByUniqueFields(
tmCylinderInspectionList,
entity -> new LambdaQueryWrapper<TmCylinderInspection>()
.eq(TmCylinderInspection::getAppId, entity.getAppId())
.eq(TmCylinderInspection::getSequenceCode, entity.getSequenceCode())
.eq(TmCylinderInspection::getInspectionDate, entity.getInspectionDate()),
entity -> new MultiFieldKey(entity.getAppId(), entity.getSequenceCode(), entity.getInspectionDate()),
"appId", "sequenceCode", "inspectionDate");
return "OK";
}
/**
* 同步气瓶检验信息至气瓶服务
*
* @param model
*/
private void syncCylinderInspectionModel(List<TmCylinderInspectionModel> model) {
syncCylinderDataService.syncCylinderInspection(model);
}
private String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX,RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
}
}
package com.yeejoin.amos.api.openapi.face.service;
import java.util.Date;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderInspectionDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderTagsDto;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderTagsModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderTagsMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderTags;
import com.yeejoin.amos.api.openapi.service.MyBaseServiceImpl;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderTagsModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderTagsMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderTags;
import java.util.Date;
import java.util.List;
/**
......@@ -32,36 +26,45 @@ import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderTags;
* </pre>
*
* @author gwb
* @version $Id: ElevatorService.java, v 0.1 2021年9月30日 下午3:28:55 gwb Exp $
* @version $Id: TmCylinderTagsService.java, v 0.1 2021年9月30日 下午3:28:55 gwb Exp $
*/
@Component
public class TmCylinderTagsService extends BaseService<TmCylinderTagsModel, TmCylinderTags, TmCylinderTagsMapper> {
@Autowired
private RedisTemplate redisTemplate;
public class TmCylinderTagsService extends MyBaseServiceImpl<TmCylinderTagsModel, TmCylinderTags, TmCylinderTagsMapper> {
@Autowired
private SyncCylinderDataService syncCylinderDataService;
@Transactional(rollbackFor = {java.lang.Exception.class})
@DSTransactional
public String createCylinderTag(List<TmCylinderTagsModel> model) {
// TODO Auto-generated method stub
if (ValidationUtil.isEmpty(model))
throw new BadRequest("气瓶标签信息为空.");
syncCylinderTag(model);
String appId = getAppId();
Date now = new Date();
for (TmCylinderTagsModel cylinderTagsModel : model) {
cylinderTagsModel.setRecDate(new Date());
cylinderTagsModel.setAppId(getAppId());
this.createWithModel(cylinderTagsModel);
cylinderTagsModel.setSequenceNbr(null);
cylinderTagsModel.setRecDate(now);
cylinderTagsModel.setAppId(appId);
}
// 同步至气瓶业务库
syncCylinderTag(model);
List<TmCylinderTags> tmCylinderTagsList = Bean.toModels(model, TmCylinderTags.class);
this.saveOrUpdateBatchByUniqueFields(
tmCylinderTagsList,
tmCylinderTags -> new LambdaQueryWrapper<TmCylinderTags>()
.eq(TmCylinderTags::getAppId, tmCylinderTags.getAppId())
.eq(TmCylinderTags::getSequenceCode, tmCylinderTags.getSequenceCode()),
entity -> new MultiFieldKey(entity.getAppId(), entity.getSequenceCode()),
"appId", "sequenceCode"
);
return "OK";
}
/**
* 同步气瓶标签信息至气瓶服务
* @param model
*/
private void syncCylinderTag(List<TmCylinderTagsModel> model) {
syncCylinderDataService.syncCylinderTag(model);
}
private String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX,RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
}
}
package com.yeejoin.amos.api.openapi.face.service;
import java.util.Date;
import java.util.List;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderUnitModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderUnitMapper;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderUnit;
import com.yeejoin.amos.api.openapi.listener.event.FileToBeDeleteEvent;
import com.yeejoin.amos.api.openapi.publisher.EventPublisher;
import com.yeejoin.amos.api.openapi.service.MyBaseServiceImpl;
import com.yeejoin.amos.api.openapi.util.FileDeleteUtil;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.face.model.TmCylinderUnitModel;
import com.yeejoin.amos.api.openapi.face.orm.dao.TmCylinderUnitMapper;
//import com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderUnit;
import com.yeejoin.amos.api.openapi.face.orm.entity.TmCylinderUnit;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderUnitDto;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* <pre>
* 气瓶企业信息 服务类
* </pre>
......@@ -35,31 +36,77 @@ import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderUnitDto;
* @version $Id: ElevatorService.java, v 0.1 2021年9月30日 下午3:28:55 gwb Exp $
*/
@Component
public class TmCylinderUnitService extends BaseService<TmCylinderUnitModel, TmCylinderUnit, TmCylinderUnitMapper> {
@Slf4j
public class TmCylinderUnitService extends MyBaseServiceImpl<TmCylinderUnitModel, TmCylinderUnit, TmCylinderUnitMapper> {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private SyncCylinderDataService syncCylinderDataService;
@Autowired
private EventPublisher eventPublisher;
@DSTransactional
@Transactional(rollbackFor = {java.lang.Exception.class})
public String createCylinderUnit(List<TmCylinderUnitModel> model) {
if (ValidationUtil.isEmpty(model))
throw new BadRequest("气瓶企业信息数据为空.");
syncCylinderUnitModel(model);
String appId = getAppId();
Date now = new Date();
for (TmCylinderUnitModel cylinderUnitModel : model) {
cylinderUnitModel.setRecDate(new Date());
cylinderUnitModel.setAppId(getAppId());
this.createWithModel(cylinderUnitModel);
cylinderUnitModel.setSequenceNbr(null);
cylinderUnitModel.setRecDate(now);
cylinderUnitModel.setAppId(appId);
}
// 同步到业务库
syncCylinderUnitModel(model);
List<TmCylinderUnit> tmCylinderUnitList = Bean.toModels(model, TmCylinderUnit.class);
this.saveOrUpdateBatchByUniqueFields(
tmCylinderUnitList,
tmCylinderUnit -> new LambdaQueryWrapper<TmCylinderUnit>()
.eq(TmCylinderUnit::getAppId, tmCylinderUnit.getAppId()),
entity -> new MultiFieldKey(entity.getAppId()),
"appId");
// 从数据库查询tmCylinderUnitList对应企业信息
LambdaQueryWrapper<TmCylinderUnit> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(TmCylinderUnit::getAppId, tmCylinderUnitList.stream().map(TmCylinderUnit::getAppId).collect(Collectors.toList()));
List<TmCylinderUnit> oldList = this.baseMapper.selectList(queryWrapper);
deleteOldFile(oldList);
return "OK";
}
private void syncCylinderUnitModel(List<TmCylinderUnitModel> model ) {
syncCylinderDataService.syncCylinderUnit(model);
/**
* 删除旧的附件
* @param oldList 旧附件列表
*/
private void deleteOldFile(List<TmCylinderUnit> oldList) {
if (!ValidationUtil.isEmpty(oldList)) {
List<String> fileUrlList = Lists.newArrayList();
oldList.forEach(old -> {
if (old.getQualificationFile() != null) {
fileUrlList.addAll(Arrays.asList(ValidationUtil.isEmpty(old.getQualificationFile()) ? new String[0] : old.getQualificationFile().split(",")));
}
if (old.getDeviceSummaryFile() != null) {
fileUrlList.addAll(Arrays.asList(ValidationUtil.isEmpty(old.getDeviceSummaryFile()) ? new String[0] : old.getDeviceSummaryFile().split(",")));
}
if (old.getUseRegisterFile() != null) {
fileUrlList.addAll(Arrays.asList(ValidationUtil.isEmpty(old.getUseRegisterFile()) ? new String[0] : old.getUseRegisterFile().split(",")));
}
});
eventPublisher.publish(new FileToBeDeleteEvent(this, FileDeleteUtil.extractFileNames(fileUrlList)));
}
private String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX,RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
}
/**
* 同步气站信息至气瓶服务
* @param model
*/
private void syncCylinderUnitModel(List<TmCylinderUnitModel> model) {
syncCylinderDataService.syncCylinderUnit(model);
}
}
package com.yeejoin.amos.api.openapi.listener;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.OpenapiApplication;
import com.yeejoin.amos.api.openapi.listener.event.FileToBeDeleteEvent;
import com.yeejoin.amos.api.openapi.service.StartPlatformTokenService;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
/**
* @author Administrator
*/
@Component
@Slf4j
public class FileToBeDeleteEventListener implements ApplicationListener<FileToBeDeleteEvent> {
private static final Logger logger = LogManager.getLogger(FileToBeDeleteEventListener.class);
@Value("${file.delete.thread.number:3}")
private int threadNumber;
private final BlockingQueue<List<String>> blockingQueue = new LinkedBlockingQueue<>();
private ExecutorService executorService;
@Autowired
StartPlatformTokenService startPlatformTokenService;
@Override
public void onApplicationEvent(FileToBeDeleteEvent event) {
log.info("收到资源文件删除消息:{}", JSONObject.toJSONString(event.getFileUrlList()));
blockingQueue.add(event.getFileUrlList());
}
@PostConstruct
public void init() {
executorService = Executors.newFixedThreadPool(threadNumber);
for (int i = 0; i < threadNumber; i++) {
executorService.execute(() -> {
while (true) {
try {
startPlatformTokenService.getToken();
List<String> fileList = blockingQueue.take();
logger.info("删除文件开始:{}", JSONObject.toJSONString(fileList));
Systemctl.fileStorageClient.deleteFile(fileList.toArray(new String[0]));
log.info("删除文件完成");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
});
}
}
@PreDestroy
public void shutdown() {
if (executorService != null) {
log.info("开始关闭executorService:{}", executorService);
executorService.shutdown();
}
}
}
package com.yeejoin.amos.api.openapi.listener.event;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
import java.util.List;
/**
* @author Administrator
*/
@Getter
public class FileToBeDeleteEvent extends ApplicationEvent {
private final List<String> fileUrlList;
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public FileToBeDeleteEvent(Object source, List<String> fileUrlList) {
super(source);
this.fileUrlList = fileUrlList;
}
}
package com.yeejoin.amos.api.openapi.publisher;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
* @author Administrator
*/
@Component
public class EventPublisher {
private final ApplicationEventPublisher publisher;
public EventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
@Async
public void publish(ApplicationEvent event) {
publisher.publishEvent(event);
}
}
\ No newline at end of file
package com.yeejoin.amos.api.openapi.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
import com.google.common.collect.Maps;
import com.yeejoin.amos.api.openapi.constant.Constant;
import com.yeejoin.amos.api.openapi.face.builder.UniqueFieldsQueryBuilder;
import com.yeejoin.amos.api.openapi.face.model.BizTokenModel;
import com.yeejoin.amos.api.openapi.util.MultiFieldKey;
import org.apache.ibatis.session.SqlSession;
import org.hibernate.service.spi.ServiceException;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import static org.springframework.jdbc.object.BatchSqlUpdate.DEFAULT_BATCH_SIZE;
public class MyBaseServiceImpl<V, T, M extends BaseMapper<T>> extends BaseService<V, T, M> {
@Autowired
private RedisTemplate redisTemplate;
/**
* 根据指定唯一键批量保存或更新
* @param entityList 需要保存或更新实体列表
* @param lambdaQueryFunction 唯一值更新时函数
* @param uniqueFieldFunction 取唯一值的函数
* @param fieldNames 需要作为唯一值的字段
* @return 执行成功返回true
*/
@Transactional(rollbackFor = Exception.class)
public boolean saveOrUpdateBatchByUniqueFields(
List<T> entityList,
Function<T, LambdaQueryWrapper<T>> lambdaQueryFunction,
Function<T, MultiFieldKey> uniqueFieldFunction,
String... fieldNames) {
Assert.notEmpty(entityList, "error: entityList must not be empty");
Assert.notEmpty(fieldNames, "error: fieldNames must not be empty");
Class<?> cls = currentModelClass();
TableInfo tableInfo = TableInfoHelper.getTableInfo(cls);
Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
try (SqlSession batchSqlSession = sqlSessionBatch()) {
// 构建一个Map,用于存储已存在的实体,键为MultiFieldKey,值为实体本身
Map<MultiFieldKey, T> existingEntityMap = new HashMap<>();
// List<String> fieldNameList = Arrays.asList(fieldNames);
// Map<String, Integer> fieldNameIndexMap = IntStream.range(0, fieldNames.length)
// .boxed()
// .collect(Collectors.toMap(fieldNameList::get, Function.identity()));
// 构建查询条件,根据fieldNames动态生成
// for (String fieldName : fieldNames) {
// int index = fieldNameIndexMap.get(fieldName);
// queryWrapper.in(fieldName, entityList.stream()
// .map(entity -> uniqueFieldFunction.apply(entity).getField(index))
// .collect(Collectors.toList()));
// }
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
// 构建查询条件-根据传入entityList取出所有唯一字段作为查询条件
new UniqueFieldsQueryBuilder().buildQueryWrapper(queryWrapper, entityList);
// 预先查询所有可能存在的实体
List<T> existingEntities = baseMapper.selectList(queryWrapper);
for (T existingEntity : existingEntities) {
MultiFieldKey key = createKeyFromEntity(existingEntity, fieldNames);
existingEntityMap.put(key, existingEntity);
}
int i = 0;
for (T entity : entityList) {
MultiFieldKey uniqueKey = uniqueFieldFunction.apply(entity);
T target = existingEntityMap.get(uniqueKey);
if (Objects.isNull(target)) {
batchSqlSession.insert(sqlStatement(SqlMethod.INSERT_ONE), entity);
} else {
Map<String, Object> param = Maps.newHashMap();
param.put(Constants.WRAPPER, lambdaQueryFunction.apply(entity));
param.put(Constants.ENTITY, entity);
// 更新操作
batchSqlSession.update(sqlStatement(SqlMethod.UPDATE), param);
}
if (++i % DEFAULT_BATCH_SIZE == 0) {
batchSqlSession.flushStatements();
}
}
batchSqlSession.flushStatements();
} catch (Exception e) {
log.error("Error during batch save or update", e);
throw new ServiceException("Error during batch save or update", e);
}
return true;
}
// 辅助方法,从实体中根据字段名创建MultiFieldKey
@Contract("_, _ -> new")
private @NotNull MultiFieldKey createKeyFromEntity(T entity, String[] fieldNames) {
Object[] values = new Object[fieldNames.length];
for (int i = 0; i < fieldNames.length; i++) {
values[i] = ReflectionKit.getMethodValue(entity.getClass(), entity, fieldNames[i]);
}
return new MultiFieldKey(values);
}
public String getAppId() {
String tokenKey = Redis.genKey(Constant.TOKEN_PREFIX, RequestContext.getToken());
BizTokenModel bizTokenModel = (BizTokenModel) redisTemplate.opsForValue().get(tokenKey);
return bizTokenModel.getAppId();
}
}
package com.yeejoin.amos.api.openapi.service;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.context.RequestContext;
@Service
public class StartPlatformTokenService {
@Autowired
AmosRequestContext amosRequestContext;
public void getToken() {
RequestContext.setProduct(amosRequestContext.getProduct());
RequestContext.setAppKey(amosRequestContext.getAppKey());
RequestContext.setToken(amosRequestContext.getToken());
}
}
package com.yeejoin.amos.api.openapi.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.Lists;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class FileDeleteUtil {
public static List<String> extractFileNames(List<String> fileUrls) {
if (fileUrls == null || fileUrls.isEmpty()) {
return Lists.newArrayList();
}
List<String> allFileNames = new ArrayList<>();
for (String url : fileUrls) {
if (url != null) {
List<String> fileNames = extractFileNamesFromJsonStr(url);
allFileNames.addAll(fileNames);
}
}
return allFileNames;
}
// 解析JSON字符串,添加文件名到集合中
public static List<String> extractFileNamesFromJsonStr(String jsonStr) {
List<String> fileUrls = Lists.newArrayList();
if (!ValidationUtil.isEmpty(jsonStr)) {
try {
Object json = JSONObject.parse(jsonStr);
if (json instanceof JSONArray) {
JSONArray jsonArray = JSONObject.parseArray(jsonStr);
if (jsonArray != null) {
jsonArray.forEach(fileInfo -> {
if (fileInfo instanceof JSONObject) {
try {
String fileName = ((JSONObject) fileInfo).get("fileUrl").toString();
fileUrls.add(fileName);
} catch (Exception e) {
log.info("Error parsing file URL: {}", fileInfo);
}
}
});
}
} else if (json instanceof JSONObject) {
try {
String fileName = ((JSONObject) json).getString("fileUrl");
if (fileName != null) fileUrls.add(fileName);
} catch (Exception e) {
log.info("Error parsing file URL: {}", json);
}
}
return fileUrls;
} catch (Exception e) {
log.info("Error parsing JSON: {}", jsonStr);
System.err.println("Error parsing JSON: " + e.getMessage());
}
}
return fileUrls;
}
}
package com.yeejoin.amos.api.openapi.util;
import java.util.Arrays;
public class MultiFieldKey {
private final Object[] fields;
public MultiFieldKey(Object... fields) {
this.fields = fields.clone();
}
public Object getField(int index) {
return fields[index];
}
// 可能需要重写equals和hashCode方法来确保正确的比较行为
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MultiFieldKey that = (MultiFieldKey) o;
return Arrays.equals(fields, that.fields);
}
@Override
public int hashCode() {
return Arrays.hashCode(fields);
}
}
package com.yeejoin.amos.boot.module.cylinder.api.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
......@@ -21,7 +22,7 @@ public class ESCylinderInfoDto {
private String unitName;
//出厂编号
@Field(type = FieldType.Text)
@Field(type = FieldType.Keyword)
private String factoryNum;
//气瓶品种code
......@@ -68,6 +69,10 @@ public class ESCylinderInfoDto {
@Field(type = FieldType.Text)
private String manufacturingUnit;
//制造单位统一信用代码
@Field(type = FieldType.Keyword)
private String manufacturingUnitCreditCode;
//检验日期
@Field(type = FieldType.Text)
private String inspectionDate;
......@@ -77,7 +82,7 @@ public class ESCylinderInfoDto {
private Long inspectionDateMs;
//气瓶唯一标识
@Field(type = FieldType.Text)
@Field(type = FieldType.Keyword)
private String sequenceCode;
//单位内部编号
......@@ -85,13 +90,13 @@ public class ESCylinderInfoDto {
private String unitInnerCode;
//appid
@Field(type = FieldType.Text)
@Field(type = FieldType.Keyword)
private String appId;
//统一社会信用代码
@Field(type = FieldType.Text)
@Field(type = FieldType.Keyword)
private String creditCode;
@Field(type = FieldType.Text)
@Field(type = FieldType.Keyword)
private String regionCode;
}
package com.yeejoin.amos.boot.module.cylinder.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
/**
* <pre>
* 气瓶字典枚举
......@@ -16,54 +10,60 @@ import java.util.Map;
*/
public enum CylDictEnum {
isValid_0(3125,0,"isValid"),
isValid_1(3126,1,"isValid"),
same_0(3127,0,"same"),
same_1(3128,1,"same"),
SecurityDocuments_0(3137,0,"SecurityDocuments"),
SecurityDocuments_1(3138,1,"SecurityDocuments"),
isComplete_0(3135,0,"isComplete"),
isComplete_1(3136,1,"isComplete"),
haveStillPressure_0(3133,0,"haveStillPressure"),
haveStillPressure_1(3134,1,"haveStillPressure"),
isComplianceWithGBT_0(3131,0,"isComplianceWithGBT"),
isComplianceWithGBT_1(3132,1,"isComplianceWithGBT"),
isRegulations_0(3129,0,"isRegulations"),
isRegulations_1(3130,1,"isRegulations"),
withinScope_0 (3141,0, "withinScope"),
withinScope_1 (3142,1, "withinScope"),
sealedState_0 (3143,0, "sealedState"),
sealedState_1 (3144,1, "sealedState"),
defective_0 (3145,0, "defective"),
defective_1 (3146,1, "defective"),
abnormaLTemperature_0 (3147,0, "abnormaLTemperature"),
abnormaLTemperature_1 (3148,1, "abnormaLTemperature"),
warningSign_0 (3149,0, "warningSign"),
warningSign_1 (3150,1, "warningSign"),
cylinder_Status_0 (3114,0, "cylinder_Status"),
cylinder_Status_1 (3115,1, "cylinder_Status"),
cylinder_Status_2 (3116,2, "cylinder_Status"),
cylinder_Status_3 (3117,3, "cylinder_Status"),
cylinder_Variety_1 (3145,1, "cylinder_Variety"),
cylinder_Variety_2 (3146,2, "cylinder_Variety"),
cylinder_Variety_3 (3147,3, "cylinder_Variety"),
cylinder_Variety_4 (3148,4, "cylinder_Variety"),
cylinder_Variety_5 (3149,5, "cylinder_Variety");
isValid_0(3125, 0, "isValid"),
isValid_1(3126, 1, "isValid"),
same_0(3127, 0, "same"),
same_1(3128, 1, "same"),
SecurityDocuments_0(3137, 0, "SecurityDocuments"),
SecurityDocuments_1(3138, 1, "SecurityDocuments"),
isComplete_0(3135, 0, "isComplete"),
isComplete_1(3136, 1, "isComplete"),
haveStillPressure_0(3133, 0, "haveStillPressure"),
haveStillPressure_1(3134, 1, "haveStillPressure"),
isComplianceWithGBT_0(3131, 0, "isComplianceWithGBT"),
isComplianceWithGBT_1(3132, 1, "isComplianceWithGBT"),
isRegulations_0(3129, 0, "isRegulations"),
isRegulations_1(3130, 1, "isRegulations"),
withinScope_0(3141, 0, "withinScope"),
withinScope_1(3142, 1, "withinScope"),
sealedState_0(3143, 0, "sealedState"),
sealedState_1(3144, 1, "sealedState"),
defective_0(3145, 0, "defective"),
defective_1(3146, 1, "defective"),
abnormalTemperature_0(3147, 0, "abnormalTemperature"),
abnormalTemperature_1(3148, 1, "abnormalTemperature"),
warningSign_0(3149, 0, "warningSign"),
warningSign_1(3150, 1, "warningSign"),
cylinder_Status_0(3114, 0, "cylinder_Status"),
cylinder_Status_1(3115, 1, "cylinder_Status"),
cylinder_Status_2(3116, 2, "cylinder_Status"),
cylinder_Status_3(3117, 3, "cylinder_Status"),
cylinder_Variety_1(3118, 1, "cylinder_Variety"),
cylinder_Variety_2(3119, 2, "cylinder_Variety"),
cylinder_Variety_3(3120, 3, "cylinder_Variety"),
cylinder_Variety_4(3121, 4, "cylinder_Variety"),
cylinder_Variety_5(3122, 5, "cylinder_Variety"),
inspection_Result_0(3124, 0, "inspection_Result"),
inspection_Result_1(3123, 1, "inspection_Result"),
abnormal_0(3139, 0, "abnormal"),
abnormal_1(3140, 1, "abnormal");
/**
* 主键
*/
private Integer seqNbr;
private final Integer seqNbr;
/**
* 编码
*/
private Integer code;
private final Integer code;
/**
* key
*/
private String key;
private final String key;
// 构造方法
CylDictEnum(Integer seqNbr, Integer code, String key) {
......@@ -76,22 +76,17 @@ public enum CylDictEnum {
return seqNbr;
}
public Integer getCode()
{
public Integer getCode() {
return code;
}
public String getKey()
{
public String getKey() {
return key;
}
public static CylDictEnum getEnum(Integer code, String key)
{
for (CylDictEnum cylDictEnum : CylDictEnum.values())
{
if (cylDictEnum.getCode().equals(code) && cylDictEnum.getKey().equals(key))
{
public static CylDictEnum getEnum(Integer code, String key) {
for (CylDictEnum cylDictEnum : CylDictEnum.values()) {
if (cylDictEnum.getCode().equals(code) && cylDictEnum.getKey().equals(key)) {
return cylDictEnum;
}
}
......
......@@ -47,6 +47,9 @@ public class CylinderInfoDto extends BaseDto {
@ApiModelProperty(value = "制造单位")
private String manufacturingUnit;
@ApiModelProperty(value = "制造单位统一信用代码")
private String manufacturingUnitCreditCode;
@ApiModelProperty(value = "单位内部编号")
private String unitInnerCode;
......
package com.yeejoin.amos.boot.module.cylinder.flc.api.entity;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.baomidou.mybatisplus.annotation.TableName;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import java.util.Date;
/**
* 液化气体气瓶充装信息审核
*
......@@ -37,8 +38,6 @@ public class CylinderFillingExamine extends BaseEntity {
@ApiModelProperty(value = "充装审核报表附件名称")
private String fillingAuditName;
@ApiModelProperty(value = "同步时间 yyyy-MM-dd HH24:mi:ss")
private Date syncDate;
......@@ -50,4 +49,8 @@ public class CylinderFillingExamine extends BaseEntity {
@ApiModelProperty(value = "数据完整度")
private Double integrity;
@ApiModelProperty(value = "气瓶唯一标识")
private String sequenceCode;
}
......@@ -26,10 +26,6 @@ public class CylinderFillingRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "充装记录Id")
private String fillingRecordId;
......@@ -53,8 +49,6 @@ public class CylinderFillingRecord extends BaseEntity {
@ApiModelProperty(value = "异常情况")
private Integer abnormal;
@ApiModelProperty(value = "同步时间 yyyy-MM-dd HH24:mi:ss")
private Date syncDate;
......@@ -82,4 +76,6 @@ public class CylinderFillingRecord extends BaseEntity {
@ApiModelProperty(value = "是否保存到es(1标识已经保存过)")
private String isNotEs;
@ApiModelProperty(value = "气瓶唯一标识码")
private String sequenceCode;
}
......@@ -25,9 +25,6 @@ public class CylinderInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "产权单位名称")
private String unitName;
......@@ -64,8 +61,6 @@ public class CylinderInfo extends BaseEntity {
@ApiModelProperty(value = "????վ??ʹ???û????")
private String endCustomCode;
@ApiModelProperty(value = "同步时间 yyyy-MM-dd HH24:mi:ss")
private Date syncDate;
......@@ -126,4 +121,6 @@ public class CylinderInfo extends BaseEntity {
@ApiModelProperty(value = "最新检验一条数据")
private String lastInspectionId;
@ApiModelProperty(value = "制造单位统一信用代码")
private String manufacturingUnitCreditCode;
}
......@@ -80,4 +80,13 @@ public class CylinderUnit extends BaseEntity {
@ApiModelProperty(value = "技术服务商")
private String developerAgency;
@ApiModelProperty(value = "企业资质附件")
private String qualificationFile;
@ApiModelProperty(value = "使用登记证附件")
private String useRegisterFile;
@ApiModelProperty(value = "设备汇总表附件")
private String deviceSummaryFile;
}
......@@ -119,5 +119,7 @@ public interface CylinderInfoMapper extends BaseMapper<CylinderInfo> {
List<Map<String, Object>> countFillingTimesAndQuantityByCity();
String getAttachmentByUnitCode (@Param("appId") String appId);
void updateCylinderInfoEsStatusBySeqCodes(String appId, List<String> seqCodeList);
}
......@@ -142,7 +142,7 @@
LIMIT 1000
</select>
<insert id="saveAndBatchInsert" parameterType="com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderFillingRecord">
INSERT INTO tz_cylinder_filling( sequence_nbr,
INSERT INTO "amos_tzs_biz".tz_cylinder_filling( sequence_nbr,
filling_before_id,
filling_unit_name,
sequence_code,
......@@ -241,7 +241,7 @@
<insert id="batchInsertOrUpdate" >
INSERT INTO tz_cylinder_filling_record (sequence_nbr,
INSERT INTO "amos_tzs_biz".tz_cylinder_filling_record (sequence_nbr,
filling_record_id,
filling_starttime,
filling_endtime,
......@@ -259,7 +259,8 @@
filling_before_id,
filling_check_id,
filling_examine_id,
is_not_es)
is_not_es,
sequence_code)
VALUES
<foreach collection ="list" item="item" index= "index" separator =",">
(#{item.sequenceNbr},
......@@ -280,10 +281,10 @@
#{item.fillingBeforeId},
#{item.fillingCheckId},
#{item.fillingExamineId},
#{item.sequenceCode},
null)
</foreach>
on conflict (app_id, filling_record_id) do update set
on conflict (app_id, sequence_code, filling_record_id) do update set
sequence_nbr = EXCLUDED.sequence_nbr,
filling_record_id = EXCLUDED.filling_record_id,
filling_starttime = EXCLUDED.filling_starttime,
......@@ -302,10 +303,8 @@
filling_before_id = EXCLUDED.filling_before_id,
filling_check_id = EXCLUDED.filling_check_id,
filling_examine_id = EXCLUDED.filling_examine_id,
is_not_es = null
is_not_es = null,
sequence_code = EXCLUDED.sequence_code
</insert>
<update id="updateSyncState">
......
......@@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderFillingCheckMapper">
<insert id="saveOrUpdateByCondition">
INSERT INTO "tz_cylinder_filling_check" (
INSERT INTO "amos_tzs_biz".""tz_cylinder_filling_check" (
"sequence_nbr",
"filling_check_id",
"within_scope",
......@@ -20,7 +20,8 @@
"app_id",
"integrity",
"check_results",
"nonconformances"
"nonconformances",
"sequence_code"
)
VALUES
<foreach collection ="list" item="item" index= "index" separator =",">
......@@ -42,10 +43,11 @@
#{item.appId},
#{item.integrity},
#{item.checkResults},
#{item.nonconformances}
#{item.nonconformances},
#{item.sequenceCode}
)
</foreach>
ON conflict (app_id, filling_check_id) DO
ON conflict (app_id, sequence_code, filling_check_id) DO
UPDATE
SET "sequence_nbr" = EXCLUDED."sequence_nbr",
"filling_check_id" = EXCLUDED."filling_check_id",
......@@ -64,7 +66,8 @@
"app_id" = EXCLUDED."app_id",
"integrity" = EXCLUDED."integrity",
"check_results" = EXCLUDED."check_results",
"nonconformances" = EXCLUDED."nonconformances"
"nonconformances" = EXCLUDED."nonconformances",
"sequence_code" = EXCLUDED."sequence_code"
</insert>
<select id="queryIntegirtyByAppId" resultType="java.lang.Double">
......
......@@ -2,7 +2,8 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderFillingExamineMapper">
<insert id="saveOrUpdateBatch" parameterType="com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderFillingExamine">
INSERT INTO "tz_cylinder_filling_examine"(sequence_nbr,filling_examine_id,filling_audit_date,filling_audit_url,filling_audit_name,rec_date,rec_user_id,sync_date,sync_state,app_id)
INSERT INTO
"amos_tzs_biz".""tz_cylinder_filling_examine"(sequence_nbr,filling_examine_id,filling_audit_date,filling_audit_url,filling_audit_name,rec_date,rec_user_id,sync_date,sync_state,app_id,sequence_code)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.sequenceNbr},
......@@ -14,9 +15,10 @@
#{item.recUserId},
#{item.syncDate},
#{item.syncState},
#{item.appId})
#{item.appId},
#{item.sequenceCode})
</foreach>
on conflict (app_id,filling_examine_id) do update set
on conflict (app_id, sequence_code,filling_examine_id) do update set
"filling_examine_id" = EXCLUDED."filling_examine_id",
"filling_audit_date" = EXCLUDED."filling_audit_date",
"filling_audit_url" = EXCLUDED."filling_audit_url",
......@@ -25,6 +27,7 @@
"rec_user_id" = EXCLUDED."rec_user_id",
"sync_date" = EXCLUDED."sync_date",
"sync_state" = EXCLUDED."sync_state",
"app_id" = EXCLUDED."app_id"
"app_id" = EXCLUDED."app_id",
"sequence_code" = EXCLUDED."sequence_code"
</insert>
</mapper>
......@@ -498,7 +498,7 @@
</update>
<insert id="saveOrUpdateBatch" parameterType="com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderInfo">
INSERT INTO "tz_cylinder_info" ("sequence_nbr","unit_name","factory_num","cylinder_status","cylinder_variety","volume","manufacturing_date","manufacturing_unit","unit_inner_code","sequence_code","early_warning_level","early_warning_level_cal_date","end_custom_code","rec_date","rec_user_id","sync_date","sync_state","app_id","integrity","longitude","latitude","credit_code","filling_media","product_name","product_qualified","proof_quality","supervision_inspec","type_experiments","valve_manufactur_unit","nominal_work_pressure","cylinder_variety_name","filling_media_name","is_not_es")
INSERT INTO "amos_tzs_biz"."tz_cylinder_info" ("sequence_nbr","unit_name","factory_num","cylinder_status","cylinder_variety","volume","manufacturing_date","manufacturing_unit","unit_inner_code","sequence_code","early_warning_level","early_warning_level_cal_date","end_custom_code","rec_date","rec_user_id","sync_date","sync_state","app_id","integrity","longitude","latitude","credit_code","filling_media","product_name","product_qualified","proof_quality","supervision_inspec","type_experiments","valve_manufactur_unit","nominal_work_pressure","cylinder_variety_name","filling_media_name","is_not_es","manufacturing_unit_credit_code")
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.sequenceNbr},
......@@ -533,7 +533,8 @@
#{item.nominalWorkPressure},
#{item.cylinderVarietyName},
#{item.fillingMediaName},
null)
null,
#{item.manufacturingUnitCreditCode})
</foreach>
on conflict (app_id,sequence_code) do update set
"unit_name" = EXCLUDED."unit_name",
......@@ -566,6 +567,14 @@
"valve_manufactur_unit" = EXCLUDED."valve_manufactur_unit",
"nominal_work_pressure" = EXCLUDED."nominal_work_pressure",
"cylinder_variety_name" = EXCLUDED."cylinder_variety_name",
"filling_media_name" = EXCLUDED."filling_media_name"
"filling_media_name" = EXCLUDED."filling_media_name",
"manufacturing_unit_credit_code" = EXCLUDED."manufacturing_unit_credit_code"
</insert>
<update id="updateCylinderInfoEsStatusBySeqCodes">
UPDATE "amos_tzs_biz".tz_cylinder_info SET "is_not_es" = 1 WHERE "app_id" = #{appId} and "sequence_code" IN
<foreach collection="seqCodeList" separator="," item="seqCode" open="(" close=")">
#{seqCode}
</foreach>
</update>
</mapper>
......@@ -13,7 +13,7 @@
</select>
<insert id="saveOrUpdateBatch" parameterType="com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderInspection">
INSERT INTO "tz_cylinder_inspection"(sequence_nbr,inspection_unit,sequence_code,inspection_date,next_inspection_date,inspection_result,rec_date,rec_user_id,sync_date,sync_state,app_id,scrap_quantity)
INSERT INTO "amos_tzs_biz"."tz_cylinder_inspection"(sequence_nbr,inspection_unit,sequence_code,inspection_date,next_inspection_date,inspection_result,rec_date,rec_user_id,sync_date,sync_state,app_id,scrap_quantity)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.sequenceNbr},
......@@ -29,7 +29,7 @@
#{item.appId},
#{item.scrapQuantity})
</foreach>
on conflict (app_id,sequence_code) do update set
on conflict (app_id,sequence_code,inspection_date) do update set
"inspection_unit" = EXCLUDED."inspection_unit",
"sequence_code" = EXCLUDED."sequence_code",
"inspection_date" = EXCLUDED."inspection_date",
......
......@@ -9,7 +9,7 @@
<insert id="saveOrUpdateBatch" parameterType="com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderTags">
INSERT INTO "tz_cylinder_tags"(
INSERT INTO "amos_tzs_biz"."tz_cylinder_tags"(
sequence_nbr,
sequence_code,
qrcode,
......
......@@ -93,7 +93,7 @@
and not EXISTS (select 1 from tz_cylinder_question_info q where u.sequence_nbr = q.question_object_id and q.question_type = #{questionType} )
</select>
<insert id="saveOrUpdateBatch" parameterType="com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderUnit">
INSERT INTO "tz_cylinder_unit" ("sequence_nbr","unit_id","region_code","unit_name","credit_code","address","unit_person","person_mobile_phone","person_telephone","postal_code","rec_date","rec_user_id","sync_date","sync_state","app_id","security_adm","security_adm_phone","region_name")
INSERT INTO "amos_tzs_biz"."tz_cylinder_unit" ("sequence_nbr","unit_id","region_code","unit_name","credit_code","address","unit_person","person_mobile_phone","person_telephone","postal_code","rec_date","rec_user_id","sync_date","sync_state","app_id","security_adm","security_adm_phone","region_name","qualification_file", "use_register_file", "device_summary_file")
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.sequenceNbr},
......@@ -113,7 +113,10 @@
#{item.appId},
#{item.securityAdm},
#{item.securityAdmPhone},
#{item.regionName})
#{item.regionName},
#{item.qualificationFile},
#{item.useRegisterFile},
#{item.deviceSummaryFile})
</foreach>
on conflict (app_id) do update set
"unit_id" = EXCLUDED."unit_id",
......@@ -132,6 +135,9 @@
"app_id" = EXCLUDED."app_id",
"security_adm" = EXCLUDED."security_adm",
"security_adm_phone" = EXCLUDED."security_adm_phone",
"region_name" = EXCLUDED."region_name"
"region_name" = EXCLUDED."region_name",
"qualification_file" = EXCLUDED."qualification_file",
"use_register_file" = EXCLUDED."use_register_file",
"device_summary_file" = EXCLUDED."device_summary_file"
</insert>
</mapper>
package com.yeejoin.amos.boot.module.cylinder.flc.biz.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.yeejoin.amos.boot.module.cylinder.api.enums.CylDictEnum;
import com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderFilling;
......@@ -13,7 +12,6 @@ import com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderFillingCheck
import com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderInfoMapper;
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
......@@ -67,22 +65,22 @@ public class CylSyncServiceImpl {
HashSet<String> fillingCheckIdList = Sets.newHashSet();
HashSet<String> appIdList = Sets.newHashSet();
fillingChecks.forEach(e -> {
e.setAbnormalTemperature(Objects.requireNonNull(Objects.requireNonNull(CylDictEnum.getEnum(e.getAbnormalTemperature(),
CylDictEnum.abnormaLTemperature_0.getKey()))).getSeqNbr());
e.setWithinScope(Objects.requireNonNull(Objects.requireNonNull(CylDictEnum.getEnum(e.getWithinScope(),
CylDictEnum.withinScope_0.getKey()))).getSeqNbr());
e.setWarningSign(Objects.requireNonNull(Objects.requireNonNull(CylDictEnum.getEnum(e.getWarningSign(),
CylDictEnum.warningSign_0.getKey()))).getSeqNbr());
e.setSealedState(Objects.requireNonNull(Objects.requireNonNull(CylDictEnum.getEnum(e.getSealedState(),
CylDictEnum.sealedState_0.getKey()))).getSeqNbr());
e.setDefective(Objects.requireNonNull(Objects.requireNonNull(CylDictEnum.getEnum(e.getDefective(),
CylDictEnum.defective_0.getKey()))).getSeqNbr());
e.setAbnormalTemperature(Objects.requireNonNull(CylDictEnum.getEnum(e.getAbnormalTemperature(),
CylDictEnum.abnormalTemperature_0.getKey())).getSeqNbr());
e.setWithinScope(Objects.requireNonNull(CylDictEnum.getEnum(e.getWithinScope(),
CylDictEnum.withinScope_0.getKey())).getSeqNbr());
e.setWarningSign(Objects.requireNonNull(CylDictEnum.getEnum(e.getWarningSign(),
CylDictEnum.warningSign_0.getKey())).getSeqNbr());
e.setSealedState(Objects.requireNonNull(CylDictEnum.getEnum(e.getSealedState(),
CylDictEnum.sealedState_0.getKey())).getSeqNbr());
e.setDefective(Objects.requireNonNull(CylDictEnum.getEnum(e.getDefective(),
CylDictEnum.defective_0.getKey())).getSeqNbr());
fillingCheckIdList.add(e.getFillingCheckId());
appIdList.add(e.getAppId());
});
// List<CylinderFillingCheck> clearList = Lists.newArrayList();
// fillingChecks.stream().collect(Collectors.groupingBy(item -> item.getAppId() + "-" + item.getFillingCheckId(), Collectors.maxBy(Comparator.comparing(CylinderFillingCheck::getSyncDate)))).forEach((k,v) -> {
// fillingChecks.stream().collect(Collectors.groupingBy(item -> item.getAppId() + "-" + item.getFillingCheckId(), Collectors.maxBy(Comparator.comparing(CylinderFillingCheck::getSyncDate))).forEach((k,v) -> {
// clearList.add(v.get());
// });
//1.更新或插入业务表
......@@ -118,10 +116,10 @@ public class CylSyncServiceImpl {
List<CylinderInfo> cylinderInfoList = sourceFillingCheckServiceImpl.getCylinderInfoList();
if (!ObjectUtils.isEmpty(cylinderInfoList)) {
for (CylinderInfo cylinderInfo : cylinderInfoList) {
cylinderInfo.setCylinderStatus(Objects.requireNonNull(Objects.requireNonNull(CylDictEnum.getEnum(cylinderInfo.getCylinderStatus(),
CylDictEnum.cylinder_Status_0.getKey()))).getSeqNbr());
cylinderInfo.setCylinderVariety(Objects.requireNonNull(Objects.requireNonNull(CylDictEnum.getEnum(cylinderInfo.getCylinderVariety(),
CylDictEnum.cylinder_Variety_1.getKey()))).getSeqNbr());
cylinderInfo.setCylinderStatus(Objects.requireNonNull(CylDictEnum.getEnum(cylinderInfo.getCylinderStatus(),
CylDictEnum.cylinder_Status_0.getKey())).getSeqNbr());
cylinderInfo.setCylinderVariety(Objects.requireNonNull(CylDictEnum.getEnum(cylinderInfo.getCylinderVariety(),
CylDictEnum.cylinder_Variety_1.getKey())).getSeqNbr());
}
cylinderInfoMapper.saveOrUpdateBatch(cylinderInfoList);
List<Long> sequenceNbrS = cylinderInfoList.stream().map(CylinderInfo::getSequenceNbr).collect(Collectors.toList());
......@@ -164,7 +162,7 @@ public class CylSyncServiceImpl {
// sequenceCodes.add(e.getSequenceCode());
String isValid = e.getIsValid();
if (!ObjectUtil.isEmpty(isValid) && ("1".equals(isValid) || "0".equals(isValid))) {
CylDictEnum cylDictEnum = CylDictEnum.getEnum(Integer.valueOf(isValid), "isValid");
CylDictEnum cylDictEnum = CylDictEnum.getEnum(Integer.valueOf(isValid), CylDictEnum.isValid_0.getKey());
if (cylDictEnum != null) {
e.setIsValid(cylDictEnum.getSeqNbr().toString());
}
......@@ -172,7 +170,7 @@ public class CylSyncServiceImpl {
Integer same = e.getSame();
if (!ObjectUtil.isEmpty(same) && (1 == same || 0 == same)) {
CylDictEnum cylDictEnum = CylDictEnum.getEnum(same, "same");
CylDictEnum cylDictEnum = CylDictEnum.getEnum(same, CylDictEnum.same_0.getKey());
if (cylDictEnum != null) {
e.setSame(cylDictEnum.getSeqNbr());
}
......@@ -180,7 +178,7 @@ public class CylSyncServiceImpl {
Integer isRegulations = e.getIsRegulations();
if (!ObjectUtil.isEmpty(isRegulations) && (1 == isRegulations || 0 == isRegulations)) {
CylDictEnum cylDictEnum = CylDictEnum.getEnum(isRegulations, "isRegulations");
CylDictEnum cylDictEnum = CylDictEnum.getEnum(isRegulations, CylDictEnum.isRegulations_0.getKey());
if (cylDictEnum != null) {
e.setIsRegulations(cylDictEnum.getSeqNbr());
}
......@@ -188,7 +186,7 @@ public class CylSyncServiceImpl {
Integer isComplianceWithgbt = e.getIsComplianceWithgbt();
if (!ObjectUtil.isEmpty(isComplianceWithgbt) && (1 == isComplianceWithgbt || 0 == isComplianceWithgbt)) {
CylDictEnum cylDictEnum = CylDictEnum.getEnum(isComplianceWithgbt, "isComplianceWithGBT");
CylDictEnum cylDictEnum = CylDictEnum.getEnum(isComplianceWithgbt, CylDictEnum.isComplianceWithGBT_0.getKey());
if (cylDictEnum != null) {
e.setIsComplianceWithgbt(cylDictEnum.getSeqNbr());
}
......@@ -196,7 +194,7 @@ public class CylSyncServiceImpl {
Integer haveStillPressure = e.getHaveStillPressure();
if (!ObjectUtil.isEmpty(haveStillPressure) && (1 == haveStillPressure || 0 == haveStillPressure)) {
CylDictEnum cylDictEnum = CylDictEnum.getEnum(haveStillPressure, "haveStillPressure");
CylDictEnum cylDictEnum = CylDictEnum.getEnum(haveStillPressure, CylDictEnum.haveStillPressure_0.getKey());
if (cylDictEnum != null) {
e.setHaveStillPressure(cylDictEnum.getSeqNbr());
}
......@@ -204,7 +202,7 @@ public class CylSyncServiceImpl {
Integer isComplete = e.getIsComplete();
if (!ObjectUtil.isEmpty(isComplete) && (1 == isComplete || 0 == isComplete)) {
CylDictEnum cylDictEnum = CylDictEnum.getEnum(isComplete, "isComplete");
CylDictEnum cylDictEnum = CylDictEnum.getEnum(isComplete, CylDictEnum.isComplete_0.getKey());
if (cylDictEnum != null) {
e.setIsComplete(cylDictEnum.getSeqNbr());
}
......@@ -212,7 +210,7 @@ public class CylSyncServiceImpl {
Integer haveSecurityDocuments = e.getHaveSecurityDocuments();
if (!ObjectUtil.isEmpty(haveSecurityDocuments) && (1 == haveSecurityDocuments || 0 == haveSecurityDocuments)) {
CylDictEnum cylDictEnum = CylDictEnum.getEnum(haveSecurityDocuments, "SecurityDocuments");
CylDictEnum cylDictEnum = CylDictEnum.getEnum(haveSecurityDocuments, CylDictEnum.SecurityDocuments_0.getKey());
if (cylDictEnum != null) {
e.setHaveSecurityDocuments(cylDictEnum.getSeqNbr());
}
......
......@@ -27,6 +27,7 @@ import org.typroject.tyboot.component.emq.EmqxListener;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
......@@ -70,10 +71,12 @@ public class SafetyProblemTopicMessage extends EmqxListener {
private final BlockingQueue<SafetyProblemEvent> blockingQueue = new LinkedBlockingQueue<>();
private ExecutorService executorService;
@PostConstruct
void init() throws Exception {
emqKeeper.subscript(buildTopic(problemEventTopic), 2, this);
ExecutorService executorService = Executors.newFixedThreadPool(threadNumber);
executorService = Executors.newFixedThreadPool(threadNumber);
for (int i = 0; i < threadNumber; i++) {
executorService.execute(() -> {
try {
......@@ -152,4 +155,11 @@ public class SafetyProblemTopicMessage extends EmqxListener {
String topicPrefix = "$share/" + applicationName;
return String.format("%s/%s", topicPrefix, topic);
}
@PreDestroy
public void shutdown() {
if (executorService != null) {
executorService.shutdown();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment