Commit 60bf9b31 authored by KeYong's avatar KeYong

Merge remote-tracking branch 'origin/develop_dl_plan6' into develop_dl_plan6

parents 2f4b8213 21b45a59
...@@ -60,10 +60,10 @@ ...@@ -60,10 +60,10 @@
from from
f_fire_fighting_system f_fire_fighting_system
where 1=1 where 1=1
<if test="equimentName != null and equimentName != '' "> <if test="equimentName != null and equimentName !='' and equimentName != 'null' ">
AND name like CONCAT('%',#{equimentName},'%') AND name like CONCAT('%',#{equimentName},'%')
</if> </if>
<if test="equimentCode != null and equimentCode != '' "> <if test="equimentCode != null and equimentCode !='' and equimentCode !='null' ">
AND code like CONCAT('%',#{equimentCode},'%') AND code like CONCAT('%',#{equimentCode},'%')
</if> </if>
<if test="construction != 'all' "> <if test="construction != 'all' ">
......
...@@ -30,6 +30,22 @@ ...@@ -30,6 +30,22 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>com.aspose</groupId>-->
<!-- <artifactId>aspose-words</artifactId>-->
<!-- <version>15.8.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>15.8.0</version>
<classifier>jdk16</classifier>
</dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -19,4 +19,27 @@ public class CheckResultDto { ...@@ -19,4 +19,27 @@ public class CheckResultDto {
@ApiModelProperty(value="模型名称") @ApiModelProperty(value="模型名称")
private String name; private String name;
private String allTotal;
private String failTotal;
private String checkItemLabel;
private String checkItemValue;
private String batchNo;
private String checkExplain;
private String amosOrgCode;
private String amosOrgName;
private String modelName;
private String isRight;
private Integer modelId;
} }
\ No newline at end of file
...@@ -19,5 +19,9 @@ public class ModelTreeDto { ...@@ -19,5 +19,9 @@ public class ModelTreeDto {
private String tableName; private String tableName;
private String amosOrgName;
private String modelId;
private List<Map<String, Object>> children; private List<Map<String, Object>> children;
} }
...@@ -46,4 +46,17 @@ public class CheckModel { ...@@ -46,4 +46,17 @@ public class CheckModel {
@ApiModelProperty(value = "模型图片地址") @ApiModelProperty(value = "模型图片地址")
private String modelPictureUrl; private String modelPictureUrl;
@ApiModelProperty(value = "模型规则知识包")
private String modelRule;
@ApiModelProperty(value = "指标模型所属项目id")
private String projectId;
@ApiModelProperty(value = "指标模型表id")
private String tableId;
@ApiModelProperty(value = "模型校验项数量")
private int checkItemAmount;
} }
...@@ -34,9 +34,6 @@ public class CheckResult { ...@@ -34,9 +34,6 @@ public class CheckResult {
@ApiModelProperty(value="检查项值") @ApiModelProperty(value="检查项值")
private String checkItemValue; private String checkItemValue;
@ApiModelProperty(value="检查项标准值")
private String checkItemRealValue;
@ApiModelProperty(value="检查项结果") @ApiModelProperty(value="检查项结果")
private String checkItemResult; private String checkItemResult;
...@@ -50,7 +47,7 @@ public class CheckResult { ...@@ -50,7 +47,7 @@ public class CheckResult {
private String checkExplain; private String checkExplain;
@ApiModelProperty(value="校验类型") @ApiModelProperty(value="校验类型")
private String checkType; private Integer checkType;
@ApiModelProperty(value="模型所属机构") @ApiModelProperty(value="模型所属机构")
private String amosOrgCode; private String amosOrgCode;
......
package com.yeejoin.amos.boot.module.tdc.api.entity;
import lombok.NonNull;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
public class PowerReportFile implements MultipartFile {
private String name;
private String originalFilename;
private String contentType;
public PowerReportFile(String name, String originalFilename, String contentType, @NonNull byte[] bytes) {
super();
this.name = name;
this.originalFilename = originalFilename;
this.contentType = contentType;
this.bytes = bytes;
}
public PowerReportFile() {
super();
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public String getOriginalFilename() {
return originalFilename;
}
public String getContentType() {
return contentType;
}
public byte[] getBytes() {
return bytes;
}
@NonNull
byte[] bytes;
@Override
public boolean isEmpty() {
return bytes.length == 0;
}
@Override
public long getSize() {
return bytes.length;
}
@Override
public InputStream getInputStream() {
return new ByteArrayInputStream(bytes);
}
@Override
public void transferTo(File destination) throws IOException {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(destination);
outputStream.write(bytes);
} finally {
if (outputStream != null) {
outputStream.close();
}
}
}
}
package com.yeejoin.amos.boot.module.tdc.api.enums;
public enum WordPowerTypeEum {
/**
* 模板分类
*/
select("报告","powerReport.ftl");
private String label;
private String templateFile;
WordPowerTypeEum(String label,String templateFile ){
this.label = label;
this.templateFile = templateFile;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getTemplateFile() {
return templateFile;
}
public void setTemplateFile(String templateFile) {
this.templateFile = templateFile;
}
}
\ No newline at end of file
...@@ -22,7 +22,7 @@ public interface IdxFeignService { ...@@ -22,7 +22,7 @@ public interface IdxFeignService {
* @param tableId * @param tableId
* @return * @return
*/ */
@RequestMapping(value = "/v1/table/{tableId}", method = RequestMethod.GET) @RequestMapping(value = "/table/{tableId}", method = RequestMethod.GET)
ResponseModel<JSONObject> queryByTableId(@PathVariable String tableId); ResponseModel<JSONObject> queryByTableId(@PathVariable String tableId);
/** /**
......
...@@ -19,7 +19,14 @@ public interface CheckResultMapper extends BaseMapper<CheckResult> { ...@@ -19,7 +19,14 @@ public interface CheckResultMapper extends BaseMapper<CheckResult> {
List<CheckResultDto> selectTotal(String modelId, String amosOrgCode); List<CheckResultDto> selectTotal(String modelId, String amosOrgCode);
Map getTable(String tableName); Map<String, Object> getTables(String tableName, String amosOrgCode);
List<CheckResultDto> selectStatistion(String batchNo,String amosOrgCode);
List<CheckResultDto> selectDetails(String batchNo,Integer modelId);
String select(String amosOrgCode);
List<CheckResultDto> getOne(String amosOrgCode);
} }
...@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yeejoin.amos.boot.module.tdc.api.entity.CheckModel; import com.yeejoin.amos.boot.module.tdc.api.entity.CheckModel;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* @author xxz * @author xxz
*/ */
...@@ -19,9 +21,31 @@ public interface CheckModelService extends IService<CheckModel> { ...@@ -19,9 +21,31 @@ public interface CheckModelService extends IService<CheckModel> {
// List<CheckModel> selectByOrgCode(String amosOrgCode); // List<CheckModel> selectByOrgCode(String amosOrgCode);
IPage<CheckModel> selectByOrgCode(int current, int size, String amosOrgCode); IPage<CheckModel> selectByOrgCode(int current, int size, String amosOrgCode);
List<CheckModel> selectByOrgCode(String amosOrgCode);
/** /**
* 查询最后一次校验模型 * 查询最后一次校验模型
* @return 模型obj * @return 模型obj
*/ */
CheckModel selectOneByDate(String amosOrgCode); CheckModel selectOneByDate(String amosOrgCode);
/**
* 校验机构下全部模型
* @param amosOrgCode 机构code
*/
void checkAllMode(String amosOrgCode);
/**
* 校验单个模型
* @param modelId 模型id
*/
void checkSingleMode(String modelId);
/**
* 根据机构code和模型名称查询模型对象
* @param modelName 模型名称
* @param amosOrgCode 机构code
* @return 模型对象
*/
CheckModel selectCheckModelByNameCode(String modelName, String amosOrgCode);
} }
...@@ -20,11 +20,32 @@ public interface CheckResultService extends IService<CheckResult> { ...@@ -20,11 +20,32 @@ public interface CheckResultService extends IService<CheckResult> {
List<CheckResultDto> selectTotal(String modelId, String amosOrgCode); List<CheckResultDto> selectTotal(String modelId, String amosOrgCode);
List<ModelTreeDto> test(); List<CheckResultDto> selectStatistion(String batchNo,String amosOrgCode);
ModelTreeDto treeTwo(String tableId); List<CheckResultDto> selectDetails(String batchNo,Integer modelId);
String select(String amosOrgCode,String userName);
/**
* 根据机构code获取模型数据树
* @param amosOrgCode 机构code
* @return 树
*/
List<ModelTreeDto> getAllModelDataTree(String amosOrgCode);
/**
* 根据模型id获取模型数据树
* @param modelId 模型id
* @return 树
*/
List<ModelTreeDto> getModelDataTree(String modelId);
/**
* 根据批次号查询存储属性个数
* @param batchNo 批次号
* @return 属性个数
*/
Integer selectItemCount(String batchNo);
} }
package com.yeejoin.amos.boot.module.tdc.api.utils;
import java.util.UUID;
public class UUIDUtils {
public static String getUUID(){
return UUID.randomUUID().toString().replace("-","");
}
public static Integer getUUIDInOrderId(){
Integer orderId=UUID.randomUUID().toString().hashCode();
orderId = orderId < 0 ? -orderId : orderId; //String.hashCode() 值会为空
return orderId;
}
public static void main(String[] args){
for (int i = 0; i<100; i++) {
System.out.println(UUIDUtils.getUUIDInOrderId());
}
}
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.tdc.api.utils;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.github.pagehelper.util.StringUtil;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import sun.misc.BASE64Encoder;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Properties;
public class WordPowerUtils {
private static String fileUploadDir;
private Configuration configuration;
private static WordPowerUtils wordTemplateUtils;
private WordPowerUtils() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
public static synchronized WordPowerUtils getInstance() {
if (wordTemplateUtils == null) {
//添加你的内容
Properties props;
try {
props = PropertiesLoaderUtils.loadAllProperties("application-dev.properties");
fileUploadDir = (String) props.get("file.uploadUrl");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
wordTemplateUtils = new WordPowerUtils();
}
return wordTemplateUtils;
}
public void exportMillCertificateWord(HttpServletRequest request, HttpServletResponse response, Map map,
String title, String ftlFile) throws IOException {
configuration.setClassForTemplateLoading(this.getClass(), "/ftl");
Template freemarkerTemplate = configuration.getTemplate(ftlFile, "UTF-8");
File file = null;
InputStream fin = null;
ServletOutputStream out = null;
try {
// 调用工具类的createDoc方法生成Word文档
file = createDoc(map, freemarkerTemplate);
fin = new FileInputStream(file);
response.setCharacterEncoding("utf-8");
response.setContentType("application/msword");
// 设置浏览器以下载的方式处理该文件名
String fileName = (StringUtil.isNotEmpty(title) ? title : UUIDUtils.getUUID()) + ".doc";
response.setHeader("Content-Disposition",
"attachment;filename=".concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
out = response.getOutputStream();
// 缓冲区
byte[] buffer = new byte[512];
int bytesToRead = -1;
// 通过循环将读入的Word文件的内容输出到浏览器中
while ((bytesToRead = fin.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} finally {
if (fin != null) {
fin.close();
}
if (out != null) {
out.close();
}
if (file != null) {
file.delete();
}// 删除临时文件
}
}
public File getWordFileItem(Map map, String title, String ftlFile) throws IOException {
configuration.setClassForTemplateLoading(this.getClass(), "/ftl");
Template freemarkerTemplate = configuration.getTemplate(ftlFile, "UTF-8");
File file = null;
File filepdf = new File("sellPlan.pdf");
InputStream fin = null;
OutputStream os = null;
try {
// 调用工具类的createDoc方法生成Word文档
file = createDoc(map, freemarkerTemplate);
fin = new FileInputStream(file);
os = new FileOutputStream(filepdf);
wordTopdfByAspose(fin, os);
return filepdf;
} finally {
if (fin != null) {
fin.close();
}
if (os != null) {
os.close();
}
if (file != null) {
file.delete();
}// 删除临时文件
}
}
private static File createDoc(Map<?, ?> dataMap, Template template) {
String name = "sellPlan.doc";
File f = new File(name);
Template t = template;
try {
// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
t.process(dataMap, w);
w.close();
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
return f;
}
public boolean wordTopdfByAspose(InputStream inputStream, OutputStream outputStream) {
// 验证License 若不验证则转化出的pdf文档会有水印产生
if (!getLicense()) {
return false;
}
try {
// 将源文件保存在com.aspose.words.Document中,具体的转换格式依靠里面的save方法
com.aspose.words.Document doc = new com.aspose.words.Document(inputStream);
// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换
doc.save(outputStream, SaveFormat.PDF);
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
// 官方文档的要求 无需理会
public static boolean getLicense() {
boolean result = false;
try {
String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";
ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());
License aposeLic = new License();
aposeLic.setLicense(is);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 获得图片的base64码
* @param src 图片路径
* @return String
*/
@SuppressWarnings("deprecation")
public String getImageBase(String src) {
if (!StringUtil.isNotEmpty(src)) {
return "";
}
src = src.replaceAll("\\.\\.", "");
String fileName = fileUploadDir + src;
File file = new File(fileName);
if (!file.exists()) {
return "";
}
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
}
...@@ -20,6 +20,6 @@ public class SubjectTreeVo { ...@@ -20,6 +20,6 @@ public class SubjectTreeVo {
private String key; private String key;
private List<TableColumnsVo> columns; private List<TableColumnsVo> tableCols;
} }
...@@ -12,8 +12,22 @@ ...@@ -12,8 +12,22 @@
</select> </select>
<select id="getTable" resultType="Map" > <select id="getTables" resultType="java.util.Map" >
SELECT a.* FROM ${tableName} AS a ORDER BY a.date DESC LIMIT 1 SELECT a.* FROM ${tableName} AS a where a.org_code = #{amosOrgCode} ORDER BY a.date DESC LIMIT 1
</select>
<select id="selectStatistion" resultType="com.yeejoin.amos.boot.module.tdc.api.dto.CheckResultDto">
SELECT model_id, amos_org_code, amos_org_name,batch_no,model_name, count(1) as `all_total`, COUNT(CASE WHEN (check_item_result=1) THEN check_item_result END) AS `fail_total`
FROM tdc_check_result WHERE batch_no = #{batchNo} and amos_org_code = #{amosOrgCode} GROUP BY model_id;
</select>
<select id="selectDetails" resultType="com.yeejoin.amos.boot.module.tdc.api.dto.CheckResultDto">
select check_item_label,check_item_value,check_explain,model_id,model_name,
case when check_item_result = '0' then '合格' else '不合格' end as is_right from tdc_check_result WHERE batch_no = #{batchNo} and model_id = #{modelId} ;
</select>
<select id="getOne" resultType="com.yeejoin.amos.boot.module.tdc.api.dto.CheckResultDto">
select amos_org_name,amos_org_code,batch_no,model_id from tdc_check_result where amos_org_code = #{amosOrgCode} group by model_name ORDER BY check_date desc limit 0,1;
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -58,24 +58,4 @@ public class AmosTdcApplication { ...@@ -58,24 +58,4 @@ public class AmosTdcApplication {
+ "Application Amos-Biz-Boot is running! Access URLs:\n\t" + "Swagger文档: \thttp://" + ip + ":" + port + "Application Amos-Biz-Boot is running! Access URLs:\n\t" + "Swagger文档: \thttp://" + ip + ":" + port
+ path + "/doc.html\n" + "----------------------------------------------------------"); + path + "/doc.html\n" + "----------------------------------------------------------");
} }
// /**
// * 初始化MQTT
// *
// * @throws MqttException
// */
// @Bean
// public void initMqtt() throws MqttException {
// emqKeeper.getMqttClient().subscribe("/idx/idx_biz_carcyl_unit_inspect", 1, carcylUnitInspectMqTtlListener);
// emqKeeper.getMqttClient().subscribe("/tm/tz_base_enterprise_info", 1, baseEnterpriseMqTtlListener);
// emqKeeper.getMqttClient().subscribe("/tz/privilege_company_add_update",1, privilegeCompanyUpdateAddListener);
// emqKeeper.getMqttClient().subscribe("/tz/privilege_company_delete",1, privilegeCompanyDeleteListener);
//// emqKeeper.getMqttClient().subscribe("topic_mqtt_exam", 1, examMqTtlListener);
//// emqKeeper.getMqttClient().subscribe("topic_mqtt_exam_record", 1, examMqTtRecordListener);
// }
// @Bean
// public void initToken() {
// startPlatformTokenService.getToken();
// }
} }
package com.yeejoin.amos.boot.module.tdc.biz.action;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yeejoin.amos.boot.module.tdc.api.entity.CheckModel;
import com.yeejoin.amos.boot.module.tdc.api.entity.CheckResult;
import com.yeejoin.amos.boot.module.tdc.api.feign.IdxFeignService;
import com.yeejoin.amos.boot.module.tdc.api.service.CheckModelService;
import com.yeejoin.amos.boot.module.tdc.api.service.CheckReportService;
import com.yeejoin.amos.boot.module.tdc.api.service.CheckResultService;
import com.yeejoin.amos.boot.module.tdc.api.vo.SubjectTreeVo;
import com.yeejoin.amos.boot.module.tdc.biz.action.model.IdxProjectModel;
import com.yeejoin.amos.component.rule.MethodParam;
import com.yeejoin.amos.component.rule.RuleActionBean;
import com.yeejoin.amos.component.rule.RuleMethod;
import com.yeejoin.amos.component.rule.config.RuleConfig;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author DELL
*/
@Component
@RuleActionBean(beanLabel = "动态预案")
public class CheckModelAction {
@Autowired
CheckReportService checkReportService;
@Autowired
CheckModelService checkModelService;
@Autowired
CheckResultService checkResultService;
@Autowired
IdxFeignService idxFeignService;
@Autowired
private EmqKeeper emqKeeper;
@Value("${mqtt.topic.check.complete}")
private String checkComplete;
@RuleMethod(methodLabel = "更新检查项结果", project = "保存模型检查项结果")
public void saveCheckItemResult(@MethodParam(paramLabel = "结果") String result,
@MethodParam(paramLabel = "规范标签内容") String checkExplain,
@MethodParam(paramLabel = "校验项") String checkItem,
@MethodParam(paramLabel = "校验项值") String checkItemValue,
@MethodParam(paramLabel = "校验项标准值") String checkItemRealValue,
@MethodParam(paramLabel = "对象") IdxProjectModel idxProjectModel) {
// 1. 检验结果入库
CheckResult checkResult = new CheckResult();
Map propertyValues = idxProjectModel.getPropertyValues();
String batchNo = String.valueOf(propertyValues.get("batch_no"));
Integer checkType = Integer.valueOf(String.valueOf(propertyValues.get("checkType")));
String orgCode = String.valueOf(propertyValues.get("org_code"));
String itemName = idxProjectModel.getItemName();
// 获取模型
CheckModel checkModel = checkModelService.selectCheckModelByNameCode(itemName, orgCode);
if (ObjectUtils.isEmpty(checkModel)) {
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")));
}
}
checkResult.setBatchNo(StringUtils.isNotEmpty(batchNo) ? batchNo : String.valueOf(propertyValues.get("id")));
checkResult.setCheckItemResult(result);
checkResult.setCheckExplain(checkExplain);
checkResult.setCheckItem(checkItem);
checkResult.setCheckItemValue(checkItemValue);
checkResult.setModelId(String.valueOf(checkModel.getSequenceNbr()));
checkResult.setAmosOrgCode(checkModel.getAmosOrgCode());
checkResult.setAmosOrgName(checkModel.getAmosOrgName());
checkResult.setCheckDate(new Date());
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());
} else if (checkType == 0) {
// 2.1 全站校验
List<CheckModel> checkModels = checkModelService.selectByOrgCode(orgCode);
int sum = checkModels.stream().mapToInt(CheckModel::getCheckItemAmount).sum();
sendWebMessage(batchNo, sum);
}
}
// else {
// // 指标填报完自动调用,暂时不需要推送前端
// String number = ObjectUtils.isNotEmpty(checkType) ? batchNo : String.valueOf(propertyValues.get("id"));
// Integer itemCount = checkResultService.selectItemCount(number);
// List property = projectModel.getPropertys();
// if (itemCount == property.size()) {
// // 所有属性已全部入库,给前端发送消息
// }
// }
}
private void sendWebMessage(String batchNo, Integer itemSize) {
Integer itemCount = checkResultService.selectItemCount(batchNo);
if (itemCount.equals(itemSize)) {
// 所有属性已全部入库,给前端发送消息
HashMap<String, Object> map = new HashMap<>();
map.put("itemCount", itemCount);
String json=JSONObject.toJSONString(map, SerializerFeature.PrettyFormat,
SerializerFeature.WriteMapNullValue);
try {
emqKeeper.getMqttClient().publish(checkComplete, json.getBytes(), RuleConfig.DEFAULT_QOS, false);
} catch (MqttException e) {
e.printStackTrace();
}
// 全站校验生成报告
}
}
}
package com.yeejoin.amos.boot.module.tdc.biz.action.model; package com.yeejoin.amos.boot.module.tdc.biz.action.model;
import com.yeejoin.amos.component.rule.Label;
import com.yeejoin.amos.component.rule.RuleFact; import com.yeejoin.amos.component.rule.RuleFact;
import liquibase.pro.packaged.L;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* @author DELL * @author DELL
*/ */
@RuleFact(value = "指标",project = "三维校验") @RuleFact(value = "指标",project = "三维校验cs")
@Data @Data
public class IdxProjectModel { public class IdxProjectModel implements Serializable {
/**
* 规则项目id
*/
private String projectSeq;
private static final long serialVersionUID = -8955054152867167436L;
/** /**
* 规则id * 规则项目id
*/
private String ruleSeq;
/**
* 知识包id
*/ */
private String packageId; // private String projectSeq;
//
// /**
// * 规则id
// */
// private String ruleSeq;
//
// /**
// * 知识包id
// */
// private String packageId;
/** /**
* 项目名称 * 项目名称
*/ */
private String projectName; // private String projectName;
/** /**
* 主题名称 * 主题名称
*/ */
@Label("主题名称")
private String itemName; private String itemName;
/** /**
* 属性集合 * 属性集合
*/ */
private List propertys; @Label("属性集合")
private List<Map<String, Object>> propertys;
/** /**
* 变量属性值 * 变量属性值
*/ */
private Map propertyValues; @Label("变量属性值")
Map<String, Object> propertyValues;
} }
...@@ -47,4 +47,23 @@ public class CheckModelController { ...@@ -47,4 +47,23 @@ public class CheckModelController {
return ResponseHelper.buildResponse(checkModelService.selectOneByDate(amosOrgCode)); return ResponseHelper.buildResponse(checkModelService.selectOneByDate(amosOrgCode));
} }
/**
* 点击全站校验
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/CheckAllModel/{amosOrgCode}")
@ApiOperation(httpMethod = "GET",value = "查询最后一次校验模型", notes = "查询最后一次校验模型")
public void CheckAllModel(@PathVariable(value = "amosOrgCode") String amosOrgCode) {
checkModelService.checkAllMode(amosOrgCode);
}
/**
* 点击单独模型校验
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/checkSingleMode/{modelId}")
@ApiOperation(httpMethod = "GET",value = "查询最后一次校验模型", notes = "查询最后一次校验模型")
public void checkSingleMode(@PathVariable(value = "modelId") String modelId) {
checkModelService.checkSingleMode(modelId);
}
} }
...@@ -6,6 +6,7 @@ import com.yeejoin.amos.boot.module.tdc.api.dto.CheckResultDto; ...@@ -6,6 +6,7 @@ import com.yeejoin.amos.boot.module.tdc.api.dto.CheckResultDto;
import com.yeejoin.amos.boot.module.tdc.api.dto.ModelTreeDto; import com.yeejoin.amos.boot.module.tdc.api.dto.ModelTreeDto;
import com.yeejoin.amos.boot.module.tdc.api.entity.CheckResult; import com.yeejoin.amos.boot.module.tdc.api.entity.CheckResult;
import com.yeejoin.amos.boot.module.tdc.api.service.CheckResultService; import com.yeejoin.amos.boot.module.tdc.api.service.CheckResultService;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -62,25 +63,41 @@ public class CheckResultController extends BaseController { ...@@ -62,25 +63,41 @@ public class CheckResultController extends BaseController {
return ResponseHelper.buildResponse(checkResultService.selectTotal(modelId, amosOrgCode)); return ResponseHelper.buildResponse(checkResultService.selectTotal(modelId, amosOrgCode));
} }
/**
* 根据amosOrgCode、modelId查询不合格项
* return
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/selectCheckResult/test") @GetMapping(value = "/getAllModelDataTree/{amosOrgCode}")
@ApiOperation(httpMethod = "GET",value = "查询最后一次校验模型", notes = "查询最后一次校验模型") @ApiOperation(httpMethod = "GET",value = "获取机构下模型树", notes = "根据机构code获取模型树")
public ResponseModel<List<ModelTreeDto>> test() { public ResponseModel<List<ModelTreeDto>> getAllModelDataTree(@PathVariable(value = "amosOrgCode") String amosOrgCode) {
return ResponseHelper.buildResponse(checkResultService.test()); return ResponseHelper.buildResponse(checkResultService.getAllModelDataTree(amosOrgCode));
} }
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/selectCheckResult/TreeTwo") @GetMapping(value = "/getModelDataTree/{modelId}")
@ApiOperation(httpMethod = "GET",value = "查询最后一次校验模型", notes = "查询最后一次校验模型") @ApiOperation(httpMethod = "GET",value = "获取单独模型树", notes = "根据模型id获取模型树")
public ResponseModel<ModelTreeDto> treeTwo(String tableId) { public ResponseModel<List<ModelTreeDto>> getModelDataTree(@PathVariable(value = "modelId") String modelId) {
return ResponseHelper.buildResponse(checkResultService.getModelDataTree(modelId));
}
return ResponseHelper.buildResponse(checkResultService.treeTwo(tableId)); /**
* cs
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/selectDetails/")
@ApiOperation(httpMethod = "GET", value = "result", notes = "result")
public ResponseModel<List<CheckResultDto>> selectDetails( String batchNo,int modelId) {
return ResponseHelper.buildResponse(checkResultService.selectDetails(batchNo,modelId));
}
/**
* cs
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/select")
@ApiOperation(httpMethod = "GET", value = "result", notes = "result")
public ResponseModel<String> select(String amosOrgCode) {
AgencyUserModel user = getUserInfo();
return ResponseHelper.buildResponse(checkResultService.select(amosOrgCode,user.getUserName()));
} }
......
package com.yeejoin.amos.boot.module.tdc.biz.service.impl; package com.yeejoin.amos.boot.module.tdc.biz.service.impl;
import com.alibaba.excel.util.CollectionUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yeejoin.amos.boot.module.tdc.api.entity.CheckModel; import com.yeejoin.amos.boot.module.tdc.api.entity.CheckModel;
import com.yeejoin.amos.boot.module.tdc.api.entity.CheckResult; import com.yeejoin.amos.boot.module.tdc.api.entity.CheckResult;
import com.yeejoin.amos.boot.module.tdc.api.feign.IdxFeignService;
import com.yeejoin.amos.boot.module.tdc.api.mapper.CheckModelMapper; import com.yeejoin.amos.boot.module.tdc.api.mapper.CheckModelMapper;
import com.yeejoin.amos.boot.module.tdc.api.mapper.CheckResultMapper;
import com.yeejoin.amos.boot.module.tdc.api.service.CheckModelService; import com.yeejoin.amos.boot.module.tdc.api.service.CheckModelService;
import com.yeejoin.amos.boot.module.tdc.api.vo.SubjectTreeVo;
import com.yeejoin.amos.boot.module.tdc.api.vo.TableColumnsVo;
import com.yeejoin.amos.boot.module.tdc.biz.action.model.IdxProjectModel;
import com.yeejoin.amos.component.rule.RuleTrigger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.*;
/** /**
* @author xxz * @author xxz
...@@ -16,6 +30,15 @@ import org.springframework.stereotype.Service; ...@@ -16,6 +30,15 @@ import org.springframework.stereotype.Service;
@Service @Service
public class CheckModelImpl extends ServiceImpl<CheckModelMapper, CheckModel> implements CheckModelService { public class CheckModelImpl extends ServiceImpl<CheckModelMapper, CheckModel> implements CheckModelService {
@Autowired
CheckResultMapper checkResultMapper;
@Autowired
IdxFeignService idxFeignService;
@Autowired
RuleTrigger ruleTrigger;
@Override @Override
public IPage<CheckModel> selectByOrgCode(int current, int size, String amosOrgCode) { public IPage<CheckModel> selectByOrgCode(int current, int size, String amosOrgCode) {
Page page = new Page(current,size); Page page = new Page(current,size);
...@@ -26,6 +49,13 @@ public class CheckModelImpl extends ServiceImpl<CheckModelMapper, CheckModel> im ...@@ -26,6 +49,13 @@ public class CheckModelImpl extends ServiceImpl<CheckModelMapper, CheckModel> im
} }
@Override @Override
public List<CheckModel> selectByOrgCode(String amosOrgCode) {
LambdaQueryWrapper<CheckModel> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CheckModel::getAmosOrgCode, amosOrgCode);
return baseMapper.selectList(wrapper);
}
@Override
public CheckModel selectOneByDate(String amosOrgCode) { public CheckModel selectOneByDate(String amosOrgCode) {
LambdaQueryWrapper<CheckModel> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CheckModel> wrapper = new LambdaQueryWrapper<>();
wrapper wrapper
...@@ -35,5 +65,78 @@ public class CheckModelImpl extends ServiceImpl<CheckModelMapper, CheckModel> im ...@@ -35,5 +65,78 @@ public class CheckModelImpl extends ServiceImpl<CheckModelMapper, CheckModel> im
.last("limit 1"); .last("limit 1");
return baseMapper.selectOne(wrapper); return baseMapper.selectOne(wrapper);
} }
@Override
public void checkAllMode(String amosOrgCode) {
LambdaQueryWrapper<CheckModel> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CheckModel::getAmosOrgCode, amosOrgCode);
List<CheckModel> checkModels = this.baseMapper.selectList(wrapper);
String batchNo = UUID.randomUUID().toString();
if (!CollectionUtils.isEmpty(checkModels)) {
checkModels.forEach(checkModel -> {
checkModelRule(checkModel, 0, batchNo, amosOrgCode);
});
}
}
@Override
public void checkSingleMode(String modelId) {
LambdaQueryWrapper<CheckModel> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CheckModel::getSequenceNbr, modelId);
CheckModel checkModel = this.baseMapper.selectOne(wrapper);
if (!ObjectUtils.isEmpty(checkModel)) {
// 调用规则校验模型
String batchNo = UUID.randomUUID().toString();
checkModelRule(checkModel, 1, batchNo, checkModel.getAmosOrgCode());
}
}
@Override
public CheckModel selectCheckModelByNameCode(String modelName, String amosOrgCode) {
LambdaQueryWrapper<CheckModel> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CheckModel::getAmosOrgCode, amosOrgCode);
wrapper.eq(CheckModel::getModelName, modelName);
return this.baseMapper.selectOne(wrapper);
}
private void checkModelRule(CheckModel checkModel, int checkType, String batchNo, String amosOrgCode) {
IdxProjectModel idxProjectModel = new IdxProjectModel();
// 查询表最新一条数据
String idxTableName = checkModel.getIdxTableName();
Map<String, Object> map = checkResultMapper.getTables(idxTableName, amosOrgCode);
// Map<String, Object> map = new HashMap<>();
if (ObjectUtils.isEmpty(map)) {
new RuntimeException("暂无填报数据");
}
map.put("batch_no", batchNo);
map.put("checkType", checkType);
// 查询表所有字段
ResponseModel<JSONObject> model = idxFeignService.queryByTableId(checkModel.getTableId());
JSONObject result = model.getResult();
SubjectTreeVo subjectTreeVo = JSON.parseObject(JSON.toJSONString(result), SubjectTreeVo.class);
List<TableColumnsVo> columns = subjectTreeVo.getTableCols();
List<Map<String, Object>> list = new ArrayList<>();
columns.forEach(tableColumnsVo -> {
Map<String, Object> itemMap = new HashMap<>(3);
itemMap.put("name", tableColumnsVo.getColumnName());
itemMap.put("title", tableColumnsVo.getName());
itemMap.put("type", tableColumnsVo.getColumnType());
list.add(itemMap);
});
idxProjectModel.setPropertys(list);
idxProjectModel.setItemName(checkModel.getModelName());
idxProjectModel.setPropertyValues(map);
// 调用规则校验模型
try {
// 没有配决策流,processIds传null即可
ruleTrigger.publish(idxProjectModel, checkModel.getModelRule(), null);
} catch (Exception e) {
e.printStackTrace();
}
}
} }
...@@ -22,7 +22,7 @@ public class CheckReportImpl extends ServiceImpl<CheckReportMapper, CheckReport> ...@@ -22,7 +22,7 @@ public class CheckReportImpl extends ServiceImpl<CheckReportMapper, CheckReport>
@Override @Override
public IPage<CheckReport> selectAll(int current,int size,String amosOrgCode) { public IPage<CheckReport> selectAll(int current,int size,String amosOrgCode) {
Page page = new Page(current,size); Page<CheckReport> page = new Page<>(current,size);
if(ValidationUtil.isEmpty(amosOrgCode)){ if(ValidationUtil.isEmpty(amosOrgCode)){
return this.page(page); return this.page(page);
...@@ -33,6 +33,4 @@ public class CheckReportImpl extends ServiceImpl<CheckReportMapper, CheckReport> ...@@ -33,6 +33,4 @@ public class CheckReportImpl extends ServiceImpl<CheckReportMapper, CheckReport>
} }
} }
} }
spring.application.name=TDC-LM spring.application.name=AMOS-TDC
server.servlet.context-path=/tdc server.servlet.context-path=/tdc
server.port=13000 server.port=13000
...@@ -40,3 +40,6 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -40,3 +40,6 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## redis失效时间 ## redis失效时间
redis.cache.failure.time=10800 redis.cache.failure.time=10800
#校验完成发送消息
mqtt.topic.check.complete=tdc/check/complete
This source diff could not be displayed because it is too large. You can view the blob instead.
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