Commit 3789aa4d authored by tianbo's avatar tianbo

Merge branch 'develop_tzs_register' of…

Merge branch 'develop_tzs_register' of http://36.40.66.175:5000/moa/amos-boot-biz into develop_tzs_register
parents 4b771cdd 20f532c7
...@@ -78,5 +78,5 @@ public interface IJgChangeRegistrationReformService { ...@@ -78,5 +78,5 @@ public interface IJgChangeRegistrationReformService {
* @param sequenceNbr * @param sequenceNbr
* @param response * @param response
*/ */
void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response); void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType);
} }
...@@ -35,6 +35,7 @@ public interface IJgChangeRegistrationTransferService extends IService<JgChangeR ...@@ -35,6 +35,7 @@ public interface IJgChangeRegistrationTransferService extends IService<JgChangeR
void revocation(String instanceId); void revocation(String instanceId);
void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response); void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType);
Map<String, Object> getDetailFieldCamelCase(String record); Map<String, Object> getDetailFieldCamelCase(String record);
} }
...@@ -15,7 +15,6 @@ import org.springframework.util.ObjectUtils; ...@@ -15,7 +15,6 @@ import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper; import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
...@@ -65,6 +64,21 @@ public class CommonController extends BaseController { ...@@ -65,6 +64,21 @@ public class CommonController extends BaseController {
/** /**
* 工作台接收机构树
* @param bizType 业务类型:notice-告知类, register-登记类
* @return 树
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{bizType}/receive-unit/tree")
@ApiOperation(httpMethod = "GET", value = "接收机构树", notes = "接收机构树")
public ResponseModel<Object> getNoticeReceiveTree(@PathVariable String bizType) {
return ResponseHelper.buildResponse(commonService.getReceiveUnitTree(bizType));
}
/**
* 获取行政审批局树 * 获取行政审批局树
* *
* @return * @return
...@@ -278,4 +292,18 @@ public class CommonController extends BaseController { ...@@ -278,4 +292,18 @@ public class CommonController extends BaseController {
} }
/**
* 校验EQUCODE的唯一性
* @param equCode EQUCODE
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/checkUniquenessOfEQUCODE")
@ApiOperation(httpMethod = "GET", value = "校验EQUCODE的唯一性", notes = "校验EQUCODE的唯一性")
public ResponseModel<Object> checkUniquenessOfEQUCODE(String equCode) {
Boolean bool = commonService.checkUniquenessOfEQUCODE(equCode);
return ResponseHelper.buildResponse(bool);
}
} }
...@@ -121,10 +121,17 @@ public class JgChangeRegistrationReformController extends BaseController { ...@@ -121,10 +121,17 @@ public class JgChangeRegistrationReformController extends BaseController {
return ResponseHelper.buildResponse(map); return ResponseHelper.buildResponse(map);
} }
/**
* 改造登记-导出使用登记证
* @param response 返回
* @param sequenceNbr 主键
* @param printType 打印类型,0-正常打印,1-套打(默认0)
*/
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export") @GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "改造登记-导出使用登记证", notes = "改造登记-导出使用登记证") @ApiOperation(httpMethod = "GET", value = "改造登记-导出使用登记证", notes = "改造登记-导出使用登记证")
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr){ public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr,
jgChangeRegistrationReformServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response); @RequestParam(value = "printType", defaultValue = "0") String printType){
jgChangeRegistrationReformServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response, printType);
} }
} }
...@@ -157,11 +157,18 @@ public class JgChangeRegistrationTransferController extends BaseController { ...@@ -157,11 +157,18 @@ public class JgChangeRegistrationTransferController extends BaseController {
return ResponseHelper.buildResponse(jgChangeRegistrationTransferService.queryListForPage(page,params, type)); return ResponseHelper.buildResponse(jgChangeRegistrationTransferService.queryListForPage(page,params, type));
} }
/**
* 导出使用登记证
* @param response 返回
* @param sequenceNbr 主键
* @param printType 打印类型,0-正常打印,1-套打(默认0)
*/
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export") @GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证") @ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证")
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr){ public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr,
jgChangeRegistrationTransferService.exportUseRegistrationCertificate(sequenceNbr, response); @RequestParam(value = "printType", defaultValue = "0") String printType){
jgChangeRegistrationTransferService.exportUseRegistrationCertificate(sequenceNbr, response, printType);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping (value = "/detailFieldCamelCase") @GetMapping (value = "/detailFieldCamelCase")
......
...@@ -199,11 +199,18 @@ public class JgChangeRegistrationUnitController extends BaseController { ...@@ -199,11 +199,18 @@ public class JgChangeRegistrationUnitController extends BaseController {
} }
/**
* 导出使用登记证
* @param response 返回
* @param sequenceNbr 主键
* @param printType 打印类型,0-正常打印,1-套打(默认0)
*/
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export") @GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证") @ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证")
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr) throws IOException { public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr,
jgChangeRegistrationUnitServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response); @RequestParam(value = "printType", defaultValue = "0") String printType) {
jgChangeRegistrationUnitServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response, printType);
} }
} }
...@@ -22,11 +22,8 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType; ...@@ -22,11 +22,8 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper; import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.File;
import java.util.*; import java.util.*;
/** /**
...@@ -195,4 +192,25 @@ public class JgTransferNoticeController extends BaseController { ...@@ -195,4 +192,25 @@ public class JgTransferNoticeController extends BaseController {
map.put("supervisoryCode", "YZGZ20231225001"); // 监管二维码 map.put("supervisoryCode", "YZGZ20231225001"); // 监管二维码
commonService.generateCertificateReport(map, response); commonService.generateCertificateReport(map, response);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "(测试使用)特种设备登记证套打", notes = "(测试使用)特种设备登记证套打")
@GetMapping(value = "/generate/pdf/print")
public void printing(HttpServletResponse response) {
Map<String, Object> map = new HashMap<>();
map.put("useRegistrationCode", "梯10 陕B00005(24)");
map.put("useUnitName", "西安市高科物业服务有限公司");
map.put("fullAddress", "西安市曲江新区春临东街南湖意境1单元2号楼");
map.put("equList", "场(厂)内专用机动车辆");
map.put("equDefine", "特种气瓶(内装填料气瓶、纤维缠绕气瓶、低温绝热气瓶)");
map.put("equCode", "31006102002024010001");
map.put("equCategory", "非公路用旅游观光车辆");
map.put("useInnerCode", "NBBH-1231231231");
map.put("factoryNum", "CCBH-2312312312");
map.put("giveOutYear", "2024");
map.put("giveOutMonth", "12");
map.put("giveOutDay", "26");
map.put("supervisoryCode", "YZGZ20231225001");
commonService.generatePdfPrint(map, response);
}
} }
...@@ -145,8 +145,9 @@ public class JgUseRegistrationController extends BaseController { ...@@ -145,8 +145,9 @@ public class JgUseRegistrationController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export") @GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证") @ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证")
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr) { public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr,
jgUseRegistrationServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response); @RequestParam(value = "printType", defaultValue = "0") String printType) {
jgUseRegistrationServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response, printType);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
......
...@@ -38,6 +38,8 @@ public interface ICommonService { ...@@ -38,6 +38,8 @@ public interface ICommonService {
void generateCertificateReport(Map<String, Object> map, HttpServletResponse response); void generateCertificateReport(Map<String, Object> map, HttpServletResponse response);
void generatePdfPrint(Map<String, Object> map, HttpServletResponse response);
List<LinkedHashMap> creatApproveTree(); List<LinkedHashMap> creatApproveTree();
List<Map<String, Object>> superviseBusinessCategory(String type); List<Map<String, Object>> superviseBusinessCategory(String type);
...@@ -53,4 +55,13 @@ public interface ICommonService { ...@@ -53,4 +55,13 @@ public interface ICommonService {
List<LinkedHashMap> getCreatTreeByInstallation(); List<LinkedHashMap> getCreatTreeByInstallation();
List<LinkedHashMap> getCreatTreeByInstallationTree(); List<LinkedHashMap> getCreatTreeByInstallationTree();
/**
* 接收机构树
* @return List<Map>
* @param bizType 业务类型: notice-告知类, register-登记类
*/
List<LinkedHashMap> getReceiveUnitTree(String bizType);
Boolean checkUniquenessOfEQUCODE(String equCode);
} }
...@@ -2,10 +2,16 @@ package com.yeejoin.amos.boot.module.jg.biz.service.impl; ...@@ -2,10 +2,16 @@ package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.aspose.words.SaveFormat; import com.aspose.words.SaveFormat;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo; 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.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
...@@ -31,9 +37,11 @@ import com.yeejoin.amos.boot.module.jg.biz.utils.JsonUtils; ...@@ -31,9 +37,11 @@ import com.yeejoin.amos.boot.module.jg.biz.utils.JsonUtils;
import com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils; import com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils;
import com.yeejoin.amos.boot.module.jg.flc.api.fegin.PrivilegeFeginService; import com.yeejoin.amos.boot.module.jg.flc.api.fegin.PrivilegeFeginService;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory; import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
import com.yeejoin.amos.boot.module.ymt.api.entity.RegistrationInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.RegistrationInfoMapper;
import com.yeejoin.amos.component.feign.model.FeignClientResult; import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.systemctl.Systemctl; import com.yeejoin.amos.feign.systemctl.Systemctl;
...@@ -45,7 +53,9 @@ import lombok.extern.slf4j.Slf4j; ...@@ -45,7 +53,9 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -57,9 +67,7 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest; ...@@ -57,9 +67,7 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.*;
import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.net.URLEncoder; import java.net.URLEncoder;
...@@ -114,6 +122,11 @@ public class CommonServiceImpl implements ICommonService { ...@@ -114,6 +122,11 @@ public class CommonServiceImpl implements ICommonService {
//管辖机构redis缓存key //管辖机构redis缓存key
private static final String REGULATOR_UNIT_TREE = "REGULATOR_UNIT_TREE"; private static final String REGULATOR_UNIT_TREE = "REGULATOR_UNIT_TREE";
/**
* 接收机构redis缓存key前置
*/
private static final String PREFIX_NOTICE_RECEIVE_UNIT_TREE = "NOTICE_RECEIVE_UNIT_TREE";
//管辖机构redis缓存key //管辖机构redis缓存key
private static final String REGULATOR_UNIT_TREE_ALL = "REGULATOR_UNIT_TREE_ALL"; private static final String REGULATOR_UNIT_TREE_ALL = "REGULATOR_UNIT_TREE_ALL";
...@@ -156,6 +169,9 @@ public class CommonServiceImpl implements ICommonService { ...@@ -156,6 +169,9 @@ public class CommonServiceImpl implements ICommonService {
private static final String GMBG_PAGE_ID = "jgRegistrationInfo"; private static final String GMBG_PAGE_ID = "jgRegistrationInfo";
@Autowired @Autowired
RegistrationInfoMapper tzsJgRegistrationInfoMapper;
@Autowired
private IJgInstallationNoticeService iJgInstallationNoticeService; private IJgInstallationNoticeService iJgInstallationNoticeService;
@Autowired @Autowired
...@@ -316,6 +332,26 @@ public class CommonServiceImpl implements ICommonService { ...@@ -316,6 +332,26 @@ public class CommonServiceImpl implements ICommonService {
return resultTree; return resultTree;
} }
@Override
public List<LinkedHashMap> getReceiveUnitTree(String bizType) {
List<LinkedHashMap> result = (List<LinkedHashMap>) redisUtils.get(genRedisKey(bizType));
//判断redis是否存在接收机构树
return !ObjectUtils.isEmpty(result) ? result : creatReceiveUnitTree(bizType);
}
/**
* 验EQUCODE的唯一性
* @param equCode
* @return
*/
@Override
public Boolean checkUniquenessOfEQUCODE(String equCode) {
LambdaQueryWrapper<RegistrationInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(RegistrationInfo::getEquCode, equCode);
Integer count = tzsJgRegistrationInfoMapper.selectCount(wrapper);
return count > 0;
}
@Override @Override
public List<LinkedHashMap> getTree(ReginParams reginParams) { public List<LinkedHashMap> getTree(ReginParams reginParams) {
...@@ -341,6 +377,23 @@ public class CommonServiceImpl implements ICommonService { ...@@ -341,6 +377,23 @@ public class CommonServiceImpl implements ICommonService {
return resultTree; return resultTree;
} }
private List<LinkedHashMap> creatReceiveUnitTree(String bizType) {
FeignClientResult tree = privilegeFeginService.tree(RequestContext.getToken(), RequestContext.getAppKey(), RequestContext.getProduct());
List<LinkedHashMap> result = (List<LinkedHashMap>) tree.getResult();
// 删除非监管机构的单位
deleteData(result, REGULATOR_UNIT);
// 过滤符合指定业务的监管单位
filterTreeDataByType(result, bizType);
List<LinkedHashMap> supervisionTree = result.stream().filter(e -> code.equals(e.get("orgCode"))).collect(Collectors.toList());
List<LinkedHashMap> resultTree = updateNullChildren(supervisionTree);
redisUtils.set(genRedisKey(bizType), resultTree, 60 * 60 * 2);
return resultTree;
}
private String genRedisKey(String bizType) {
return PREFIX_NOTICE_RECEIVE_UNIT_TREE + "_" + bizType;
}
@Override @Override
public List<LinkedHashMap> getApproveTree(ReginParams reginParams) { public List<LinkedHashMap> getApproveTree(ReginParams reginParams) {
// 企业逻辑 // 企业逻辑
...@@ -361,7 +414,7 @@ public class CommonServiceImpl implements ICommonService { ...@@ -361,7 +414,7 @@ public class CommonServiceImpl implements ICommonService {
FeignClientResult tree = privilegeFeginService.queryAgencyTreeForCache(RequestContext.getToken(), RequestContext.getAppKey(), RequestContext.getProduct()); FeignClientResult tree = privilegeFeginService.queryAgencyTreeForCache(RequestContext.getToken(), RequestContext.getAppKey(), RequestContext.getProduct());
List<LinkedHashMap> result = (List<LinkedHashMap>) tree.getResult(); List<LinkedHashMap> result = (List<LinkedHashMap>) tree.getResult();
List<LinkedHashMap> children = (List<LinkedHashMap>) result.get(0).get("children"); List<LinkedHashMap> children = (List<LinkedHashMap>) result.get(0).get("children");
List<LinkedHashMap> treeData = deleteTreeData(children,REGULATOR_UNIT); List<LinkedHashMap> treeData = deleteTreeData(children, REGULATOR_UNIT);
List<LinkedHashMap> resultTree = updateNullChildren(treeData); List<LinkedHashMap> resultTree = updateNullChildren(treeData);
redisUtils.set(ADMINISTRATION_UNIT_TREE, resultTree); redisUtils.set(ADMINISTRATION_UNIT_TREE, resultTree);
return resultTree; return resultTree;
...@@ -373,7 +426,7 @@ public class CommonServiceImpl implements ICommonService { ...@@ -373,7 +426,7 @@ public class CommonServiceImpl implements ICommonService {
return resourceJson.get(type); return resourceJson.get(type);
} }
private List<LinkedHashMap> deleteTreeData(List<LinkedHashMap> result,String companyType) { private List<LinkedHashMap> deleteTreeData(List<LinkedHashMap> result, String companyType) {
Iterator it = result.iterator(); Iterator it = result.iterator();
while (it.hasNext()) { while (it.hasNext()) {
LinkedHashMap e = (LinkedHashMap) it.next(); LinkedHashMap e = (LinkedHashMap) it.next();
...@@ -386,22 +439,44 @@ public class CommonServiceImpl implements ICommonService { ...@@ -386,22 +439,44 @@ public class CommonServiceImpl implements ICommonService {
it.remove(); it.remove();
} }
if (!ObjectUtils.isEmpty(e.get("children"))) { if (!ObjectUtils.isEmpty(e.get("children"))) {
deleteTreeData((List<LinkedHashMap>) e.get("children"),companyType); deleteTreeData((List<LinkedHashMap>) e.get("children"), companyType);
} }
} }
return result; return result;
} }
private List<LinkedHashMap> deleteData(List<LinkedHashMap> result,String companyType) { private List<LinkedHashMap> filterTreeDataByType(List<LinkedHashMap> result, String type) {
Iterator<LinkedHashMap> it = result.iterator();
while (it.hasNext()) {
LinkedHashMap e = it.next();
if (!(e.get("description") != null && (e.get("description").toString().contains(type) || e.get("description").toString().contains("all")))) {
// 过滤非全部(all)公共及指定类型外的
it.remove();
}
// disabled的节点设置下不可编辑属性
if (e.get("description") != null && e.get("description").toString().contains(type + "-disabled")) {
// 过滤非全部(all)公共及指定类型外的
e.put("disabled",true);
}
if (!ObjectUtils.isEmpty(e.get("children"))) {
filterTreeDataByType((List<LinkedHashMap>) e.get("children"), type);
}
}
return result;
}
private List<LinkedHashMap> deleteData(List<LinkedHashMap> result, String companyType) {
Iterator it = result.iterator(); Iterator it = result.iterator();
while (it.hasNext()) { while (it.hasNext()) {
LinkedHashMap e = (LinkedHashMap) it.next(); LinkedHashMap e = (LinkedHashMap) it.next();
// 删除非行政审批局 // 删除非指定的单位类型
if (!e.get("companyType").toString().contains(companyType)) { if (!e.get("companyType").toString().contains(companyType)) {
it.remove(); it.remove();
} }
if (!ObjectUtils.isEmpty(e.get("children"))) { if (!ObjectUtils.isEmpty(e.get("children"))) {
deleteData((List<LinkedHashMap>) e.get("children"),companyType); deleteData((List<LinkedHashMap>) e.get("children"), companyType);
} }
} }
return result; return result;
...@@ -568,6 +643,90 @@ public class CommonServiceImpl implements ICommonService { ...@@ -568,6 +643,90 @@ public class CommonServiceImpl implements ICommonService {
} }
} }
/**
* 返回附件
*
* @param map 参数
* @param response 响应
*/
@Override
public void generatePdfPrint(Map<String, Object> map, HttpServletResponse response) {
String[] DEFAULT_KEYS = {
"useRegistrationCode", "useUnitName", "fullAddress", "equList", "equipDefine",
"equipCode", "equipCategory", "useInnerCode", "factoryNum", "giveOutYear",
"giveOutMonth", "giveOutDay"
};
if (CollectionUtils.isEmpty(map)) {
throw new IllegalArgumentException("参数不能为空");
}
// 设置默认值
Arrays.stream(DEFAULT_KEYS)
.forEach(key -> map.computeIfAbsent(key, k -> ""));
// 生成二维码
String qrCode = ImageUtils.generateQRCode((String) map.getOrDefault("supervisoryCode", ""), 100, 100);
map.put("supervisoryCode", qrCode); // 监管二维码 代码优化
// 读取资源文件夹下的模板
ClassPathResource resource = new ClassPathResource("templates/use-registration-model.pdf");
PdfReader reader = null;
ByteArrayOutputStream bos = null;
try {
InputStream inputStream = resource.getInputStream();
reader = new PdfReader(inputStream);
bos = new ByteArrayOutputStream();
PdfStamper pdfStamper = new PdfStamper(reader, bos);
AcroFields acroFields = pdfStamper.getAcroFields();
// 中文字体
BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
for (Map.Entry<String, Object> param : map.entrySet()) {
// 设置文本域的字体为中文字体
acroFields.setFieldProperty(param.getKey(), "textfont", font, null);
// 设置字体大小
acroFields.setFieldProperty(param.getKey(), "textsize", 12.0f, null);
// 将 map 中的值写到 pdf 模板对应的文本域中
acroFields.setField(param.getKey(), param.getValue() + "");
}
// 如果为false那么生成的PDF文件还能编辑,所以一定要设为true
pdfStamper.setFormFlattening(true);
pdfStamper.close();
// 返回文件
//FileExporter.exportFile(FileExporter.FileType.valueOf("pdf"), "套打使用登记证", bos.toByteArray(), response);
this.writeAttachment(response, bos.toByteArray());
} catch (IOException | DocumentException e) {
e.printStackTrace();
} finally {
try {
assert bos != null;
bos.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 返回附件
*
* @param response 响应
* @param content 附件内容
*/
private void writeAttachment(HttpServletResponse response, byte[] content) throws IOException {
// 设置 header 和 contentType
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("套打使用登记证.pdf", "UTF-8"));
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
// 输出附件
IoUtil.write(response.getOutputStream(), false, content);
}
/** /**
* word 转 pdf * word 转 pdf
...@@ -655,7 +814,7 @@ public class CommonServiceImpl implements ICommonService { ...@@ -655,7 +814,7 @@ public class CommonServiceImpl implements ICommonService {
noticeObj.put("receiveCompanyCode", !ObjectUtils.isEmpty(basicObj.get("receiveOrgCreditCode")) ? String.valueOf(basicObj.get("receiveOrgCreditCode")) : String.valueOf(basicObj.get("receiveOrgCreditCode1"))); noticeObj.put("receiveCompanyCode", !ObjectUtils.isEmpty(basicObj.get("receiveOrgCreditCode")) ? String.valueOf(basicObj.get("receiveOrgCreditCode")) : String.valueOf(basicObj.get("receiveOrgCreditCode1")));
noticeObj.put("techInfo", techInfoObj); noticeObj.put("techInfo", techInfoObj);
JSONObject jsonObject = new JSONObject(noticeObj); JSONObject jsonObject = new JSONObject(noticeObj);
return jgChangeRegistrationReformServiceImpl.save(jsonObject); return jgChangeRegistrationReformServiceImpl.save(jsonObject);
} else if (type.equals(ApplicationFormTypeEnum.YZBG.getBusinessCode())) { } else if (type.equals(ApplicationFormTypeEnum.YZBG.getBusinessCode())) {
noticeObj.put("receiveOrgCode", !ObjectUtils.isEmpty(basicObj.get("receiveOrgCreditCode")) ? String.valueOf(basicObj.get("receiveOrgCreditCode")) : String.valueOf(basicObj.get("receiveOrgCreditCode1"))); noticeObj.put("receiveOrgCode", !ObjectUtils.isEmpty(basicObj.get("receiveOrgCreditCode")) ? String.valueOf(basicObj.get("receiveOrgCreditCode")) : String.valueOf(basicObj.get("receiveOrgCreditCode1")));
...@@ -700,6 +859,7 @@ public class CommonServiceImpl implements ICommonService { ...@@ -700,6 +859,7 @@ public class CommonServiceImpl implements ICommonService {
} }
return null; return null;
} }
@Override @Override
public Object transfer(Map<String, Object> map) { public Object transfer(Map<String, Object> map) {
if (ObjectUtils.isEmpty(map.get("nextTaskId")) || map.get("nextTaskId") == null) { if (ObjectUtils.isEmpty(map.get("nextTaskId")) || map.get("nextTaskId") == null) {
...@@ -749,7 +909,7 @@ public class CommonServiceImpl implements ICommonService { ...@@ -749,7 +909,7 @@ public class CommonServiceImpl implements ICommonService {
String id = commonMapper.selectBusinessData(tableName, instanceId); String id = commonMapper.selectBusinessData(tableName, instanceId);
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee; id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee;
//修改业务数据 //修改业务数据
commonMapper.updateBusinessData(tableName, assignee, id, instanceId,nextTaskId); commonMapper.updateBusinessData(tableName, assignee, id, instanceId, nextTaskId);
return Boolean.TRUE; return Boolean.TRUE;
} }
...@@ -1152,6 +1312,7 @@ public class CommonServiceImpl implements ICommonService { ...@@ -1152,6 +1312,7 @@ public class CommonServiceImpl implements ICommonService {
}); });
return workflowResultDtoList; return workflowResultDtoList;
} }
public List<LinkedHashMap> getCompanyUser(Long companyId) { public List<LinkedHashMap> getCompanyUser(Long companyId) {
FeignClientResult result = privilegeFeginService.getCompanyUser(companyId); FeignClientResult result = privilegeFeginService.getCompanyUser(companyId);
List<LinkedHashMap> list = (List<LinkedHashMap>) result.getResult(); List<LinkedHashMap> list = (List<LinkedHashMap>) result.getResult();
......
...@@ -677,7 +677,7 @@ public class JgChangeRegistrationReformServiceImpl extends BaseService<JgChangeR ...@@ -677,7 +677,7 @@ public class JgChangeRegistrationReformServiceImpl extends BaseService<JgChangeR
} }
@Override @Override
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response) { public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>(); Map<String, Object> exportParamsMap = new HashMap<>();
//查询移装变更详情 //查询移装变更详情
JgChangeRegistrationReform jgChangeRegistrationReform = this.getById(sequenceNbr); JgChangeRegistrationReform jgChangeRegistrationReform = this.getById(sequenceNbr);
...@@ -789,8 +789,13 @@ public class JgChangeRegistrationReformServiceImpl extends BaseService<JgChangeR ...@@ -789,8 +789,13 @@ public class JgChangeRegistrationReformServiceImpl extends BaseService<JgChangeR
} }
exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum()); exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum());
} }
//调用生成使用登记证 if ("0".equals(printType)) {
commonServiceImpl.generateCertificateReport(exportParamsMap, response); //调用生成使用登记证
commonServiceImpl.generateCertificateReport(exportParamsMap, response);
}else{
//套打
commonServiceImpl.generatePdfPrint(exportParamsMap, response);
}
} }
/** /**
......
...@@ -1008,7 +1008,7 @@ public class JgChangeRegistrationTransferServiceImpl extends BaseService<JgChang ...@@ -1008,7 +1008,7 @@ public class JgChangeRegistrationTransferServiceImpl extends BaseService<JgChang
* *
* @param sequenceNbr * @param sequenceNbr
*/ */
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response) { public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>(); Map<String, Object> exportParamsMap = new HashMap<>();
//查询移装变更详情 //查询移装变更详情
JgChangeRegistrationTransfer transfer = this.getById(sequenceNbr); JgChangeRegistrationTransfer transfer = this.getById(sequenceNbr);
...@@ -1139,8 +1139,12 @@ public class JgChangeRegistrationTransferServiceImpl extends BaseService<JgChang ...@@ -1139,8 +1139,12 @@ public class JgChangeRegistrationTransferServiceImpl extends BaseService<JgChang
} }
exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum()); exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum());
} }
//调用生成使用登记证 if ("0".equals(printType)) {
iCommonService.generateCertificateReport(exportParamsMap, response); //调用生成使用登记证
commonService.generateCertificateReport(exportParamsMap, response);
}else{
commonService.generatePdfPrint(exportParamsMap, response);
}
} }
......
...@@ -899,7 +899,7 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg ...@@ -899,7 +899,7 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
* *
* @param sequenceNbr * @param sequenceNbr
*/ */
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response) { public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>(); Map<String, Object> exportParamsMap = new HashMap<>();
//查询移装变更详情 //查询移装变更详情
JgChangeRegistrationUnit transfer = this.getById(sequenceNbr); JgChangeRegistrationUnit transfer = this.getById(sequenceNbr);
...@@ -977,7 +977,13 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg ...@@ -977,7 +977,13 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
//调用生成使用登记证 //调用生成使用登记证
exportParamsMap.put("excelType","变更登记"); exportParamsMap.put("excelType","变更登记");
exportParamsMap.put("tableName","特种设备单位变更登记"); exportParamsMap.put("tableName","特种设备单位变更登记");
commonService.generateCertificateReport(exportParamsMap, response);
if ("0".equals(printType)) {
//调用生成使用登记证
commonService.generateCertificateReport(exportParamsMap, response);
}else{
commonService.generatePdfPrint(exportParamsMap, response);
}
} }
......
...@@ -137,6 +137,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg ...@@ -137,6 +137,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
equipMap = idxBizJgRegisterInfoService.getDetailFieldCamelCaseByRecord(equId); equipMap = idxBizJgRegisterInfoService.getDetailFieldCamelCaseByRecord(equId);
equipMap.put("useUnitCreditCodeUse", equipMap.getOrDefault("useUnitCreditCode", "")); equipMap.put("useUnitCreditCodeUse", equipMap.getOrDefault("useUnitCreditCode", ""));
equipMap.put("useUnitNameUse", equipMap.getOrDefault("useUnitName", "")); equipMap.put("useUnitNameUse", equipMap.getOrDefault("useUnitName", ""));
equipMap.put("equRegisterCode", equipMap.getOrDefault("equCode", ""));
for (String s : fields) { for (String s : fields) {
if (installationInfo.containsKey(s)) { if (installationInfo.containsKey(s)) {
installationInfo.put(s, JSON.parseArray(installationInfo.get(s).toString())); installationInfo.put(s, JSON.parseArray(installationInfo.get(s).toString()));
......
...@@ -47,7 +47,6 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil; ...@@ -47,7 +47,6 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest; import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.text.ParseException; import java.text.ParseException;
import java.time.LocalDate; import java.time.LocalDate;
...@@ -651,7 +650,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -651,7 +650,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
return null; return null;
} }
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response) { public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>(); Map<String, Object> exportParamsMap = new HashMap<>();
//查询使用登记详情 //查询使用登记详情
JgUseRegistration useRegistration = this.getById(sequenceNbr); JgUseRegistration useRegistration = this.getById(sequenceNbr);
...@@ -761,8 +760,13 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -761,8 +760,13 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
} }
exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum()); exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum());
} }
//调用生成使用登记证 if ("0".equals(printType)) {
commonService.generateCertificateReport(exportParamsMap, response); //调用生成使用登记证
commonService.generateCertificateReport(exportParamsMap, response);
}else{
//套打
commonService.generatePdfPrint(exportParamsMap, response);
}
} }
/** /**
......
...@@ -578,7 +578,7 @@ ...@@ -578,7 +578,7 @@
<w:sz w:val="24"/> <w:sz w:val="24"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN"/> <w:lang w:val="en-US" w:eastAsia="zh-CN"/>
</w:rPr> </w:rPr>
<w:t>设备注册代码</w:t> <w:t>设备代码</w:t>
</w:r> </w:r>
</w:p> </w:p>
</w:tc> </w:tc>
......
...@@ -6,6 +6,8 @@ import com.yeejoin.amos.boot.module.ymt.api.enums.EquipmentCategoryEnum; ...@@ -6,6 +6,8 @@ import com.yeejoin.amos.boot.module.ymt.api.enums.EquipmentCategoryEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.CategoryOtherInfoMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.CategoryOtherInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.service.IGenerateCodeService; import com.yeejoin.amos.boot.module.ymt.api.service.IGenerateCodeService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
...@@ -33,17 +35,19 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -33,17 +35,19 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
private static final String LOCK_KEY_SUPERVISORY = "sequence_lock_supervisory"; private static final String LOCK_KEY_SUPERVISORY = "sequence_lock_supervisory";
private static final String SEQUENCE_TYPE_UR = "%05d"; private static final String SEQUENCE_TYPE_UR = "%05d";
private static final String SEQUENCE_TYPE = "%07d"; private static final String SEQUENCE_TYPE = "%07d";
private static final long LOCK_EXPIRATION_SECONDS = 60;
private final RedisTemplate<String, String> redisTemplate; private final RedisTemplate<String, String> redisTemplate;
private final StringRedisTemplate stringRedisTemplate; private final StringRedisTemplate stringRedisTemplate;
private final CategoryOtherInfoMapper categoryOtherInfoMapper; private final CategoryOtherInfoMapper categoryOtherInfoMapper;
private final RedissonClient redissonClient;
private String rulePrefix = ""; private String rulePrefix = "";
public GenerateCodeServiceImpl(RedisTemplate<String, String> redisTemplate, StringRedisTemplate stringRedisTemplate, CategoryOtherInfoMapper categoryOtherInfoMapper) { public GenerateCodeServiceImpl(RedisTemplate<String, String> redisTemplate, StringRedisTemplate stringRedisTemplate, CategoryOtherInfoMapper categoryOtherInfoMapper, RedissonClient redissonClient) {
this.redisTemplate = redisTemplate; this.redisTemplate = redisTemplate;
this.redissonClient = redissonClient;
this.stringRedisTemplate = stringRedisTemplate; this.stringRedisTemplate = stringRedisTemplate;
this.categoryOtherInfoMapper = categoryOtherInfoMapper; this.categoryOtherInfoMapper = categoryOtherInfoMapper;
} }
/** /**
* 生成申请单编号(13位,GZ20231214000) * 生成申请单编号(13位,GZ20231214000)
* *
...@@ -109,9 +113,11 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -109,9 +113,11 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
private String generateSupervisorySequence(String sequenceKey) { private String generateSupervisorySequence(String sequenceKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码 // 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(GenerateCodeServiceImpl.LOCK_KEY_SUPERVISORY); RLock lock = redissonClient.getLock(LOCK_KEY_SUPERVISORY);
if (Boolean.TRUE.equals(lockAcquired)) { try {
try { log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码 // 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue(); ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey); String currentSequenceStr = valueOps.get(sequenceKey);
...@@ -126,16 +132,21 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -126,16 +132,21 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
// 更新顺序码 // 更新顺序码
valueOps.set(sequenceKey, formattedSequence); valueOps.set(sequenceKey, formattedSequence);
return sequenceKey + "-" + formattedSequence; return sequenceKey + "-" + formattedSequence;
} finally { } else {
releaseLock(GenerateCodeServiceImpl.LOCK_KEY_SUPERVISORY); throw new RuntimeException("Failed to acquire lock for sequence generation");
} }
} else { } catch (InterruptedException e) {
throw new RuntimeException("Failed to acquire lock for sequence generation"); Thread.currentThread().interrupt(); // 保持中断状态
throw new RuntimeException("Thread interrupted while acquiring lock", e);
} finally {
lock.unlock(); // 释放锁
log.info("释放锁");
} }
} }
/** /**
* 监管码为空的话,初始化Redis * 监管码为空的话,初始化Redis
*
* @param sequenceKey key * @param sequenceKey key
* @return 顺序码 * @return 顺序码
*/ */
...@@ -165,11 +176,13 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -165,11 +176,13 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
* @param batchSize 批量生成个数 * @param batchSize 批量生成个数
* @return List * @return List
*/ */
public synchronized List<String> generateBatchSequence(String sequenceKey, int batchSize) { public List<String> generateBatchSequence(String sequenceKey, int batchSize) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码 RLock lock = redissonClient.getLock(LOCK_KEY_AF);
Boolean lockAcquired = obtainLock(LOCK_KEY_AF);
if (Boolean.TRUE.equals(lockAcquired)) { try {
try { log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码 // 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue(); ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey); String currentSequenceStr = valueOps.get(sequenceKey);
...@@ -192,12 +205,16 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -192,12 +205,16 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
} }
return sequenceList; return sequenceList;
} finally { } else {
releaseLock(LOCK_KEY_AF); // 获取锁失败,可以选择重试或采取其他策略
throw new RuntimeException("Failed to acquire lock for sequence generation");
} }
} else { } catch (InterruptedException e) {
// 获取锁失败,可以选择重试或采取其他策略 Thread.currentThread().interrupt(); // 保持中断状态
throw new RuntimeException("Failed to acquire lock for sequence generation"); throw new RuntimeException("Thread interrupted while acquiring lock", e);
} finally {
lock.unlock(); // 释放锁
log.info("释放锁");
} }
} }
...@@ -211,9 +228,13 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -211,9 +228,13 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
*/ */
public String generateSequence(String sequenceKey, String sequenceType, String lockKey) { public String generateSequence(String sequenceKey, String sequenceType, String lockKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码 // 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(lockKey); RLock lock = redissonClient.getLock(lockKey);
if (Boolean.TRUE.equals(lockAcquired)) {
try { try {
log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码 // 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue(); ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey); String currentSequenceStr = valueOps.get(sequenceKey);
...@@ -236,40 +257,47 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -236,40 +257,47 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
log.info("===================>返回《{}》顺序码:{}<===================", sequenceKey, result); log.info("===================>返回《{}》顺序码:{}<===================", sequenceKey, result);
return result; return result;
} else {
} finally { throw new RuntimeException("Failed to acquire lock for sequence generation");
releaseLock(lockKey);
} }
} else { } catch (InterruptedException e) {
throw new RuntimeException("Failed to acquire lock for sequence generation"); Thread.currentThread().interrupt(); // 保持中断状态
throw new RuntimeException("Thread interrupted while acquiring lock", e);
} finally {
lock.unlock(); // 释放锁
log.info("释放锁");
} }
} }
/** /**
* 生成顺序码 * 生成顺序码
* *
* @param sequenceKey redisKey * @param sequenceKey Redis Key
* @param sequenceType 生成码类型 * @param sequenceType 生成码类型
* @param lockKey redis锁 * @param lockKey Redis锁Key
* @return s * @return 生成的顺序码
*/ */
public String generateElevatorSequence(String sequenceKey, String sequenceType, String lockKey) { public String generateElevatorSequence(String sequenceKey, String sequenceType, String lockKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码 // 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(lockKey); RLock lock = redissonClient.getLock(lockKey);
if (Boolean.TRUE.equals(lockAcquired)) {
try { try {
log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码 // 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue(); ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey); String currentSequenceStr = valueOps.get(sequenceKey);
// 如果为空,则初始化为0 // 如果为空,则初始化为0
if (currentSequenceStr == null) { if (currentSequenceStr == null) {
currentSequenceStr = EquipmentCategoryEnum.getCodeByValue(sequenceKey); String initialCode = EquipmentCategoryEnum.getCodeByValue(sequenceKey);
log.info("===================>获取《{}》初始码:{}<===================", sequenceKey, currentSequenceStr); log.info("===================>获取《{}》初始码:{}<===================", sequenceKey, initialCode);
return currentSequenceStr; return initialCode;
} }
Long currentSequence = Long.parseLong(currentSequenceStr);
Long currentSequence = Long.parseLong(currentSequenceStr);
log.info("===================>获取《{}》当前顺序码:{}<===================", sequenceKey, currentSequenceStr); log.info("===================>获取《{}》当前顺序码:{}<===================", sequenceKey, currentSequenceStr);
currentSequence++; currentSequence++;
// 生成顺序码 // 生成顺序码
String formattedSequence = String.format(sequenceType, currentSequence); String formattedSequence = String.format(sequenceType, currentSequence);
...@@ -277,12 +305,15 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -277,12 +305,15 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
// 更新顺序码 // 更新顺序码
valueOps.set(sequenceKey, formattedSequence); valueOps.set(sequenceKey, formattedSequence);
return formattedSequence; return formattedSequence;
} else {
} finally { throw new RuntimeException("Failed to acquire lock for sequence generation");
releaseLock(lockKey);
} }
} else { } catch (InterruptedException e) {
throw new RuntimeException("Failed to acquire lock for sequence generation"); Thread.currentThread().interrupt(); // 保持中断状态
throw new RuntimeException("Thread interrupted while acquiring lock", e);
} finally {
lock.unlock(); // 释放锁
log.info("释放锁");
} }
} }
...@@ -296,9 +327,11 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -296,9 +327,11 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
*/ */
public boolean reduceSequence(String sequenceKey, String sequenceType, String lockKey) { public boolean reduceSequence(String sequenceKey, String sequenceType, String lockKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码 // 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(lockKey); RLock lock = redissonClient.getLock(lockKey);
if (Boolean.TRUE.equals(lockAcquired)) { try {
try { lock.lock(); // 获取锁
log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码 // 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue(); ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey); String currentSequenceStr = valueOps.get(sequenceKey);
...@@ -321,36 +354,16 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService { ...@@ -321,36 +354,16 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
log.warn("===================>无法回退《{}》顺序码,当前顺序码已为0<===================", sequenceKey); log.warn("===================>无法回退《{}》顺序码,当前顺序码已为0<===================", sequenceKey);
return false; // 无法回退,当前顺序码已为0 return false; // 无法回退,当前顺序码已为0
} }
} finally { } else {
releaseLock(lockKey); throw new RuntimeException("Failed to acquire lock for sequence generation");
} }
} else { } catch (InterruptedException e) {
throw new RuntimeException("Failed to acquire lock for sequence generation"); Thread.currentThread().interrupt(); // 保持中断状态
} throw new RuntimeException("Thread interrupted while acquiring lock", e);
} } finally {
lock.unlock(); // 释放锁
/** log.info("释放锁");
* 分布式锁
*
* @param lockKey lockKey
* @return bool
*/
private Boolean obtainLock(String lockKey) {
Boolean lockAcquired = redisTemplate.opsForValue().setIfAbsent(lockKey, LOCK_VALUE);
if (lockAcquired != null && lockAcquired) {
redisTemplate.expire(lockKey, LOCK_EXPIRATION_SECONDS, TimeUnit.SECONDS);
} }
return lockAcquired;
}
/**
* 释放锁
*
* @param lockKey lockKey
*/
private void releaseLock(String lockKey) {
redisTemplate.delete(lockKey);
} }
/** /**
......
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