Commit b5a58875 authored by xixinzhao's avatar xixinzhao

三维校验接口

parent 83675177
......@@ -58,5 +58,6 @@ public class CheckResult {
@ApiModelProperty(value="模型名称")
private String modelName;
@ApiModelProperty(value="提交记录id")
private Long submitRecordId;
}
package com.yeejoin.amos.boot.module.tdc.api.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author xxz
*/
@Data
@Accessors(chain = true)
@TableName("tdc_model_item")
@ApiModel(value="ModelItem对象", description="模型填报项表")
public class ModelItem {
private static final long serialVersionUID = 1L;
@TableId(value = "sequence_nbr", type = IdType.ID_WORKER)
protected Long sequenceNbr;
@ApiModelProperty(value = "校验项名称")
private String checkItemLabel;
@ApiModelProperty(value = "校验项值")
private String checkItemValue;
@ApiModelProperty(value = "模型名称")
private String modelName;
@ApiModelProperty(value = "提交记录id")
private long submitRecordId;
}
package com.yeejoin.amos.boot.module.tdc.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.tdc.api.entity.ModelItem;
import org.mapstruct.Mapper;
/**
* @author DELL
*/
@Mapper
public interface ModelItemMapper extends BaseMapper<ModelItem> {
}
package com.yeejoin.amos.boot.module.tdc.api.service;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @author xxz
*/
@Service
public interface ModelItemService {
void saveModelItem(JSONObject jsonObject, AgencyUserModel userInfo);
void editModelItem(JSONObject jsonObject, AgencyUserModel userInfo);
/**
* 获取详情接口
* @param sequenceNbr 记录id
* @return 项
*/
Map<String, Object> getModelItem(Long sequenceNbr);
void deleteModelItem(String sequenceNbr);
}
package com.yeejoin.amos.boot.module.tdc.api.service;
import com.yeejoin.amos.boot.module.tdc.api.entity.SubmitRecord;
import org.springframework.stereotype.Service;
/**
......@@ -7,4 +8,9 @@ import org.springframework.stereotype.Service;
*/
@Service
public interface SubmitRecordService {
int saveSubmitRecord(SubmitRecord submitRecord);
SubmitRecord updateById(Long sequenceNbr, String batchNo);
}
package com.yeejoin.amos.boot.module.tdc.api.service;
import com.yeejoin.amos.boot.module.tdc.api.entity.ModelItem;
import com.yeejoin.amos.boot.module.tdc.api.entity.SubmitRecord;
import java.util.List;
import java.util.Map;
/**
* @author xxz
*/
public interface SyncMethodService {
/**
* 校验
*/
void checkItem(Map<String, List<ModelItem>> itemValue, SubmitRecord record);
}
<?xml version="1.0" encoding="UTF-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.tdc.api.mapper.ModelItemMapper">
</mapper>
\ No newline at end of file
......@@ -70,7 +70,8 @@ public class CheckModelAction {
Map propertyValues = idxProjectModel.getPropertyValues();
String batchNo = String.valueOf(propertyValues.get("batch_no"));
Integer checkType = Integer.valueOf(String.valueOf(propertyValues.get("checkType")));
Long submitRecordId = Long.valueOf(String.valueOf(propertyValues.get("submitRecordId")));
// Integer checkType = Integer.valueOf(String.valueOf(propertyValues.get("checkType")));
String orgCode = String.valueOf(propertyValues.get("org_code"));
String checkPeopleName = String.valueOf(propertyValues.get("checkPeopleName"));
String itemName = idxProjectModel.getItemName();
......@@ -81,12 +82,12 @@ public class CheckModelAction {
return;
}
if (!CollectionUtils.isEmpty(idxProjectModel.getPropertys()) && StringUtils.isNotEmpty(checkItem)) {
Map<String, Object> item = idxProjectModel.getPropertys().stream().filter(map -> checkItem.equals(map.get("name"))).findFirst().orElse(null);
if (ObjectUtils.isNotEmpty(item)) {
checkResult.setCheckItemLabel(String.valueOf(item.get("title")));
}
}
// if (!CollectionUtils.isEmpty(idxProjectModel.getPropertys()) && StringUtils.isNotEmpty(checkItem)) {
// Map<String, Object> item = idxProjectModel.getPropertys().stream().filter(map -> checkItem.equals(map.get("name"))).findFirst().orElse(null);
// if (ObjectUtils.isNotEmpty(item)) {
// checkResult.setCheckItemLabel(String.valueOf(item.get("title")));
// }
// }
checkResult.setBatchNo(StringUtils.isNotEmpty(batchNo) ? batchNo : String.valueOf(propertyValues.get("id")));
checkResult.setCheckItemResult(result);
......@@ -96,23 +97,24 @@ public class CheckModelAction {
checkResult.setModelId(String.valueOf(checkModel.getSequenceNbr()));
checkResult.setAmosOrgCode(checkModel.getAmosOrgCode());
checkResult.setAmosOrgName(checkModel.getAmosOrgName());
checkResult.setSubmitRecordId(submitRecordId);
checkResult.setCheckDate(new Date());
checkResult.setCheckType(ObjectUtils.isNotEmpty(checkType) ? checkType : 1);
// checkResult.setCheckType(ObjectUtils.isNotEmpty(checkType) ? checkType : 1);
checkResult.setModelName(checkModel.getModelName());
checkResultService.save(checkResult);
// 2. 判断是否检验结束
if (ObjectUtils.isNotEmpty(checkType)) {
if (checkType == 1) {
// 2.2 单独模型校验,根据批次号查询已经入库的属性
sendWebMessage(batchNo, checkModel.getCheckItemAmount(), orgCode, checkPeopleName, checkType, itemName);
} else if (checkType == 0) {
// 2.1 全站校验
List<CheckModel> checkModels = checkModelService.selectByOrgCode(orgCode);
int sum = checkModels.stream().mapToInt(CheckModel::getCheckItemAmount).sum();
sendWebMessage(batchNo, sum, orgCode, checkPeopleName, checkType, itemName);
}
}
// // 2. 判断是否检验结束
// if (ObjectUtils.isNotEmpty(checkType)) {
// if (checkType == 1) {
// // 2.2 单独模型校验,根据批次号查询已经入库的属性
// sendWebMessage(batchNo, checkModel.getCheckItemAmount(), orgCode, checkPeopleName, checkType, itemName);
// } else if (checkType == 0) {
// // 2.1 全站校验
// List<CheckModel> checkModels = checkModelService.selectByOrgCode(orgCode);
// int sum = checkModels.stream().mapToInt(CheckModel::getCheckItemAmount).sum();
// sendWebMessage(batchNo, sum, orgCode, checkPeopleName, checkType, itemName);
// }
// }
// else {
// // 指标填报完自动调用,暂时不需要推送前端
// String number = ObjectUtils.isNotEmpty(checkType) ? batchNo : String.valueOf(propertyValues.get("id"));
......
package com.yeejoin.amos.boot.module.tdc.biz.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @author DELL
*/
@Slf4j
@Configuration
@EnableAsync
public class SwjyExecutorConfig {
@Bean(name = "swjyAsyncExecutor")
public Executor asyncServiceExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(10);
//配置最大线程数
executor.setMaxPoolSize(100);
//配置队列大小
executor.setQueueCapacity(1000);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("namePrefix");
//线程池维护线程所允许的空闲时间
executor.setKeepAliveSeconds(30);
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行--拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//执行初始化
executor.initialize();
//等待所有任务结束后再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
return executor;
}
}
package com.yeejoin.amos.boot.module.tdc.biz.controller;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.tdc.api.service.ModelItemService;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.Map;
/**
* 校验项提交
* @author xxz
*/
@RestController
@Api(tags = "校验项提交")
@RequestMapping(value = "/check-item")
public class ModelItemController extends BaseController {
@Autowired
ModelItemService modelItemService;
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@PostMapping(value = "/saveModelItem")
@ApiOperation(httpMethod = "POST", value = "保存模型项", notes = "保存模型项")
public ResponseModel saveModelItem(@RequestBody JSONObject jsonObject){
AgencyUserModel userInfo = getUserInfo();
if (ObjectUtils.isEmpty(jsonObject)) {
return null;
}
Object sequenceNbr = jsonObject.get("sequenceNbr");
if (ObjectUtils.isEmpty(sequenceNbr)) {
modelItemService.saveModelItem(jsonObject, userInfo);
return ResponseHelper.buildResponse(true);
}
modelItemService.editModelItem(jsonObject, userInfo);
return ResponseHelper.buildResponse(true);
}
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/getModelItem")
@ApiOperation(httpMethod = "GET", value = "获取模型项", notes = "获取模型项")
public ResponseModel<Map<String, Object>> getModelItem(@RequestParam(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(modelItemService.getModelItem(sequenceNbr));
}
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/deleteModelItem")
@ApiOperation(httpMethod = "GET", value = "删除模型项", notes = "删除模型项")
public ResponseModel deleteModelItem(@RequestParam(value = "sequenceNbr") String sequenceNbr){
modelItemService.deleteModelItem(sequenceNbr);
return ResponseHelper.buildResponse(true);
}
}
package com.yeejoin.amos.boot.module.tdc.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.netflix.discovery.converters.Auto;
import com.yeejoin.amos.boot.module.tdc.api.entity.CheckResult;
import com.yeejoin.amos.boot.module.tdc.api.entity.ModelItem;
import com.yeejoin.amos.boot.module.tdc.api.entity.SubmitRecord;
import com.yeejoin.amos.boot.module.tdc.api.mapper.CheckResultMapper;
import com.yeejoin.amos.boot.module.tdc.api.mapper.ModelItemMapper;
import com.yeejoin.amos.boot.module.tdc.api.mapper.SubmitRecordMapper;
import com.yeejoin.amos.boot.module.tdc.api.service.ModelItemService;
import com.yeejoin.amos.boot.module.tdc.api.service.SubmitRecordService;
import com.yeejoin.amos.boot.module.tdc.api.service.SyncMethodService;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author DELL
*/
@Service
public class ModelItemServiceImpl extends ServiceImpl<ModelItemMapper, ModelItem> implements ModelItemService {
@Autowired
SubmitRecordService submitRecordService;
@Autowired
SyncMethodService syncMethodService;
@Autowired
CheckResultMapper checkResultMapper;
@Autowired
SubmitRecordMapper submitRecordMapper;
@Override
public void saveModelItem(JSONObject jsonObject, AgencyUserModel userInfo) {
long start = System.currentTimeMillis();
if (ObjectUtils.isEmpty(jsonObject)) {
return;
}
SubmitRecord submitRecord = new SubmitRecord();
userInfo.getUserName();
List<CompanyModel> company = userInfo.getCompanys();
if (!CollectionUtils.isEmpty(company)) {
String companyName = company.get(0).getCompanyName();
String orgCode = company.get(0).getOrgCode();
submitRecord.setAmosOrgCode(orgCode);
submitRecord.setAmosOrgName(companyName);
}
submitRecord.setSubmitPeople(userInfo.getRealName());
submitRecord.setSubmitTime(new Date());
String batchNo = UUID.randomUUID().toString();
submitRecord.setBatchNo(batchNo);
long start1 = System.currentTimeMillis();
log.error("=====记录入库前用时:"+(start1-start)+"======");
submitRecordService.saveSubmitRecord(submitRecord);
long end = System.currentTimeMillis();
log.error("=====记录入库用时:"+(end-start1)+"======");
if (StringUtils.isEmpty(submitRecord.getSequenceNbr())) {
return;
}
List<ModelItem> collect = jsonObject.entrySet().stream().map(e -> {
ModelItem modelItem = new ModelItem();
String key = e.getKey();
String[] s = key.split("_");
if (s.length > 0) {
modelItem.setModelName(s[0]);
modelItem.setCheckItemLabel(s[1]);
}
String value = String.valueOf(e.getValue());
modelItem.setCheckItemValue(value);
modelItem.setSubmitRecordId(submitRecord.getSequenceNbr());
return modelItem;
}).collect(Collectors.toList());
Map<String, List<ModelItem>> itemValue = collect.stream().collect(Collectors.groupingBy(ModelItem::getModelName));
long e1 = System.currentTimeMillis();
log.error("=====参数解析用时:"+(e1-end)+"======");
this.saveBatch(collect);
long e2 = System.currentTimeMillis();
log.error("=====入库用时:"+(e2-e1)+"======");
// 异步请求规则校验
syncMethodService.checkItem(itemValue, submitRecord);
}
@Override
public void editModelItem(JSONObject jsonObject, AgencyUserModel userInfo) {
Long sequenceNbr = Long.valueOf(String.valueOf(jsonObject.get("sequenceNbr")));
String batchNo = UUID.randomUUID().toString();
SubmitRecord submitRecord = submitRecordService.updateById(sequenceNbr, batchNo);
LambdaQueryWrapper<ModelItem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ModelItem::getSubmitRecordId, sequenceNbr);
this.baseMapper.delete(wrapper);
List<ModelItem> collect = jsonObject.entrySet().stream().map(e -> {
ModelItem modelItem = new ModelItem();
String key = e.getKey();
String[] s = key.split("_");
if (s.length > 1) {
modelItem.setModelName(s[0]);
modelItem.setCheckItemLabel(s[1]);
String value = String.valueOf(e.getValue());
modelItem.setCheckItemValue(value);
modelItem.setSubmitRecordId(submitRecord.getSequenceNbr());
return modelItem;
} else {
return null;
}
}).filter(item -> !ObjectUtils.isEmpty(item)).collect(Collectors.toList());
this.saveOrUpdateBatch(collect);
// 异步请求规则校验
Map<String, List<ModelItem>> itemValue = collect.stream().collect(Collectors.groupingBy(ModelItem::getModelName));
syncMethodService.checkItem(itemValue, submitRecord);
}
@Override
public Map<String, Object> getModelItem(Long sequenceNbr) {
LambdaQueryWrapper<ModelItem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ModelItem::getSubmitRecordId, sequenceNbr);
List<ModelItem> list = this.list(wrapper);
Map<String, Object> map = list.stream().collect(Collectors.toMap(e -> e.getModelName() + "_" + e.getCheckItemLabel(), ModelItem::getCheckItemValue));
map.put("sequenceNbr", sequenceNbr);
return map;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteModelItem(String sequenceNbr) {
if (!StringUtils.isEmpty(sequenceNbr)) {
String[] split = sequenceNbr.split(",");
List<String> list = Arrays.asList(split);
// 1. 删除记录
submitRecordMapper.deleteBatchIds(list);
// 2. 删除填报项
LambdaQueryWrapper<ModelItem> wrapper = new LambdaQueryWrapper<>();
wrapper.in(ModelItem::getSubmitRecordId, list);
this.baseMapper.delete(wrapper);
// 3. 删除校验记录
LambdaQueryWrapper<CheckResult> resultWrapper = new LambdaQueryWrapper<>();
resultWrapper.in(CheckResult::getSubmitRecordId, list);
checkResultMapper.delete(resultWrapper);
}
}
}
......@@ -5,6 +5,7 @@ import com.yeejoin.amos.boot.module.tdc.api.entity.SubmitRecord;
import com.yeejoin.amos.boot.module.tdc.api.mapper.SubmitRecordMapper;
import com.yeejoin.amos.boot.module.tdc.api.service.SubmitRecordService;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
/**
......@@ -12,4 +13,17 @@ import org.springframework.stereotype.Service;
*/
@Service
public class SubmitRecordServiceImpl extends ServiceImpl<SubmitRecordMapper, SubmitRecord> implements SubmitRecordService {
@Override
public int saveSubmitRecord(SubmitRecord submitRecord) {
return this.baseMapper.insert(submitRecord);
}
@Override
public SubmitRecord updateById(Long sequenceNbr, String batchNo) {
SubmitRecord submitRecord = this.getById(sequenceNbr);
submitRecord.setBatchNo(batchNo);
this.updateById(submitRecord);
return submitRecord;
}
}
package com.yeejoin.amos.boot.module.tdc.biz.service.impl;
import com.yeejoin.amos.boot.module.tdc.api.entity.ModelItem;
import com.yeejoin.amos.boot.module.tdc.api.entity.SubmitRecord;
import com.yeejoin.amos.boot.module.tdc.api.service.SyncMethodService;
import com.yeejoin.amos.boot.module.tdc.biz.action.model.IdxProjectModel;
import com.yeejoin.amos.component.rule.RuleTrigger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author DELL
*/
@Service
@Async("swjyAsyncExecutor")
@Slf4j
public class SyncMethodServiceImpl implements SyncMethodService {
@Autowired
RuleTrigger ruleTrigger;
@Override
public void checkItem(Map<String, List<ModelItem>> itemValue, SubmitRecord record) {
try {
itemValue.forEach((key, value) -> {
IdxProjectModel idxProjectModel = new IdxProjectModel();
idxProjectModel.setItemName(key);
Map<String, Object> mapValue = value.stream().collect(Collectors.toMap(ModelItem::getCheckItemLabel, ModelItem::getCheckItemValue));
mapValue.put("submitRecordId", record.getSequenceNbr());
mapValue.put("batch_no", record.getBatchNo());
mapValue.put("org_code", record.getAmosOrgCode());
idxProjectModel.setPropertyValues(mapValue);
// 调用规则校验模型
try {
// 没有配决策流,processIds传null即可
String packageId = "三维校验/" + key;
ruleTrigger.publish(idxProjectModel, packageId, null);
} catch (Exception e) {
e.printStackTrace();
}
});
} catch (Exception e) {
log.error("调用规则校验失败:");
}
}
}
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