Commit b0a6ef0e authored by tianbo's avatar tianbo

Merge remote-tracking branch 'origin/develop_tzs_bugfix' into develop_tzs_register

# Conflicts: # amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/controller/DataHandlerController.java # amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/service/impl/DataHandlerServiceImpl.java # amos-boot-system-tzs/amos-boot-module-jg/amos-boot-module-jg-biz/src/main/java/com/yeejoin/amos/boot/module/jg/biz/service/impl/SafetyProblemTracingServiceImpl.java
parents bfaa0b55 58b6f1d2
package com.yeejoin.amos.boot.module.common.biz.service.impl;
import org.apache.commons.lang.ArrayUtils;
import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.core.TimeValue;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.Scroll;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
@Component
public class EsSearchServiceImpl {
final
RestHighLevelClient restHighLevelClient;
/**
* 批次大小
*/
private static final int SIZE = 5000;
/**
* 滚动时间间隔
*/
private static final long SCROLL_TIMEOUT = 5;
public EsSearchServiceImpl(RestHighLevelClient restHighLevelClient) {
this.restHighLevelClient = restHighLevelClient;
}
/**
* 构建SearchResponse - 批量处理版本
*
* @param indices 索引
* @param query queryBuilder
* @param batchSize 批次大小
* @param consumer 处理每批次数据的消费者
* @throws Exception e
*/
public void searchResponseInBatch(String indices, QueryBuilder query, int batchSize, Consumer<List<SearchHit>> consumer) throws Exception {
SearchRequest request = new SearchRequest(indices);
Scroll scroll = new Scroll(TimeValue.timeValueMinutes(SCROLL_TIMEOUT));
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(query);
int searchSize = ValidationUtil.isEmpty(batchSize) ? SIZE : batchSize;
sourceBuilder.size(searchSize);
request.scroll(scroll);
request.source(sourceBuilder);
List<String> scrollIdList = new ArrayList<>();
SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
String scrollId = searchResponse.getScrollId();
SearchHit[] hits = searchResponse.getHits().getHits();
// 只有当scrollId不为空且不在列表中时才添加
if (scrollId != null && !scrollIdList.contains(scrollId)) {
scrollIdList.add(scrollId);
}
try {
while (ArrayUtils.isNotEmpty(hits)) {
// 处理当前批次数据
consumer.accept(Arrays.asList(hits));
if (hits.length < searchSize) {
break;
}
SearchScrollRequest searchScrollRequest = new SearchScrollRequest(scrollId);
searchScrollRequest.scroll(scroll);
SearchResponse searchScrollResponse = restHighLevelClient.scroll(searchScrollRequest, RequestOptions.DEFAULT);
scrollId = searchScrollResponse.getScrollId();
hits = searchScrollResponse.getHits().getHits();
// 只有当scrollId不为空且不在列表中时才添加
if (scrollId != null && !scrollIdList.contains(scrollId)) {
scrollIdList.add(scrollId);
}
}
} finally {
// 只有当scrollIdList不为空时才执行清理操作
if (!scrollIdList.isEmpty()) {
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.setScrollIds(scrollIdList);
restHighLevelClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
}
}
}
/**
* 构建SearchResponse
*
* @param indices 索引
* @param query queryBuilder
* @param fun 返回函数
* @param <T> 返回类型
* @return List, 可以使用fun转换为T结果
* @throws Exception e
*/
public <T> List<T> searchResponse(String indices, QueryBuilder query, Function<SearchHit, T> fun) throws Exception {
List<T> result = new ArrayList<>();
// 复用批量处理方法,将结果收集到列表中
searchResponseInBatch(indices, query, SIZE, hits -> {
for (SearchHit hit : hits) {
result.add(fun.apply(hit));
}
});
return result;
}
}
......@@ -336,5 +336,13 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
*/
@Select("SELECT count(1) from tzs_user_equip where user_seq = #{userSeq}")
Integer queryUserBindEquNum(@Param("userSeq") String userSeq);
/**
* 根据设备RECORD查询最近一次安装告知或使用登记或车用气瓶登记的接收机构代码
*
* @param record
* @return
*/
List<Map<String, String>> queryRecentlyReceiveCompanyCode(String record);
}
......@@ -3148,4 +3148,34 @@
ORDER BY
tjri.rec_date ASC
</select>
<select id="queryRecentlyReceiveCompanyCode" resultType="java.util.Map">
SELECT * FROM (
SELECT n.receive_org_credit_code AS receiveCompanyCode, n.handle_date AS passedDate
FROM tzs_jg_installation_notice_eq eq
LEFT JOIN tzs_jg_installation_notice n ON n.sequence_nbr = eq.equip_transfer_id
WHERE eq.equ_id = #{record}
ORDER BY n.handle_date DESC
) t1
UNION ALL
SELECT * FROM (
SELECT n.receive_company_code AS receiveCompanyCode, n.audit_pass_date AS passedDate
FROM tzs_jg_use_registration_eq eq
LEFT JOIN tzs_jg_use_registration n ON n.sequence_nbr = eq.equip_transfer_id
WHERE eq.equ_id = #{record}
ORDER BY n.audit_pass_date DESC
) t2
UNION ALL
SELECT * FROM (
SELECT n.receive_company_code AS receiveCompanyCode, n.audit_pass_date AS passedDate
FROM tzs_jg_vehicle_information_eq eq
LEFT JOIN tzs_jg_vehicle_information n ON n.sequence_nbr = eq.vehicle_id
WHERE eq.equ_id = #{record}
ORDER BY n.audit_pass_date DESC
) t3
</select>
</mapper>
......@@ -1144,7 +1144,6 @@
<if test="jsonObject.DATA_SOURCE == null or jsonObject.DATA_SOURCE == ''">
and ui."DATA_SOURCE" like 'jg%'
</if>
-- 保证使用单位选择设备时(record为null) 能选择到本单位的设备 并且 监管单位在查看时(record 不为null)可以匹配到所有的设备
<if test="jsonObject.useUnitCreditCode != null and jsonObject.useUnitCreditCode != '' and jsonObject.record == null">
and ui."USE_UNIT_CREDIT_CODE" = #{jsonObject.useUnitCreditCode}
</if>
......@@ -1291,7 +1290,6 @@
</otherwise>
</choose>
</if>
-- 保证使用单位选择设备时(record为null) 能选择到本单位的设备 并且 监管单位在查看时(record 不为null)可以匹配到所有的设备
<if test="jsonObject.useUnitCreditCode != null and jsonObject.useUnitCreditCode != '' and jsonObject.record == null">
and ui."USE_UNIT_CREDIT_CODE" = #{jsonObject.useUnitCreditCode}
-- 限制 没有做过使用登记的
......@@ -1348,7 +1346,6 @@
<if test="jsonObject.informationManageCode != null and jsonObject.informationManageCode != ''">
and oi.INFORMATION_MANAGE_CODE like concat('%',#{jsonObject.informationManageCode},'%')
</if>
-- 保证使用单位选择设备时(record为null) 能选择到本单位的设备 并且 监管单位在查看时(record 不为null)可以匹配到所有的设备
<if test="jsonObject.useUnitCreditCode != null and jsonObject.useUnitCreditCode != '' and jsonObject.record == null">
and ui."USE_UNIT_CREDIT_CODE" = #{jsonObject.useUnitCreditCode}
</if>
......@@ -1400,7 +1397,6 @@
<if test="jsonObject.informationManageCode != null and jsonObject.informationManageCode != ''">
and oi.INFORMATION_MANAGE_CODE like concat('%',#{jsonObject.informationManageCode},'%')
</if>
-- 保证使用单位选择设备时(record为null) 能选择到本单位的设备 并且 监管单位在查看时(record 不为null)可以匹配到所有的设备
<if test="jsonObject.useUnitCreditCode != null and jsonObject.useUnitCreditCode != '' and jsonObject.record == null">
and ui."USE_UNIT_CREDIT_CODE" = #{jsonObject.useUnitCreditCode}
</if>
......@@ -1607,7 +1603,7 @@
A.audit_status LIKE'%已完成%'
AND b.supervise_org_code LIKE concat ( #{orgCode}, '%' )
AND A.apply_type = 'SB_TY'
AND A.rec_date > CURDATE ( ) - 30
AND A.audit_pass_date > CURDATE ( ) - 30
)
)
GROUP BY
......@@ -1636,7 +1632,7 @@
A.audit_status LIKE'%已完成%'
AND b.supervise_org_code LIKE concat ( #{orgCode}, '%' )
AND A.cancel_type = #{cancelType}
AND A.rec_date > CURDATE ( ) - 30
AND A.audit_pass_date > CURDATE ( ) - 30
)
)
GROUP BY
......
......@@ -109,7 +109,8 @@
tjvi.cancel_reason as cancelReason,
tjvi.reg_type as regType,
tjvi.org_branch_code as orgBranchCode,
tjvi.org_branch_name as orgBranchName
tjvi.org_branch_name as orgBranchName,
tjvi.identification_code as identificationCode
from tzs_jg_vehicle_information tjvi
</sql>
......
......@@ -103,16 +103,17 @@ public class PressureVesselListener extends AnalysisEventListener<EquipInfoCylin
if ("1".equals(data.getEquCodeType())) {
checkNotBlank(data.getEquCode(), "设备代码不能为空");
String equCode = data.getEquCode();
if (equCode.matches("[a-zA-Z0-9]+")) {
if (equCode.length() <= 17) {
result.append("设备代码不能小于17位");
if (equCode.length() <= 16) {
result.append("设备代码不能小于16位");
}
if (equCode.length() >= 20) {
result.append("设备代码不能大于20位");
}
} else {
result.append("设备代码不能包含特殊字符");
if (equCode.length() >= 22) {
result.append("设备代码不能大于22位");
}
// 去掉设备代码不能有特殊字符校验
// if (equCode.matches("[a-zA-Z0-9]+")) {
// } else {
// result.append("设备代码不能包含特殊字符");
// }
if (equCodeList.contains(data.getEquCode())) {
result.append("设备代码不能重复;");
}
......
......@@ -383,4 +383,11 @@ public class DataHandlerController extends BaseController {
Integer dealNum = dataHandlerService.initTank2Es();
return ResponseHelper.buildResponse(dealNum);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/handleDataQualityScore")
@ApiOperation(httpMethod = "POST", value = "修复es中未正常生成数据等级的数据", notes = "修复es中未正常生成数据等级的数据")
public ResponseModel<String> handleDataQualityScore() {
return ResponseHelper.buildResponse(dataHandlerService.handleDataQualityScore2());
}
}
\ No newline at end of file
......@@ -7,10 +7,7 @@ import com.yeejoin.amos.boot.module.jg.biz.service.impl.JgInstallationNoticeServ
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.component.event.RestEventTrigger;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
......@@ -88,4 +85,17 @@ public class JgInstallationByWorkFlowController {
jgInstallationNoticeServiceImpl.accept(jgInstallationNoticeDto, op);
return ResponseHelper.buildResponse(null);
}
/**
* 处理安装告知流程结束,业务未结束单子问题
* @param applyNo 申请单号
* @return s
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/handleNoticeWrongData")
@ApiOperation(httpMethod = "POST", value = "处理安装告知流程结束,业务未结束单子问题", notes = "处理安装告知流程结束,业务未结束单子问题")
public ResponseModel<Object> handleNoticeWrongData(@RequestParam("applyNo") String applyNo) {
jgInstallationNoticeServiceImpl.handleNoticeWrongData(applyNo);
return ResponseHelper.buildResponse("ok");
}
}
......@@ -155,4 +155,16 @@ public class JgScrapCancelController extends BaseController {
}
/**
* 处理设备报废注销流程结束,业务未结束单子问题
* @param applyNo 申请单号
* @return s
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/handleNoticeWrongData")
@ApiOperation(httpMethod = "POST", value = "处理设备报废注销流程结束,业务未结束单子问题", notes = "处理设备报废注销流程结束,业务未结束单子问题")
public ResponseModel<Object> handleScrapCancelWrongData(@RequestParam("applyNo") String applyNo) {
jgScrapCancelService.handleScrapCancelWrongData(applyNo);
return ResponseHelper.buildResponse("ok");
}
}
......@@ -248,4 +248,19 @@ public class JgVehicleInformationController extends BaseController {
public ResponseModel<Object> saveOrUpdateHisData(@RequestBody JSONObject map) {
return ResponseHelper.buildResponse(jgVehicleInformationServiceImpl.saveOrUpdateHisData(map));
}
/**
* 处理车用气瓶流程结束,业务未结束单子问题
* @param applyNo 申请单号
* @param equDefineCode 设备品种code
* @return s
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/handleVehicleWrongData")
@ApiOperation(httpMethod = "POST", value = "处理车用气瓶流程结束,业务未结束单子问题", notes = "处理车用气瓶流程结束,业务未结束单子问题")
public ResponseModel<Object> handleVehicleWrongData(@RequestParam("applyNo") String applyNo,
@RequestParam("equDefineCode") String equDefineCode) {
jgVehicleInformationServiceImpl.handleVehicleWrongData(applyNo, equDefineCode);
return ResponseHelper.buildResponse("ok");
}
}
......@@ -122,7 +122,8 @@ public class ShCarController extends BaseController {
record.setClaimedFlag("是");
JgUseRegistrationManage manage = jgUseRegistrationManageServiceImpl.getBaseMapper()
.selectOne(new LambdaQueryWrapper<JgUseRegistrationManage>()
.eq(JgUseRegistrationManage::getUseRegistrationCode, record.getUseRegistrationCode()));
.eq(JgUseRegistrationManage::getUseRegistrationCode, record.getUseRegistrationCode())
.eq(JgUseRegistrationManage::getIsDelete, false));
record.setCertificateSeq(manage != null ? String.valueOf(manage.getSequenceNbr()) : null);
} else if ("0".equals(record.getClaimedFlag())) {
record.setClaimedFlag("否");
......
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jg.biz.edit.process.equip;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.collect.Maps;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.entity.TzsBaseEntity;
import com.yeejoin.amos.boot.module.common.api.dao.EsEquipmentDao;
......@@ -17,6 +18,7 @@ import com.yeejoin.amos.boot.module.jg.biz.edit.process.equip.strategy.HandleRes
import com.yeejoin.amos.boot.module.jg.biz.edit.process.equip.strategy.IEquipChangeDataProcessStrategy;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgRegisterInfoServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.*;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquCodeTypeEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -33,10 +35,7 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
/**
* 单个维护设备-策略实现类
......@@ -81,6 +80,8 @@ public class SingleEquipChangeProcess implements IEquipChangeDataProcessStrategy
CommonEquipDataProcessService.castMap2Bean(changeJson, factoryInfoNew);
factoryInfoNew.setSequenceNbr(factoryInfoOld.getSequenceNbr());
beforeCheckForEquCode(factoryInfoOld, registerInfoNew);
IdxBizJgDesignInfo designInfoOld = commonEquipDataProcessService.getIdxBizJgDesignInfoMapper().selectOne(new LambdaQueryWrapper<IdxBizJgDesignInfo>().eq(IdxBizJgDesignInfo::getRecord, record));
IdxBizJgDesignInfo designInfoNew = BeanUtil.copyProperties(designInfoOld, IdxBizJgDesignInfo.class);
CommonEquipDataProcessService.castMap2Bean(changeJson, designInfoNew);
......@@ -298,4 +299,33 @@ public class SingleEquipChangeProcess implements IEquipChangeDataProcessStrategy
return DefaultBizDataChangeHandler.ModelType.singleEquip;
}
private void beforeCheckForEquCode(IdxBizJgFactoryInfo factoryInfoOld, IdxBizJgRegisterInfo registerInfoNew) {
// 如果是用户输入的设备代码,则校验设备代码唯一性
if (EquCodeTypeEnum.INPUT.getCode().equals(registerInfoNew.getEquCodeType())) {
LinkedHashMap<String, String> params = Maps.newLinkedHashMap();
params.put("EQU_CODE", registerInfoNew.getEquCode());
params.put("SEQUENCE_NBR", registerInfoNew.getSequenceNbr());
commonEquipDataProcessService.getJgRegisterInfoService().checkEquCodeUniqueness(params);
}
// 如果生成设备代码类型是系统生成并且没有值,则系统重新生成设备代码
if (EquCodeTypeEnum.SYSTEM_GENERATED.getCode().equals(registerInfoNew.getEquCodeType()) && registerInfoNew.getEquCode() == null) {
String receiveCompanyCode = registerInfoNew.getOrganizationCode();
JSONObject companyTypeObj = commonEquipDataProcessService.getJgRegisterInfoService().getCompanyType();
if (companyTypeObj != null && !"company".equals(companyTypeObj.getString("level"))) {
// 编辑账号为接收机构人员时,receiveCompanyCode取到地市级的接收机构代码
receiveCompanyCode = commonEquipDataProcessService.getJgUseRegistrationService().getCodeUtil().getCityRegionCode(companyTypeObj.getString("companyCode"));
}
if (companyTypeObj != null && "company".equals(companyTypeObj.getString("level"))) {
// 编辑账号企业人员时,receiveCompanyCode最近一次使用登记或者安装告知或者车用气瓶登记单据的接收机构代码
List<Map<String, String>> recentlyReceiveCompanyCode = commonEquipDataProcessService.getCommonMapper().queryRecentlyReceiveCompanyCode(registerInfoNew.getRecord());
if (!recentlyReceiveCompanyCode.isEmpty()) {
// 按passedDate倒叙排序后取最新的一个
recentlyReceiveCompanyCode.sort(Comparator.comparing(map -> map.get("passedDate"), Comparator.reverseOrder()));
receiveCompanyCode = commonEquipDataProcessService.getJgUseRegistrationService().getCodeUtil().getCityRegionCode(recentlyReceiveCompanyCode.get(0).get("receiveCompanyCode"));
}
}
String equCode = commonEquipDataProcessService.getJgRegisterInfoService().getEquCode(registerInfoNew, factoryInfoOld, receiveCompanyCode);
registerInfoNew.setEquCode(equCode);
}
}
}
......@@ -3,7 +3,6 @@ package com.yeejoin.amos.boot.module.jg.biz.event.publisher;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
......
......@@ -26,6 +26,15 @@ public interface TzsServiceFeignClient {
ResponseModel<Map<String, Object>> createCode(@RequestBody Map<String, Object> map);
/**
* 批量创建监管码-设备导入用
*
* @param map 请求体
* @return
*/
@RequestMapping(value = "/equipment-category/createSupervisoryCodeBatch", method = RequestMethod.POST)
ResponseModel<List<Map<String, String>>> createCodeBatch(@RequestBody Map<String, Object> map);
/**
* 创建监管码及96333
*
* @param paramMap 请求体
......
......@@ -3,20 +3,17 @@ package com.yeejoin.amos.boot.module.jg.biz.handler.strategy;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.jg.api.entity.SafetyProblemTracing;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgOtherInfoServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.SafetyProblemTracingServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgOtherInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
......@@ -63,40 +60,17 @@ public class EquipmentProblemStrategy implements ProblemHandleStrategy {
.list().stream().map(SafetyProblemTracing::getSourceId).collect(Collectors.toCollection(HashSet::new));
// 确定无未处理问题的设备列表
List<String> resolvedRecords = equipRecords.stream()
Set<String> resolvedRecords = equipRecords.stream()
.filter(record -> !problemEquipIds.contains(record))
.collect(Collectors.toCollection(ArrayList::new));
.collect(Collectors.toCollection(HashSet::new));
// 更新无未处理问题的设备状态
if (!ValidationUtil.isEmpty(resolvedRecords)) {
log.info("可更新状态的设备record:---> {}", resolvedRecords);
updateOtherTableAndES(resolvedRecords);
safetyProblemTracingService.updateOtherTableAndES(resolvedRecords);
}
log.info("安全追溯-设备问题处理完成!");
}
/**
* 更新Other表和ES状态(提取公共方法)
*/
private void updateOtherTableAndES(List<String> records) {
// 更新Other表
idxBizJgOtherInfoService.lambdaUpdate()
.set(IdxBizJgOtherInfo::getStatus, SafetyProblemStatusEnum.HANDLED.getCode())
.in(IdxBizJgOtherInfo::getRecord, records)
.update();
// 更新ES状态(添加异常处理)
try {
Iterable<ESEquipmentCategoryDto> esEquipmentIter = esEquipmentCategory.findAllById(records);
esEquipmentIter.forEach(dto ->
dto.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getCode()));
esEquipmentCategory.saveAll(esEquipmentIter);
log.info("ES状态更新成功,记录数:{}", records.size());
} catch (Exception e) {
log.error("ES状态更新失败,设备record:{},错误原因:{}", records, e.getMessage(), e);
}
}
}
......@@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.*;
......@@ -59,6 +60,9 @@ public class EquipQualityScoreUpdateService extends DefaultQualityScoreUpdateSer
MatchItemDto matchItemDto = MatchItemDto.builder().build();
IdxBizJgUseInfo useInfo = getIdxBizJgUseInfo(record);
IdxBizJgRegisterInfo registerInfo = getIdxBizJgRegisterInfo(record);
if (ValidationUtil.isEmpty(useInfo) || ValidationUtil.isEmpty(registerInfo)) {
return 0;
}
matchItemDto.setBizType(bizType);
matchItemDto.setEquList(registerInfo.getEquList());
matchItemDto.setEquCategory(registerInfo.getEquCategory());
......@@ -92,6 +96,9 @@ public class EquipQualityScoreUpdateService extends DefaultQualityScoreUpdateSer
}
private void sendDataRefreshMsgEquip(List<String> records) {
if (ValidationUtil.isEmpty(records)) {
return;
}
eventPublisher.publish(new DataRefreshEvent(this, records, DataRefreshEvent.DataType.equipment.name(), DataRefreshEvent.Operation.UPDATE));
}
......
......@@ -4,6 +4,8 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.common.biz.constats.Constants;
import com.yeejoin.amos.boot.module.common.biz.refresh.DataRefreshEvent;
import com.yeejoin.amos.boot.module.jg.api.dto.ReminderItemDto;
......@@ -22,6 +24,7 @@ import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.Collections;
import java.util.Date;
......@@ -45,6 +48,8 @@ public class ProjectQualityScoreUpdateService extends DefaultQualityScoreUpdateS
@Value("${grade.calculation.strategy:MAX_GRADE}")
private String activeStrategy;
private final ESEquipmentCategory equipmentCategoryDao;
@Override
public Boolean support(EquipCreateOrEditEvent.EquipType equipType) {
return EquipCreateOrEditEvent.EquipType.project.equals(equipType);
......@@ -52,6 +57,9 @@ public class ProjectQualityScoreUpdateService extends DefaultQualityScoreUpdateS
private Integer getReminderLevel(String bizType, String projectContraptionId) {
IdxBizJgProjectContraption projectContraption = idxBizJgProjectContraptionService.getById(projectContraptionId);
if (ValidationUtil.isEmpty(projectContraption)) {
return 0;
}
MatchItemDto matchItemDto = MatchItemDto.builder().build();
matchItemDto.setBizType(bizType);
matchItemDto.setEquList(projectContraption.getEquList());
......@@ -73,6 +81,9 @@ public class ProjectQualityScoreUpdateService extends DefaultQualityScoreUpdateS
* @param projectContraptionIds 装置ids
*/
private void sendDataRefreshMsg(Set<String> projectContraptionIds) {
if (ValidationUtil.isEmpty(projectContraptionIds)) {
return;
}
List<IdxBizJgUseInfo> useInfos = idxBizJgUseInfoService.list(new LambdaQueryWrapper<IdxBizJgUseInfo>()
.in(IdxBizJgUseInfo::getProjectContraptionId, projectContraptionIds)
.select(IdxBizJgUseInfo::getRecord));
......@@ -101,6 +112,14 @@ public class ProjectQualityScoreUpdateService extends DefaultQualityScoreUpdateS
updateWrapper2.eq(IdxBizJgUseInfo::getProjectContraptionId, projectContraptionId);
updateWrapper2.set(IdxBizJgUseInfo::getDataQualityScore, level);
idxBizJgUseInfoService.update(updateWrapper2);
List<ESEquipmentCategoryDto> projectEquips = equipmentCategoryDao.findAllByProjectContraptionId(projectContraptionId);
if (!ValidationUtil.isEmpty(projectEquips)) {
for (ESEquipmentCategoryDto esEquipmentCategoryDto : projectEquips) {
esEquipmentCategoryDto.setDataQualityScore(level);
}
equipmentCategoryDao.saveAll(projectEquips);
}
});
}
......
......@@ -3246,7 +3246,7 @@ public class CommonServiceImpl implements ICommonService {
*/
public String castDataQualityScore2Name(String dataQualityScore, Boolean isIntoManagement){
String name = dataDictTypeHandler.handle(DATA_QUALITY_SCORE, dataQualityScore);
return name == null ? (isIntoManagement == null || !isIntoManagement) ? "二类" : "一类" : name;
return name == null ? "三类" : name;
}
public void setDataQualityScore2Json(Map<String, Object> result, String bizId, BusinessTypeEnum businessTypeEnum) {
......
......@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Sets;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
......@@ -27,7 +28,9 @@ import com.yeejoin.amos.boot.module.jg.api.enums.CompanyTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.UseRegisterCancelEquipEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgUseRegistrationEqMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgVehicleInformationMapper;
import com.yeejoin.amos.boot.module.jg.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jg.biz.reminder.core.event.EquipCreateOrEditEvent;
import com.yeejoin.amos.boot.module.jg.biz.service.*;
import com.yeejoin.amos.boot.module.jg.biz.utils.CodeUtil;
import com.yeejoin.amos.boot.module.ymt.api.entity.*;
......@@ -40,7 +43,6 @@ import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
......@@ -148,6 +150,7 @@ public class EquipClaimServiceImpl {
private final CodeUtil codeUtil;
private final TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper;
private final EventPublisher eventPublisher;
/**
* 当前登录人信息
......@@ -261,6 +264,15 @@ public class EquipClaimServiceImpl {
pBuilder.must(QueryBuilders.wildcardQuery(EQU_CODE, "*" + QueryParser.escape(test.toLowerCase()) + "*"));
boolMust.must(pBuilder);
}
// 出厂编号模糊查询
if (!ObjectUtils.isEmpty(params.getString(FACTORY_NUM))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
String factoryNum = params.getString(FACTORY_NUM);
// 使用match_phrase进行精确匹配
pBuilder.must(QueryBuilders.matchPhraseQuery(FACTORY_NUM, factoryNum));
boolMust.must(pBuilder);
}
// 使用单位 名称模糊查询
if (!ObjectUtils.isEmpty(params.getString(USE_UNIT_NAME))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
......@@ -904,6 +916,9 @@ public class EquipClaimServiceImpl {
jgRegisterInfoService.saveOrUpdateEquParams(new LinkedHashMap<>(equipInfo), new LinkedHashMap<>(equipParams), equList, record, timestamp, "edit");
// 更新es
jgRegisterInfoService.checkEsData(record);
eventPublisher.publish(new EquipCreateOrEditEvent(this, BusinessTypeEnum.JG_NEW_EQUIP.name(), Sets.newHashSet(record), EquipCreateOrEditEvent.EquipType.equip));
}
/**
......@@ -1513,6 +1528,8 @@ public class EquipClaimServiceImpl {
}
equipInfo.put(PIPELINE_LIST, pipelineList);
esEquipmentCategory.saveAll(esEquipmentCategoryList);
eventPublisher.publish(new EquipCreateOrEditEvent(this, BusinessTypeEnum.JG_NEW_PROJECT.name(), Sets.newHashSet(projectContraption.getSequenceNbr() + ""), EquipCreateOrEditEvent.EquipType.project));
}
/**
......
......@@ -211,7 +211,7 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
}
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 600000)
public JgChangeRegistrationName save(String submitType, Map<String, JSONObject> jgRegistrationInfoMap) {
try {
ReginParams reginParams = JSON.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
......
......@@ -47,7 +47,7 @@ public class JgResumeInfoServiceImpl extends BaseService<JgResumeInfoDto, JgResu
return info;
})
.collect(Collectors.toList());
this.baseMapper.insertBatchSomeColumn(jgResumeInfoCollection,500);
this.baseMapper.insertBatchSomeColumn(jgResumeInfoCollection,200);
}
/**
......
......@@ -197,7 +197,7 @@ public class JgScrapCancelServiceImpl extends BaseService<JgScrapCancelDto, JgSc
@SuppressWarnings({"Duplicates", "rawtypes"})
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 600000)
public JgScrapCancelDto save(String submitType, Map<String, Object> mapParams) {
try {
ReginParams reginParams = this.getSelectedOrgInfo();
......@@ -865,7 +865,7 @@ public class JgScrapCancelServiceImpl extends BaseService<JgScrapCancelDto, JgSc
}
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 600000)
public void flowExecute(String equList, Long id, String instanceId, String operate, String comment, String nextTaskId) {
String lockKey = CommonServiceImpl.buildJgExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
......@@ -1131,4 +1131,30 @@ public class JgScrapCancelServiceImpl extends BaseService<JgScrapCancelDto, JgSc
commonService.saveExecuteFlowData2Redis(jgScrapCancel.getInstanceId(), this.buildInstanceRuntimeData(jgScrapCancel));
}
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
public void handleScrapCancelWrongData(String applyNo) {
JgScrapCancel jgScrapCancel = this.baseMapper.selectOne(new LambdaQueryWrapper<JgScrapCancel>()
.in(JgScrapCancel::getApplyNo, applyNo)
.eq(JgScrapCancel::getIsDelete, 0));
WorkflowResultDto workflowResultDto = new WorkflowResultDto();
workflowResultDto.setNextExecutorRoleIds(jgScrapCancel.getNextExecuteIds());
workflowResultDto.setNextTaskCode("已完成");
workflowResultDto.setNextTaskId(jgScrapCancel.getNextTaskId());
workflowResultDto.setNextExecutorUserIds(jgScrapCancel.getNextExecuteUserIds());
jgScrapCancel.setNextExecuteUserIds("");
jgScrapCancel.setNextTaskId(jgScrapCancel.getNextTaskId());
JgScrapCancelDto scrapCancelDto = new JgScrapCancelDto();
BeanUtils.copyProperties(jgScrapCancel, scrapCancelDto);
scrapCancelDto.setAuditStatus(FlowStatusEnum.TO_BE_FINISHED.getName());
// 更新代办
TaskV2Model taskV2Model = updateTaskModel(scrapCancelDto, "0");
// 修改业务信息
updateInfoOther(jgScrapCancel, taskV2Model.getRoutePath());
// 发送数据变更消息
this.sendDataRefreshMsg(jgScrapCancel);
// 创建设备履历
this.createResume(jgScrapCancel, taskV2Model.getRoutePath());
}
}
......@@ -2019,8 +2019,11 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
param.put("NEXT_INSPECT_DATE", this.castDate2TimeStr(dataMap.getString("nextInspectDate")));
param.put("USE_INNER_CODE", useInfo.getUseInnerCode());
param.put("IS_INTO_MANAGEMENT", true);
param.put("USE_PLACE_CODE", jsonObject.get("province") + "#" + jsonObject.get("city") + "#" + jsonObject.get("county") + "#" + jsonObject.get("factoryUseSiteStreet"));
param.put("USE_SITE_CODE", String.valueOf(jsonObject.get("usePlace")));
param.put("USE_PLACE_CODE", jsonObject == null ? "" :
String.join("#",String.valueOf(jsonObject.getOrDefault("province", "")), String.valueOf(jsonObject.getOrDefault("city", "")),
String.valueOf(jsonObject.getOrDefault("county", "")), String.valueOf(jsonObject.getOrDefault("factoryUseSiteStreet", "")))
);
param.put("USE_SITE_CODE", jsonObject == null ? "" : String.valueOf(jsonObject.getOrDefault("usePlace", "")));
param.put("ORG_BRANCH_CODE", split[0]);
param.put("ORG_BRANCH_NAME", split[1]);
param.put("USC_UNIT_CREDIT_CODE", "");
......
......@@ -1098,8 +1098,20 @@ public class JgVehicleInformationServiceImpl extends BaseService<JgVehicleInform
}
public Page<Map<String, Object>> getPageList(JgVehicleInformationDto dto, String sort, Page<Map<String, Object>> page, List<String> roleIds, String client) {
try {
SortVo sortMap = commonService.sortFieldConversion(sort);
return this.baseMapper.getListPage(page, sortMap, dto, roleIds, client);
} catch (Exception ex) {
String msg = ex.getMessage() == null ? "" : ex.getMessage();
if (msg.contains("eyibc decrypt error")
|| msg.contains("EYIBCException")
|| msg.contains("olym jdbc error")
|| msg.contains("数据非法")
|| msg.contains("decrypt error, code: -65")) {
throw new BadRequest("数据完整性被破坏(解密失败),请联系管理员。");
}
throw new BadRequest("系统内部错误,请联系管理员。");
}
}
private void updateEquipMessage(JgVehicleInformation jgVehicleInformation, JSONObject map, IdxBizJgRegisterInfo registerInfo, IdxBizJgOtherInfo otherInfo) {
......@@ -2533,4 +2545,17 @@ public class JgVehicleInformationServiceImpl extends BaseService<JgVehicleInform
public boolean countUseTimesForInvalid(Object code) {
return jgVehicleInformationMapper.countUseTimesForInvalid(code) <= 0;
}
public void handleVehicleWrongData(String applyNo, String equDefineCode) {
JgVehicleInformation vehicleInformation = jgVehicleInformationMapper.selectOne(new LambdaQueryWrapper<JgVehicleInformation>()
.in(JgVehicleInformation::getApplyNo, applyNo)
.eq(JgVehicleInformation::getIsDelete, 0)
.ne(JgVehicleInformation::getStatus, "已作废"));
WorkflowResultDto workflowResultDto = new WorkflowResultDto();
workflowResultDto.setNextExecutorRoleIds(vehicleInformation.getNextExecuteIds());
workflowResultDto.setNextTaskCode("已完成");
workflowResultDto.setNextTaskId(vehicleInformation.getNextTaskId());
workflowResultDto.setNextExecutorUserIds(vehicleInformation.getNextExecuteUserIds());
this.updateData(vehicleInformation.getSequenceNbr(), "0", workflowResultDto, Boolean.FALSE, equDefineCode);
}
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
......@@ -270,13 +271,7 @@ public class SafetyProblemTracingGenServiceImpl{
correctData.addAll(inspectionSet);
}
idxBizJgOtherInfoService.lambdaUpdate().set(IdxBizJgOtherInfo::getStatus, null)
.in(IdxBizJgOtherInfo::getRecord, correctData).update();
Iterable<ESEquipmentCategoryDto> equipEsDtoIter = esEquipmentCategory.findAllById(correctData);
for (ESEquipmentCategoryDto equipEsDto : equipEsDtoIter) {
equipEsDto.setProblemStatus(null);
}
esEquipmentCategory.saveAll(equipEsDtoIter);
safetyProblemTracingService.updateOtherTableAndES(Sets.newHashSet(correctData));
logger.info("设备维保备案和检验超期数据修正完成,更新数据:{}条", correctData.size());
}
......@@ -304,6 +299,7 @@ public class SafetyProblemTracingGenServiceImpl{
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.set(SafetyProblemTracing::getRecDate, new Date())
.in(SafetyProblemTracing::getSourceId, outOfMaintenanceEquipIds)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.WBCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
......@@ -335,6 +331,7 @@ public class SafetyProblemTracingGenServiceImpl{
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.set(SafetyProblemTracing::getRecDate, new Date())
.in(SafetyProblemTracing::getSourceId, outOfInspectionEquipIds)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.JYCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
......
......@@ -19,13 +19,10 @@ import com.yeejoin.amos.boot.module.jg.api.dto.SafetyProblemTracingDto;
import com.yeejoin.amos.boot.module.jg.api.entity.SafetyProblemTracing;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemSourceTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.CommonMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.SafetyProblemTracingMapper;
import com.yeejoin.amos.boot.module.jg.api.service.ISafetyProblemTracingService;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgRegisterInfoService;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgMaintenanceRecordInfo;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -48,6 +45,7 @@ import static org.springframework.jdbc.object.BatchSqlUpdate.DEFAULT_BATCH_SIZE;
* @date 2024-05-21
*/
@Service
@Slf4j
public class SafetyProblemTracingServiceImpl extends BaseService<SafetyProblemTracingDto, SafetyProblemTracing, SafetyProblemTracingMapper> implements ISafetyProblemTracingService {
@Autowired
......@@ -55,6 +53,12 @@ public class SafetyProblemTracingServiceImpl extends BaseService<SafetyProblemTr
@Autowired
DataDictionaryServiceImpl iDataDictionaryService;
@Autowired
IdxBizJgOtherInfoServiceImpl idxBizJgOtherInfoService;
@Autowired
ESEquipmentCategory esEquipmentCategory;
private static Map<String, String> regionCodeOrgCodeMap = new ConcurrentHashMap<>();
@Autowired
CommonMapper commonMapper;
......@@ -294,4 +298,26 @@ public class SafetyProblemTracingServiceImpl extends BaseService<SafetyProblemTr
this.saveOrUpdateBatch(safetyProblemTracings);
}
}
/**
* 更新Other表和ES状态(提取公共方法)
*/
public void updateOtherTableAndES(Set<String> records) {
// 更新Other表
idxBizJgOtherInfoService.lambdaUpdate()
.set(IdxBizJgOtherInfo::getStatus, SafetyProblemStatusEnum.HANDLED.getCode())
.in(IdxBizJgOtherInfo::getRecord, records)
.update();
// 更新ES状态(添加异常处理)
try {
Iterable<ESEquipmentCategoryDto> esEquipmentIter = esEquipmentCategory.findAllById(records);
esEquipmentIter.forEach(dto ->
dto.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getCode()));
esEquipmentCategory.saveAll(esEquipmentIter);
log.info("ES状态更新成功,记录数:{}", records.size());
} catch (Exception e) {
log.error("ES状态更新失败,设备record:{},错误原因:{}", records, e.getMessage(), e);
}
}
}
\ No newline at end of file
......@@ -83,7 +83,7 @@ public class CodeUtil {
* @param receiveCompanyCode 接收机构的行政区域代码
* @return 地市级行政审批区域代码
*/
private String getCityRegionCode(String receiveCompanyCode) {
public String getCityRegionCode(String receiveCompanyCode) {
// 需求《需要注意的是其中的行政区域代码直到地市一级,西咸、杨凌、韩城用自己的》,西咸组织机构独立的所以不需要单独排除
if (Arrays.asList(EXCLUSION_CITY_REGIONS).contains(receiveCompanyCode)) {
return receiveCompanyCode;
......
......@@ -78,7 +78,7 @@
FROM
"tz_jyjc_opening_application"
where
status = '6616') a,
status = '已完成') a,
tz_base_enterprise_info b,
(select cert_no, min(expiry_date) as expiry_date, unit_code, cert_type_code from tz_base_unit_licence GROUP BY cert_no,unit_code,cert_type_code) l
where
......@@ -123,7 +123,7 @@
tz_base_enterprise_info ei
where
oa.unit_code = ei.use_unit_code
and oa.status = 6616
and oa.status = '已完成'
</select>
<select id="queryJyjcOpeningApplicationListByIds"
resultType="com.yeejoin.amos.boot.module.jyjc.api.vo.JyjcOpeningApplicationVo">
......
......@@ -344,13 +344,12 @@
ur.rec_date
</select>
<select id="certificateCountByOrgCode" resultType="java.lang.Long">
SELECT COUNT
(1)
SELECT
COUNT (1)
FROM
tzs_jg_use_registration_manage A
INNER JOIN privilege_company C ON A.receive_company_code = C.company_code
WHERE
C.org_code LIKE concat ( #{orgCode}, '%' )
A.supervise_org_code LIKE concat ( #{orgCode}, '%' )
and A.certificate_status = '已登记'
and A.is_delete = 0
</select>
......@@ -367,17 +366,15 @@
WHERE
T.status = '已完成'
AND T.is_delete = 0
AND T.receive_company_org_code LIKE CONCAT ( #{orgCode}, '%' ) UNION ALL
AND T.supervision_org_code LIKE CONCAT ( #{orgCode}, '%' ) UNION ALL
SELECT COUNT
( 1 )
FROM
tzs_jg_vehicle_information T,
privilege_company pc
tzs_jg_vehicle_information T
WHERE
T.status = '已完成'
AND T.is_delete = 0
AND T.receive_company_code = pc.company_code
AND pc.org_code LIKE concat ( #{orgCode}, '%' )
AND T.org_branch_code LIKE concat ( #{orgCode}, '%' )
)
</select>
<select id="over15yearsCount" resultType="java.lang.Long">
......
......@@ -11,6 +11,7 @@
((b.supervise_org_code != '50' and b.supervise_org_code LIKE CONCAT (#{orgCode}, '%'))
or (b.supervise_org_code = '50' and b.office_region LIKE CONCAT ('%', #{regionCode}, '%')))
AND (b.unit_type LIKE '%检验机构%' OR b.unit_type LIKE '%检测机构%')
AND b.unit_type NOT LIKE '%检验检测机构%'
</select>
<select id="countAllRegThirdInspectCompany" resultType="java.lang.Long">
SELECT
......@@ -25,6 +26,7 @@
#{code}
</foreach>
AND (b.unit_type LIKE '%检验机构%' OR b.unit_type LIKE '%检测机构%')
AND b.unit_type NOT LIKE '%检验检测机构%'
</select>
<select id="countAllOpenBizInspectCompany" resultType="java.lang.Long">
SELECT
......@@ -34,7 +36,7 @@
tz_base_enterprise_info b
WHERE
a.unit_code = b.use_unit_code
AND a.status = 6616
AND a.status = '已完成'
and
(( b.supervise_org_code != '50' AND b.supervise_org_code LIKE CONCAT ( #{orgCode}, '%' ) )
OR ( b.supervise_org_code = '50' AND b.office_region LIKE CONCAT ( '%', #{regionCode}, '%' )))
......
package com.yeejoin.amos.boot.module.statistcs.biz.init;
import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.AQZSDPStatisticsServiceImpl;
import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.JGDPStatisticsServiceImpl;
import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.StCommonServiceImpl;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import org.springframework.boot.ApplicationArguments;
......@@ -16,12 +16,14 @@ public class DataInitAfterRuning implements ApplicationRunner {
private StCommonServiceImpl stCommonService;
private JGDPStatisticsServiceImpl jgdpStatisticsService;
private AmosRequestContext amosRequestContext;
public DataInitAfterRuning(StCommonServiceImpl stCommonService, AmosRequestContext amosRequestContext) {
public DataInitAfterRuning(StCommonServiceImpl stCommonService, AmosRequestContext amosRequestContext, JGDPStatisticsServiceImpl jgdpStatisticsService) {
this.stCommonService = stCommonService;
this.amosRequestContext = amosRequestContext;
this.jgdpStatisticsService = jgdpStatisticsService;
}
@Override
......@@ -31,5 +33,6 @@ public class DataInitAfterRuning implements ApplicationRunner {
RequestContext.setProduct(amosRequestContext.getProduct());
RequestContext.setToken(amosRequestContext.getToken());
stCommonService.init();
jgdpStatisticsService.init();
}
}
package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -14,12 +13,13 @@ import com.yeejoin.amos.boot.module.common.api.dto.LegendDataDto;
import com.yeejoin.amos.boot.module.common.api.enums.IssueMainBodyEnum;
import com.yeejoin.amos.boot.module.common.api.enums.IssueProblemLevelEnum;
import com.yeejoin.amos.boot.module.common.api.enums.IssueTypeEnum;
import com.yeejoin.amos.boot.module.common.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.common.biz.service.impl.TZSCommonServiceImpl;
import com.yeejoin.amos.boot.module.jg.api.enums.DPMapStatisticsItemEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemStatusEnum;
import com.yeejoin.amos.boot.module.statistics.api.dto.EquipQuestionNumCountDto;
import com.yeejoin.amos.boot.module.statistics.api.dto.SafetyProblemTracingDto;
import com.yeejoin.amos.boot.module.statistics.api.dto.SecurityIndexCountItemDto;
import com.yeejoin.amos.boot.module.statistics.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.statistics.api.mapper.AQZSDPStatisticsMapper;
import com.yeejoin.amos.boot.module.statistics.api.mapper.CylinderStatisticsMapper;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquipmentClassifityEnum;
......@@ -101,6 +101,8 @@ public class AQZSDPStatisticsServiceImpl {
private StCommonServiceImpl stCommonService;
private TZSCommonServiceImpl tstCommonService;
private JGDPStatisticsServiceImpl jgDPStatisticsService;
private DataDictionaryMapper dataDictionaryMapper;
......@@ -109,7 +111,15 @@ public class AQZSDPStatisticsServiceImpl {
private ComprehensiveStatisticalAnalysisServiceImpl statisticalAnalysisService;
public AQZSDPStatisticsServiceImpl(RestHighLevelClient restHighLevelClient, AQZSDPStatisticsMapper statisticsMapper, TzBaseEnterpriseInfoMapper enterpriseInfoMapper, TzsUserInfoMapper userInfoMapper, CylinderStatisticsMapper cylinderStatisticsMapper, StCommonServiceImpl stCommonService, DataDictionaryMapper dataDictionaryMapper, JGDPStatisticsServiceImpl jgDPStatisticsService) {
public AQZSDPStatisticsServiceImpl(RestHighLevelClient restHighLevelClient,
AQZSDPStatisticsMapper statisticsMapper,
TzBaseEnterpriseInfoMapper enterpriseInfoMapper,
TzsUserInfoMapper userInfoMapper,
CylinderStatisticsMapper cylinderStatisticsMapper,
StCommonServiceImpl stCommonService,
DataDictionaryMapper dataDictionaryMapper,
JGDPStatisticsServiceImpl jgDPStatisticsService,
TZSCommonServiceImpl tstCommonService) {
this.restHighLevelClient = restHighLevelClient;
this.statisticsMapper = statisticsMapper;
this.enterpriseInfoMapper = enterpriseInfoMapper;
......@@ -118,6 +128,7 @@ public class AQZSDPStatisticsServiceImpl {
this.stCommonService = stCommonService;
this.dataDictionaryMapper = dataDictionaryMapper;
this.jgDPStatisticsService = jgDPStatisticsService;
this.tstCommonService = tstCommonService;
}
......@@ -501,8 +512,16 @@ public class AQZSDPStatisticsServiceImpl {
List<String> enumNameList = IssueTypeEnum.getEnumNameListByMainBody("1");
String orgCode = stCommonService.getAndSetOrgCode(dpFilterParamDto.getCityCode());
if (orgCode != null) {
List<CountDto> countDtos = statisticsMapper.selectByOrgAndProblemType(orgCode, enumNameList, dpFilterParamDto, IssueMainBodyEnum.PERSON.getCode(), null);
countDtos.forEach(t -> dataMap.put(t.getKeyStr(), t.getLongValue()));
BoolQueryBuilder overdueQuery = new BoolQueryBuilder();
overdueQuery.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
tstCommonService.buildExpiryDateQueryBuilder(overdueQuery, "overdue", "licenses", "licenses.expiryDate");
Long overNumber = stCommonService.getNestedQueryStatisticCount(overdueQuery, StatisticalAnalysisEnum.person.getKey(), "licenses", "expiryDate");
BoolQueryBuilder nearQuery = new BoolQueryBuilder();
nearQuery.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
tstCommonService.buildExpiryDateQueryBuilder(nearQuery, "near", "licenses", "licenses.expiryDate");
Long nearNumber = stCommonService.getNestedQueryStatisticCount(nearQuery, StatisticalAnalysisEnum.person.getKey(), "licenses", "expiryDate");
dataMap.put(IssueTypeEnum.LICENSE_OVERDUE_PERSON.getName(), overNumber);
dataMap.put(IssueTypeEnum.LICENSE_EXPIRY_PERSON.getName(), nearNumber);
}
for (int i = 0; i < enumNameList.size(); i++) {
xdata.add(enumNameList.get(i));
......@@ -891,7 +910,7 @@ public class AQZSDPStatisticsServiceImpl {
dpFilterParamDto.setBeginDate(cn.hutool.core.date.DateUtil.offsetDay(new Date(), -30).toDateStr());
}
if (StringUtils.isEmpty(dpFilterParamDto.getEndDate())) {
dpFilterParamDto.setEndDate(DateUtil.today());
dpFilterParamDto.setEndDate(cn.hutool.core.date.DateUtil.offsetDay(new Date(), -1).toDateStr());
}
}
......@@ -910,7 +929,7 @@ public class AQZSDPStatisticsServiceImpl {
result.put("total", hasSupervisoryCodeEquipCount);
//2.压力管道长度统计
// stCommonService.staticsCenterMapCountDataForPipeline(result, orgCode,true, false);
jgDPStatisticsService.staticsCenterMapCountPipLine(result, orgCode, true);
jgDPStatisticsService.staticsCenterMapCountPipLine(result, orgCode, true, false);
//3.单位数量统计
// 单位统计修改为查询es
// this.staticsCenterMapCountDataForCompany(result, orgCode, dpFilterParamDto.getCityCode());
......@@ -1024,7 +1043,7 @@ public class AQZSDPStatisticsServiceImpl {
stCommonService.staticsCenterMapCountDataForEquip(result, cylinderNum, orgCode,true,true, false);
// 2. 压力管道长度统计
// stCommonService.staticsCenterMapCountDataForPipeline(result, orgCode,true, false);
jgDPStatisticsService.staticsCenterMapCountPipLine(result, orgCode, true);
jgDPStatisticsService.staticsCenterMapCountPipLine(result, orgCode, true, false);
//3.单位数量统计
// 单位统计修改为查询es
// this.staticsCenterMapCountDataForCompany(result, orgCode, dpFilterParamDto.getCityCode());
......
......@@ -20,6 +20,7 @@ import com.yeejoin.amos.boot.biz.common.utils.RequestContextWrapper;
import com.yeejoin.amos.boot.module.common.api.dao.EsEquipmentDao;
import com.yeejoin.amos.boot.module.common.api.dto.TechParamItem;
import com.yeejoin.amos.boot.module.common.api.entity.ESEquipmentInfo;
import com.yeejoin.amos.boot.module.common.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.common.api.enums.UnitTypeNewEnum;
import com.yeejoin.amos.boot.module.common.biz.service.impl.TZSCommonServiceImpl;
import com.yeejoin.amos.boot.module.common.biz.utils.TechParamUtil;
......@@ -3357,7 +3358,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
.minimumShouldMatch(1);
} else if (UnitCategoryEnum.filling.getCode().equals(type)) {
boolMust.must(QueryBuilders.wildcardQuery("unitType.keyword", "*" + UnitTypeEnum.czdw.getName() + "*"));
} else if ("inspection".equals(type)) {
} else if (UnitCategoryEnum.inspection.getCode().equals(type)) {
boolMust.should(QueryBuilders.wildcardQuery("unitType.keyword", "*" + UnitTypeEnum.jyjg.getName() + "*"))
.should(QueryBuilders.wildcardQuery("unitType.keyword", "*" + UnitTypeEnum.jcjg.getName() + "*"))
.minimumShouldMatch(1);
......
......@@ -7,8 +7,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.common.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.common.api.enums.UnitTypeEnum;
import com.yeejoin.amos.boot.module.statistics.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.statistics.api.mapper.EnterpriseBizMapper;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.PageParam;
......
......@@ -4,8 +4,9 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamForDetailDto;
import com.yeejoin.amos.boot.module.common.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.SafetyProblemTracingMapper;
import com.yeejoin.amos.boot.module.statistics.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.statistics.api.enums.InformationManageTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import lombok.extern.slf4j.Slf4j;
......@@ -50,6 +51,7 @@ public class EquipmentStaticsServiceImpl {
private static final String EQUSTATE = "EQU_STATE";
private static final String SUPERVISORYCODE = "SUPERVISORY_CODE";
private static final String INFORMATIONSITUATION = "INFORMATION_SITUATION";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
......@@ -284,6 +286,11 @@ public class EquipmentStaticsServiceImpl {
} else {
dto2.put("IS_SUPERVISORY_CODE", "未赋码");
}
if (!ValidationUtil.isEmpty(dto2.get(INFORMATIONSITUATION))) {
String string = dto2.get(INFORMATIONSITUATION).toString();
String informationSituation = InformationManageTypeEnum.getName(string);
dto2.put(INFORMATIONSITUATION, informationSituation);
}
list.add(dto2);
}
total = response.getInternalResponse().hits().getTotalHits().value;
......@@ -373,7 +380,7 @@ public class EquipmentStaticsServiceImpl {
* 设备类别
*/
if (StrUtil.isNotEmpty(dpFilterParamForDetailDto.getEquCategory())) {
boolMust.must(QueryBuilders.wildcardQuery("EQU_CATEGORY", "*" + dpFilterParamForDetailDto.getEquCategory() + "*"));
boolMust.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", dpFilterParamForDetailDto.getEquCategory()));
}
if (!CollectionUtils.isEmpty(dpFilterParamForDetailDto.getNextInspectionDate())) {
......
......@@ -37,7 +37,6 @@ import com.yeejoin.amos.boot.module.statistcs.biz.utils.QueryBuilderUtils;
import com.yeejoin.amos.boot.module.statistcs.factory.EnhancedDynamicQueryBuilder;
import com.yeejoin.amos.boot.module.statistics.api.dto.*;
import com.yeejoin.amos.boot.module.statistics.api.enums.RegulatoryUnitLevelEnum;
import com.yeejoin.amos.boot.module.statistics.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.statistics.api.mapper.CylinderBusinessStatisticsMapper;
import com.yeejoin.amos.boot.module.statistics.api.mapper.JGStatisticsMapper;
import com.yeejoin.amos.boot.module.statistics.api.mapper.ZLStatisticsMapper;
......@@ -285,6 +284,11 @@ public class JGDPStatisticsServiceImpl {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public void init() {
DPFilterParamDto dpFilterParamDto = new DPFilterParamDto();
dpFilterParamDto.setCityCode("610000");
this.centerMapCountForGlobalNoSupervisoryCode(dpFilterParamDto);
}
private List<LegendDataDto> buildLegendDataList() {
List<LegendDataDto> legendDataDtos = new ArrayList<>();
......@@ -397,7 +401,7 @@ public class JGDPStatisticsServiceImpl {
//2.压力管道长度统计
// 修改为查询es
// stCommonService.staticsCenterMapCountDataForPipeline(result, orgCode, true, false);
this.staticsCenterMapCountPipLine(result, orgCode, true);
this.staticsCenterMapCountPipLine(result, orgCode, true, false);
//3.单位数量统计
this.staticsCenterMapCountDataForCompany(result, orgCode, dpFilterParamDto.getCityCode());
//4.人员数量统计
......@@ -416,7 +420,7 @@ public class JGDPStatisticsServiceImpl {
//1.8大类设备数量统计,压力容器里包括气瓶所以需要特殊处理,在统计压力容器时去掉气瓶的数量
stCommonService.staticsCenterMapCountDataForEquip(result, cylinderNum, orgCode, false, true, false);
//2.压力管道长度统计
this.staticsCenterMapCountPipLine(result, orgCode, false);
this.staticsCenterMapCountPipLine(result, orgCode, false, false);
// stCommonService.staticsCenterMapCountDataForPipeline(result, orgCode, false, false);
return result;
}
......@@ -434,7 +438,7 @@ public class JGDPStatisticsServiceImpl {
// 2. 压力管道长度统计
// 修改为查询es
//stCommonService.staticsCenterMapCountDataForPipeline(result, orgCode, true, false);
this.staticsCenterMapCountPipLine(result, orgCode, true);
this.staticsCenterMapCountPipLine(result, orgCode, true, false);
// 3. 人员数量统计
this.staticsCenterMapCountDataForPerson(result, dpFilterParamDto, orgCode);
return result;
......@@ -492,15 +496,21 @@ public class JGDPStatisticsServiceImpl {
}
public void staticsCenterMapCountPipLine(Map<String, Object> result, String orgCode, Boolean isMatchSupervisoryCode) {
public void staticsCenterMapCountPipLine(Map<String, Object> result, String orgCode, Boolean isMatchSupervisoryCode,Boolean isOrgBranchCodeExactMatch) {
SearchRequest request = new SearchRequest();
SearchSourceBuilder builder = new SearchSourceBuilder();
request.indices(StatisticalAnalysisEnum.equip.getKey());
BigDecimal pipeLong;
BoolQueryBuilder pipeLengthQuery = new BoolQueryBuilder();
pipeLengthQuery.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
pipeLengthQuery.must(QueryBuilders.existsQuery("pipeLength"));
if (isOrgBranchCodeExactMatch) {
// 按照管辖机构区域信息精确查询
pipeLengthQuery.must(QueryBuilders.termQuery("ORG_BRANCH_CODE", orgCode));
} else {
// 按照管辖机构区域信息模糊查询
pipeLengthQuery.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
}
if (isMatchSupervisoryCode) {
pipeLengthQuery.must(existsQuery("SUPERVISORY_CODE"));
pipeLengthQuery.mustNot(QueryBuilders.termQuery("SUPERVISORY_CODE", ""));
......@@ -1100,14 +1110,14 @@ public class JGDPStatisticsServiceImpl {
public List<Map<String, Object>> equStateCount(DPFilterParamDto dpFilterParamDto) {
List<Map<String, Object>> resultList;
SearchRequest request = new SearchRequest();
request.indices("idx_biz_view_jg_all");
request.indices(StatisticalAnalysisEnum.equip.getKey());
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
String orgCode = stCommonService.getAndSetOrgCode(dpFilterParamDto.getCityCode());
if (orgCode == null) {
return this.setDefaultEquStateCount();
}
// 按照管辖机构区域信息模糊查询
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", QueryParser.escape(orgCode)));
//已赋码
boolMust.must(QueryBuilders.existsQuery("SUPERVISORY_CODE"));
boolMust.mustNot(QueryBuilders.termQuery("SUPERVISORY_CODE", "null"));
......@@ -1844,7 +1854,7 @@ public class JGDPStatisticsServiceImpl {
result.put("total", hasSupervisoryCodeEquipCount);
// 2.压力管道长度统计
// stCommonService.staticsCenterMapCountDataForPipeline(result, orgCode, true, false);
this.staticsCenterMapCountPipLine(result, orgCode, true);
this.staticsCenterMapCountPipLine(result, orgCode, true, false);
// 3.已纳管设备总数
this.staticsCenterMapCountDataForEquipIsManage(result);
// 4.登记证总数
......@@ -3889,7 +3899,8 @@ public class JGDPStatisticsServiceImpl {
countItemDto.setGl(String.valueOf(data.get(DPMapStatisticsItemEnum.BOILERS.getCode())));
countItemDto.setYlrq(String.valueOf(data.get(DPMapStatisticsItemEnum.PRESSURE_VESSELS.getCode())));
// 2. 压力管道长度统计
countItemDto.setYlgd(stCommonService.staticsCenterMapCountDataForPipeline(data, orgCode, true, isOrgBranchCodeExactMatch));
this.staticsCenterMapCountPipLine(data, orgCode, true,isOrgBranchCodeExactMatch);
// countItemDto.setYlgd(stCommonService.staticsCenterMapCountDataForPipeline(data, orgCode, true, isOrgBranchCodeExactMatch));
// 如果是地市数据则计算上线率,上线率=系统已有数据/最新期底数x100%
if ("610000".equals(r.getParentRegionCode())) {
Map<String, Object> baselineMap = baselineData.stream().filter(d -> d.get("city_code").equals(regionCode)).findFirst().orElse(null);
......
......@@ -109,6 +109,8 @@ public class JYJCDPStatisticsServiceImpl {
private JGDPStatisticsServiceImpl jgDPStatisticsService;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
/**
* 法定检验机构名单
*/
......@@ -548,7 +550,7 @@ public class JYJCDPStatisticsServiceImpl {
result.put("total", hasSupervisoryCodeEquipCount);
// 3.压力管道统计
// stCommonService.staticsCenterMapCountDataForPipeline(result, orgCode,true, false);
jgDPStatisticsService.staticsCenterMapCountPipLine(result, orgCode, true);
jgDPStatisticsService.staticsCenterMapCountPipLine(result, orgCode, true, false);
// 4.报检数量统计
this.staticsCenterMapCountDataReporting(result, dpFilterParamDto);
// 5.检验检测临期设备数数量统计
......@@ -566,6 +568,12 @@ public class JYJCDPStatisticsServiceImpl {
private void countAllRegInspectCompany(Map<String, Object> result, String orgCode, String regionCode) {
Long num = jyjcStatisticsMapper.countAllRegInspectCompany(orgCode,regionCode);
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
// Long num = stCommonService.getStatisticCount();
result.put("inspectionAgencyCount", num);
}
......@@ -591,22 +599,19 @@ public class JYJCDPStatisticsServiceImpl {
private void staticsCenterMapCountDataTemporary(Map<String, Object> result, DPFilterParamDto dpFilterParamDto) {
long num = 0;
CountRequest request = new CountRequest();
request.indices("idx_biz_view_jg_all");
request.indices(StatisticalAnalysisEnum.equip.getKey());
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
String orgCode = stCommonService.getAndSetOrgCode(dpFilterParamDto.getCityCode());
// 按照管辖机构区域信息模糊查询
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
//已赋码
boolMust.must(QueryBuilders.existsQuery("SUPERVISORY_CODE"));
boolMust.mustNot(QueryBuilders.termQuery("SUPERVISORY_CODE","null"));
//状态为已认领
String[] status = {"草稿","已拒领","待认领"};
boolMust.mustNot(QueryBuilders.termsQuery("STATUS",Arrays.asList(status)));
// 且下次检验日期大于等于当天
long currentDayTime = DateUtil.parse(DateUtil.today(), "yyy-MM-dd").getTime();
// 且查询 下次检验日期 <= 当前天+30天 极为临期
long currentDayAfter30DayTime = DateUtil.offsetDay(DateUtil.parse(DateUtil.today(), "yyy-MM-dd"), 30).getTime();
boolMust.must(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").gte(currentDayTime).lte(currentDayAfter30DayTime));
// 大于等于当天 下次检验日期 <= 当前天+30天 即为临期
boolMust.filter(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").gte(LocalDate.now().format(formatter)).lte(LocalDate.now().plusDays(30).format(formatter)));
// 且8大类,目的去掉脏数据
boolMust.must(QueryBuilders.termsQuery("EQU_LIST_CODE",StCommonServiceImpl.getEquipmentCategory().stream().map(EquipmentCategoryDto::getCode).collect(Collectors.toList())));
request.query(boolMust);
......@@ -826,17 +831,17 @@ public class JYJCDPStatisticsServiceImpl {
// 1.检验检测临期设备数数量统计
result.put("approach", staticsCenterMapCountDataForJyTimeTemporary(dpFilterParamDto, equipmentCategoryDtos));
// 2.检验检测超期设备数数量统计
result.put("overdue", staticsCenterMapCountDataForJyTimeOverdueNew(dpFilterParamDto, equipmentCategoryDtos));
result.put("overdue", staticsCenterMapCountDataForJyTimeOverdue(dpFilterParamDto, equipmentCategoryDtos));
}
private List<Long> staticsCenterMapCountDataForJyTimeTemporary(DPFilterParamDto dpFilterParamDto, List<EquipmentCategoryDto> equipmentCategoryDtos) {
List<Long> seresData = new ArrayList<>();
SearchRequest request = new SearchRequest();
request.indices("idx_biz_view_jg_all");
request.indices(StatisticalAnalysisEnum.equip.getKey());
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
String orgCode = stCommonService.getAndSetOrgCode(dpFilterParamDto.getCityCode());
// 按照管辖机构区域信息模糊查询
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
//已赋码
boolMust.must(QueryBuilders.existsQuery("SUPERVISORY_CODE"));
boolMust.mustNot(QueryBuilders.termQuery("SUPERVISORY_CODE","null"));
......@@ -844,9 +849,7 @@ public class JYJCDPStatisticsServiceImpl {
String[] status = {"草稿","已拒领","待认领"};
boolMust.mustNot(QueryBuilders.termsQuery("STATUS",Arrays.asList(status)));
// 且下次检验日期大于等于当天 且查询 下次检验日期 <= 当前天+30天 即为临期
long currentDayTime = DateUtil.parse(DateUtil.today(), "yyy-MM-dd").getTime();
long currentDayAfter30DayTime = DateUtil.offsetDay(DateUtil.parse(DateUtil.today(), "yyy-MM-dd"), 30).getTime();
boolMust.must(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").gte(currentDayTime).lte(currentDayAfter30DayTime));
boolMust.filter(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").gte(LocalDate.now().format(formatter)).lte(LocalDate.now().plusDays(30).format(formatter)));
// 且8大类,目的去掉脏数据
boolMust.must(QueryBuilders.termsQuery("EQU_LIST_CODE",StCommonServiceImpl.getEquipmentCategory().stream().map(EquipmentCategoryDto::getCode).collect(Collectors.toList())));
SearchSourceBuilder builder = new SearchSourceBuilder();
......@@ -894,23 +897,22 @@ public class JYJCDPStatisticsServiceImpl {
private List<Long> staticsCenterMapCountDataForJyTimeOverdue(DPFilterParamDto dpFilterParamDto, List<EquipmentCategoryDto> equipmentCategoryDtos) {
List<Long> seresData = new ArrayList<>();
SearchRequest request = new SearchRequest();
request.indices("idx_biz_view_jg_all");
request.indices(StatisticalAnalysisEnum.equip.getKey());
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// 区域信息模糊查询
String orgCode = stCommonService.getAndSetOrgCode(dpFilterParamDto.getCityCode());
// 按照管辖机构区域信息模糊查询
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
//已赋码
boolMust.must(QueryBuilders.existsQuery("SUPERVISORY_CODE"));
boolMust.mustNot(QueryBuilders.termQuery("SUPERVISORY_CODE","null"));
boolMust.mustNot(QueryBuilders.termQuery("SUPERVISORY_CODE", "null"));
//状态为已认领
String[] status = {"草稿","已拒领","待认领"};
boolMust.mustNot(QueryBuilders.termsQuery("STATUS",Arrays.asList(status)));
String[] status = {"草稿", "已拒领", "待认领"};
boolMust.mustNot(QueryBuilders.termsQuery("STATUS", Arrays.asList(status)));
// 查询下次检验日期小于当前天的设备,即为超期检验超期设备
long currentDayTime = DateUtil.parse(DateUtil.now(), "yyy-MM-dd").getTime();
boolMust.must(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").lt(currentDayTime));
boolMust.filter(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").lt(LocalDate.now().format(formatter)));
// 且8大类,目的去掉脏数据
boolMust.must(QueryBuilders.termsQuery("EQU_LIST_CODE",StCommonServiceImpl.getEquipmentCategory().stream().map(EquipmentCategoryDto::getCode).collect(Collectors.toList())));
boolMust.must(QueryBuilders.termsQuery("EQU_LIST_CODE", StCommonServiceImpl.getEquipmentCategory().stream().map(EquipmentCategoryDto::getCode).collect(Collectors.toList())));
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(boolMust);
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("count_by_equ_list_code").field("EQU_LIST_CODE");
......
......@@ -10,8 +10,8 @@ import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamForDetailDto;
import com.yeejoin.amos.boot.module.common.api.enums.CylinderTypeEnum;
import com.yeejoin.amos.boot.module.common.api.enums.ReginStepEnum;
import com.yeejoin.amos.boot.module.common.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.DPMapStatisticsItemEnum;
import com.yeejoin.amos.boot.module.statistics.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.statistics.api.mapper.CommonBaseMapper;
import com.yeejoin.amos.boot.module.statistics.api.mapper.ZLStatisticsMapper;
import com.yeejoin.amos.boot.module.statistics.api.vo.EquCategoryVo;
......@@ -32,10 +32,14 @@ import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.filter.Filter;
import org.elasticsearch.search.aggregations.bucket.nested.Nested;
import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.math.BigDecimal;
......@@ -281,8 +285,9 @@ public class StCommonServiceImpl {
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(boolMust);
// 默认size为10 ,数据库有脏数据,所以需要多查询一些
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("count_by_equ_list_code").field("EQU_LIST_CODE").size(20);
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("count_by_equ_list_code").field("EQU_LIST_CODE").size(15);
builder.aggregation(aggregationBuilder);
builder.size(0);
request.source(builder);
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
......@@ -314,6 +319,45 @@ public class StCommonServiceImpl {
return (long)result.getOrDefault(DPMapStatisticsItemEnum.TOTAL.getCode(), 0L);
}
public Long getStatisticCount(BoolQueryBuilder builder, String index) {
CountRequest countRequest = new CountRequest();
countRequest.indices(index);
CountResponse response = null;
countRequest.query(builder);
try {
response = restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
throw new RuntimeException(e);
}
return ObjectUtils.isEmpty(response) ? 0 : response.getCount();
}
public Long getNestedQueryStatisticCount(BoolQueryBuilder builder, String index, String nestedFiled, String filterFiled) {
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 构建嵌套聚合
NestedAggregationBuilder nestedAgg = AggregationBuilders.nested(nestedFiled, nestedFiled)
.subAggregation(
AggregationBuilders.filter(filterFiled + "_count", builder)
);
sourceBuilder.aggregation(nestedAgg);
sourceBuilder.size(0); // 只要聚合结果,不要文档
searchRequest.source(sourceBuilder);
long count = 0;
try {
SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
// 解析结果
Nested nestedAggResult = response.getAggregations().get(nestedFiled);
Filter dateRangeFilter = nestedAggResult.getAggregations().get(filterFiled + "_count");
count = dateRangeFilter.getDocCount();
} catch (IOException e) {
throw new RuntimeException(e);
}
return count;
}
/**
* 统计已赋码设备数量
* @param orgCode
......
......@@ -126,6 +126,12 @@ public class KrjyydqkServiceImpl implements IZBGLService {
itemResult.put(key.getKey(), key.getValue() + " / " + BigDecimal.valueOf(key.getValue()).divide(BigDecimal.valueOf(sum.get()), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).stripTrailingZeros().toPlainString() + "%");
}
});
} else {
itemResult.put("lessNum", "0");
itemResult.put("greaterNum", "0");
itemResult.put("levelOne", "0");
itemResult.put("levelTwo", "0");
itemResult.put("levelThree", "0");
}
itemResult.put("area",r.getRegionName());
itemResult.put("sequenceNbr", UUID.fastUUID().toString());
......
......@@ -17,12 +17,12 @@ import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamForDetailDto;
import com.yeejoin.amos.boot.module.common.api.entity.AlertStatistics;
import com.yeejoin.amos.boot.module.common.api.enums.CylinderTypeEnum;
import com.yeejoin.amos.boot.module.common.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.common.api.enums.UnitTypeEnum;
import com.yeejoin.amos.boot.module.common.api.enums.UserPostEnum;
import com.yeejoin.amos.boot.module.statistcs.biz.utils.JsonUtils;
import com.yeejoin.amos.boot.module.statistcs.biz.utils.QueryBuilderUtils;
import com.yeejoin.amos.boot.module.statistics.api.enums.InformationManageTypeEnum;
import com.yeejoin.amos.boot.module.statistics.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.statistics.api.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.statistics.api.mapper.AlertStatisticsMapper;
import com.yeejoin.amos.boot.module.statistics.api.mapper.TzsCustomFilterMapper;
......@@ -890,8 +890,15 @@ public class ZLDPStatisticsServiceImpl {
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
}
if (!ObjectUtils.isEmpty(map.getString("CODE96333"))) {
boolMust.must(QueryBuilders.wildcardQuery("CODE96333", "*" + map.getString("CODE96333") + "*"));
}
if (!ObjectUtils.isEmpty(map.getString("SUPERVISORY_CODE"))) {
boolMust.must(QueryBuilders.wildcardQuery("SUPERVISORY_CODE", "*" + map.getString("SUPERVISORY_CODE") + "*"));
}
if (!ObjectUtils.isEmpty(map.getString("ORG_BRANCH_CODE"))) {
// boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(map.getString("ORG_BRANCH_CODE")) + "*"));
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", map.getString("ORG_BRANCH_CODE")));
}
......
......@@ -204,6 +204,7 @@ public class TzBaseEnterpriseInfoServiceImpl
@Override
public IPage<TzBaseEnterpriseInfoDto> page(PageParam pageParam, TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto, String sort) {
try {
List<String> orgCodeList = new ArrayList<>();
if (tzBaseEnterpriseInfoDto.getSuperviseKey() != null) {
FeignClientResult<CompanyModel> result = Privilege.companyClient
......@@ -224,6 +225,17 @@ public class TzBaseEnterpriseInfoServiceImpl
}
SortVo sortMap = userInfoService.sortFieldConversion(sort);
return this.baseMapper.pageList(page, tzBaseEnterpriseInfoDto, orgCodeList, sortMap);
} catch (Exception ex) {
String msg = ex.getMessage() == null ? "" : ex.getMessage();
if (msg.contains("eyibc decrypt error")
|| msg.contains("EYIBCException")
|| msg.contains("olym jdbc error")
|| msg.contains("数据非法")
|| msg.contains("decrypt error, code: -65")) {
throw new BadRequest("数据完整性被破坏(解密失败),请联系管理员。");
}
throw new BadRequest("系统内部错误,请联系管理员。");
}
}
@Override
......@@ -1032,6 +1044,7 @@ public class TzBaseEnterpriseInfoServiceImpl
@Override
public IPage<TzBaseEnterpriseInfoDto> getInfoById(Long sequenceNbr, String companyCode) {
try {
TzBaseEnterpriseInfo tzBaseEnterpriseInfo = this.getById(sequenceNbr);
TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto = detailById(tzBaseEnterpriseInfo);
......@@ -1046,6 +1059,17 @@ public class TzBaseEnterpriseInfoServiceImpl
Page<TzBaseEnterpriseInfoDto> page = new Page<>(1, 10);
page.setRecords(Arrays.asList(tzBaseEnterpriseInfoDto));
return page;
} catch (Exception ex) {
String msg = ex.getMessage() == null ? "" : ex.getMessage();
if (msg.contains("eyibc decrypt error")
|| msg.contains("EYIBCException")
|| msg.contains("olym jdbc error")
|| msg.contains("数据非法")
|| msg.contains("decrypt error, code: -65")) {
throw new BadRequest("数据完整性被破坏(解密失败),请联系管理员。");
}
throw new BadRequest("系统内部错误,请联系管理员。");
}
}
private TzBaseEnterpriseInfoDto detailById(TzBaseEnterpriseInfo tzBaseEnterpriseInfo) {
......
......@@ -1085,6 +1085,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
}
public Page<UserPermissionDto> getUserByPermission(long current, long size, String type, UserPermissionDto filter, String sort) {
try {
Page<UserPermissionDto> permissionDtoPage = new Page<>(current, size);
List<String> post = this.getPostByType(type);
SortVo sortMap = this.sortFieldConversion(sort);
......@@ -1103,6 +1104,17 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
d.setPermissionStatus(this.castNoPermissionData(type, d.getPermissionStatus()));
});
return result;
} catch (Exception ex) {
String msg = ex.getMessage() == null ? "" : ex.getMessage();
if (msg.contains("eyibc decrypt error")
|| msg.contains("EYIBCException")
|| msg.contains("olym jdbc error")
|| msg.contains("数据非法")
|| msg.contains("decrypt error, code: -65")) {
throw new BadRequest("数据完整性被破坏(解密失败),请联系管理员。");
}
throw new BadRequest("系统内部错误,请联系管理员。");
}
}
private String castNoPermissionData(String type, String permissionStatus) {
......
package com.yeejoin.amos.boot.module.ymt.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.common.api.mapper.CustomBaseMapper;
import com.yeejoin.amos.boot.module.ymt.api.entity.SupervisoryCodeInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
......@@ -12,9 +11,10 @@ import java.util.List;
* @author system_generator
* @date 2021-10-20
*/
public interface SupervisoryCodeInfoMapper extends BaseMapper<SupervisoryCodeInfo> {
public interface SupervisoryCodeInfoMapper extends CustomBaseMapper<SupervisoryCodeInfo> {
void updateStatus(@Param("superviseCodeList") List<String> superviseCodeList);
void updateStatusBySuperviseCode(String superviseCode);
}
......@@ -23,6 +23,8 @@ public interface IEquipmentCategoryService {
Map<String, String> createSupervisorCode(Map<String, Object> map);
List<Map<String, String>> createSupervisoryCodeBatch(Map<String, Object> map);
List<LinkedHashMap> getTree();
List<LinkedHashMap> creatTree();
......
......@@ -51,6 +51,12 @@ public interface IGenerateCodeService {
* @return 7位监管编码生成
*/
String createSupervisoryCode(String key);
/**
* 监管编码生成(7位)-导入批量生成
* @param key key
* @return 7位监管编码生成
*/
List<String> createSupervisoryCodeBatch(String key, int batchSize);
String initCode();
}
......@@ -76,6 +76,8 @@
<select id="selectDataById" resultType="java.util.Map">
SELECT SEQUENCE_NBR,
REC_DATE,
CREATE_DATE,
DATA_QUALITY_SCORE,
ORG_BRANCH_NAME,
ORG_BRANCH_CODE,
USE_UNIT_NAME,
......
......@@ -735,7 +735,7 @@
v2.REC_DATE
FROM "idx_biz_jg_other_info" v1
LEFT JOIN "biz_jg_supervisory_code" v2 on v1.SUPERVISORY_CODE = v2.SUPERVISORY_CODE
WHERE v1."SUPERVISORY_CODE" ~ 'X31' AND v1."CODE96333" ~ '^32'
WHERE v1."SUPERVISORY_CODE" ~ 'X3' AND v1."CODE96333" ~ '^32'
AND v2.create_status = '1'
ORDER BY v2."REC_DATE" DESC
</select>
......
......@@ -12,4 +12,14 @@
<update id="updateStatusBySuperviseCode">
update biz_jg_supervisory_code set status = '1' where supervisory_code = #{superviseCode}
</update>
<insert id="insertBatchSomeColumn" parameterType="java.util.List">
INSERT INTO biz_jg_supervisory_code
(sequence_nbr, supervisory_code, code96333, status, create_status)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.sequenceNbr}, #{item.supervisoryCode}, #{item.code96333}, #{item.status}, #{item.createStatus})
</foreach>
</insert>
</mapper>
\ No newline at end of file
......@@ -276,6 +276,19 @@ public class EquipmentCategoryController extends BaseController {
}
/**
* 批量生成监管码-设备批量导入用
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@RequestMapping(value = "/createSupervisoryCodeBatch", method = RequestMethod.POST)
@ApiOperation(httpMethod = "POST", value = "批量生成监管码", notes = "生成监管码和96333码")
public ResponseModel<Object> createSupervisoryCodeBatch(@RequestBody Map<String, Object> map) {
return ResponseHelper.buildResponse(equipmentCategoryService.createSupervisoryCodeBatch(map));
}
/**
* 修改数据状态是否显示编辑按钮
*
* @return
......
......@@ -10,6 +10,7 @@ import com.google.common.collect.Lists;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dao.EsEquipmentDao;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
......@@ -35,6 +36,7 @@ import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.elasticsearch.action.search.SearchRequest;
......@@ -289,6 +291,9 @@ public class EquipmentCategoryServiceImpl extends BaseService<EquipmentCategoryD
private String startCode;
@Autowired
private SnowflakeIdUtil sequence;
@Autowired
private RedisUtils redisUtils;
// 一码通checkCode中redis key过期时间
private long time = 300l;
......@@ -467,6 +472,84 @@ public class EquipmentCategoryServiceImpl extends BaseService<EquipmentCategoryD
return codeMap;
}
/**
* 批量生成监管码
*/
@Override
public List<Map<String, String>> createSupervisoryCodeBatch(Map<String, Object> map) {
String city, county, equipCategory, isNotXiXian, code96333, superviseCode;
int batchSize = 1;
// 获取对应行政区划
city = String.valueOf(map.get("cityCode"));
county = String.valueOf(map.get("countyCode"));
code96333 = String.valueOf(map.get("code96333"));
superviseCode = String.valueOf(map.get("superviseCode"));
// 获取对应设备分类
equipCategory = String.valueOf(map.get("equCategory"));
if ("null".equals(equipCategory) || "null".equals(city) || "null".equals(county)) {
throw new BadRequest("请求参数不全,请查看参数中是否携带 cityCode、countyCode、equCategory 三个参数及对应值");
}
isNotXiXian = Optional.ofNullable(map.get("isXiXian")).orElse("0").toString();
batchSize = (int) Optional.ofNullable(map.get("batchSize")).orElse(1);
// 生成码
List<Map<String, String>> codeMapList = creatBatchCode(isNotXiXian, city, county, equipCategory, code96333, superviseCode, batchSize);
if (ObjectUtils.isEmpty(codeMapList)) {
throw new BadRequest("该请求参数未生成监管码或96333码,请核对参数");
}
return codeMapList;
}
/**
* 批量生成监管码
*/
public List<Map<String, String>> creatBatchCode(String isNotXiXian,
String city,
String county,
String equipCategory,
String code96333,
String supervisionCode,
int batchSize) {
RLock lock = redissonClient.getLock(LOCK_KEY);
List<Map<String, String>> resultList = new ArrayList<>();
try {
lock.lock();
log.info("加锁成功,开始生成 {} 条监管码", batchSize);
List<String> supervisorList = createSupervisoryCodeBatch(isNotXiXian, city, county, equipCategory, batchSize);
if (CollectionUtils.isEmpty(supervisorList)) {
throw new BadRequest("未生成任何监管码,请检查参数");
}
String equState = EquipmentCategoryEnum.CSZT.getCode();
List<SupervisoryCodeInfo> supervisoryCodeInfoList = new ArrayList<>();
for (String supervisorCode : supervisorList) {
SupervisoryCodeInfo newInfo = new SupervisoryCodeInfo();
newInfo.setSupervisoryCode(supervisorCode);
newInfo.setCode96333(code96333);
newInfo.setCreateStatus("INIT");
newInfo.setStatus(equState);
newInfo.setSequenceNbr(sequence.nextId());
supervisoryCodeInfoList.add(newInfo);
Map<String, String> resultMap = new HashMap<>();
resultMap.put("superviseCode", supervisorCode);
resultMap.put("code96333", "");
resultList.add(resultMap);
}
supervisoryCodeInfoMapper.insertBatchSomeColumn(supervisoryCodeInfoList, 500);
log.info("成功生成 {} 条监管码", resultList.size());
} catch (Exception e) {
log.error("批量生成监管码失败", e);
throw new RuntimeException("批量生成监管码失败: " + e.getMessage(), e);
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
log.info("释放锁");
}
}
return resultList;
}
@Override
public List<LinkedHashMap> getTree() {
List<LinkedHashMap> result = (List<LinkedHashMap>) redisUtils.get(REGULATOR_UNIT_TREE);
......@@ -888,6 +971,26 @@ public class EquipmentCategoryServiceImpl extends BaseService<EquipmentCategoryD
}
/**
* 批量生成监管码-设备批量导入使用
*
* @param city 行政区划市
* @param county 行政区划区
* @return 监管码
*/
public List<String> createSupervisoryCodeBatch(String isNotXiXian, String city, String county, String equipCategory, int batchSize) {
StringBuilder supervisorCode = new StringBuilder();
String division = null;
if (((XIAN.equals(city) || XIAN_YANG.equals(city)) && "1".equals(isNotXiXian))) {
division = "X";
} else {
Map<String, Object> divisionMap = equipmentCategoryMapper.getAdministrativeDivision(EquipmentCategoryEnum.XZQH.getCode(), county);
division = ObjectUtils.isEmpty(divisionMap) ? equipmentCategoryMapper.getAdministrativeDivision(EquipmentCategoryEnum.XZQH.getCode(), city).get("code").toString() : divisionMap.get("code").toString();
}
supervisorCode.append(division).append(equipCategory);
return generateCodeService.createSupervisoryCodeBatch(String.valueOf(supervisorCode), batchSize);
}
/**
* 生成96333电梯识别码
*
* @param prefix 电梯码前缀
......
......@@ -105,6 +105,13 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
return (key.length() == 5) ? generateSupervisorySequence(key) : "生成码规则不对!";
}
public List<String> createSupervisoryCodeBatch(String key, int batchSize) {
if (key == null || key.length() != 5) {
return Collections.singletonList("生成码规则不对!");
}
return generateSupervisorySequenceBatch(key, batchSize);
}
@Override
public String initCode() {
categoryOtherInfoMapper.selectSupervisorCodeMaxValue().forEach(vo ->
......@@ -148,6 +155,59 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
}
/**
* 批量生成监管码
*
* @param sequenceKey Redis 中存储的序列 key
* @param batchSize 需要生成的数量
* @return 批量生成的顺序码列表
*/
public List<String> generateSupervisorySequenceBatch(String sequenceKey, int batchSize) {
RLock lock = redissonClient.getLock(LOCK_KEY_SUPERVISORY);
try {
boolean locked = lock.tryLock(10, TimeUnit.SECONDS);
log.info("尝试获取锁: {}", locked);
if (locked) {
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey);
// 如果为空,则初始化为0
long currentSequence = (currentSequenceStr != null)
? Long.parseLong(currentSequenceStr)
: this.initRedis(sequenceKey);
log.info("获取《{}》当前顺序码:{}", sequenceKey, currentSequence);
List<String> results = new ArrayList<>(batchSize);
for (int i = 1; i <= batchSize; i++) {
long nextSeq = currentSequence + i;
String formattedSequence = String.format(
GenerateCodeServiceImpl.SUPERVISOR_SEQUENCE_TYPE, nextSeq);
results.add(sequenceKey + "-" + formattedSequence);
}
// 更新 Redis 里的最新顺序号
long newSequence = currentSequence + batchSize;
valueOps.set(sequenceKey, String.valueOf(newSequence));
log.info("更新《{}》顺序码到:{}", sequenceKey, newSequence);
return results;
} else {
throw new RuntimeException("Failed to acquire lock for sequence generation");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("Thread interrupted while acquiring lock", e);
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
log.info("释放锁");
}
}
}
/**
* 监管码为空的话,初始化Redis
*
* @param sequenceKey key
......
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