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 {
* @param sequenceNbr
* @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
void revocation(String instanceId);
void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response);
void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType);
Map<String, Object> getDetailFieldCamelCase(String record);
}
......@@ -15,7 +15,6 @@ import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
......@@ -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
......@@ -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 {
return ResponseHelper.buildResponse(map);
}
/**
* 改造登记-导出使用登记证
* @param response 返回
* @param sequenceNbr 主键
* @param printType 打印类型,0-正常打印,1-套打(默认0)
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "改造登记-导出使用登记证", notes = "改造登记-导出使用登记证")
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr){
jgChangeRegistrationReformServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response);
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr,
@RequestParam(value = "printType", defaultValue = "0") String printType){
jgChangeRegistrationReformServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response, printType);
}
}
......@@ -157,11 +157,18 @@ public class JgChangeRegistrationTransferController extends BaseController {
return ResponseHelper.buildResponse(jgChangeRegistrationTransferService.queryListForPage(page,params, type));
}
/**
* 导出使用登记证
* @param response 返回
* @param sequenceNbr 主键
* @param printType 打印类型,0-正常打印,1-套打(默认0)
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证")
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr){
jgChangeRegistrationTransferService.exportUseRegistrationCertificate(sequenceNbr, response);
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr,
@RequestParam(value = "printType", defaultValue = "0") String printType){
jgChangeRegistrationTransferService.exportUseRegistrationCertificate(sequenceNbr, response, printType);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping (value = "/detailFieldCamelCase")
......
......@@ -199,11 +199,18 @@ public class JgChangeRegistrationUnitController extends BaseController {
}
/**
* 导出使用登记证
* @param response 返回
* @param sequenceNbr 主键
* @param printType 打印类型,0-正常打印,1-套打(默认0)
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证")
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr) throws IOException {
jgChangeRegistrationUnitServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response);
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr,
@RequestParam(value = "printType", defaultValue = "0") String printType) {
jgChangeRegistrationUnitServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response, printType);
}
}
......@@ -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.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.File;
import java.util.*;
/**
......@@ -195,4 +192,25 @@ public class JgTransferNoticeController extends BaseController {
map.put("supervisoryCode", "YZGZ20231225001"); // 监管二维码
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 {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "导出使用登记证", notes = "导出使用登记证")
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr) {
jgUseRegistrationServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response);
public void exportImageZip(HttpServletResponse response, @RequestParam("sequenceNbr") String sequenceNbr,
@RequestParam(value = "printType", defaultValue = "0") String printType) {
jgUseRegistrationServiceImpl.exportUseRegistrationCertificate(sequenceNbr, response, printType);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
......
......@@ -38,6 +38,8 @@ public interface ICommonService {
void generateCertificateReport(Map<String, Object> map, HttpServletResponse response);
void generatePdfPrint(Map<String, Object> map, HttpServletResponse response);
List<LinkedHashMap> creatApproveTree();
List<Map<String, Object>> superviseBusinessCategory(String type);
......@@ -53,4 +55,13 @@ public interface ICommonService {
List<LinkedHashMap> getCreatTreeByInstallation();
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;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aspose.words.SaveFormat;
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.ReginParams;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
......@@ -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.flc.api.fegin.PrivilegeFeginService;
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.FlowStatusEnum;
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.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.systemctl.Systemctl;
......@@ -45,7 +53,9 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
......@@ -57,9 +67,7 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.net.URLEncoder;
......@@ -114,6 +122,11 @@ public class CommonServiceImpl implements ICommonService {
//管辖机构redis缓存key
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
private static final String REGULATOR_UNIT_TREE_ALL = "REGULATOR_UNIT_TREE_ALL";
......@@ -156,6 +169,9 @@ public class CommonServiceImpl implements ICommonService {
private static final String GMBG_PAGE_ID = "jgRegistrationInfo";
@Autowired
RegistrationInfoMapper tzsJgRegistrationInfoMapper;
@Autowired
private IJgInstallationNoticeService iJgInstallationNoticeService;
@Autowired
......@@ -316,6 +332,26 @@ public class CommonServiceImpl implements ICommonService {
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
public List<LinkedHashMap> getTree(ReginParams reginParams) {
......@@ -341,6 +377,23 @@ public class CommonServiceImpl implements ICommonService {
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
public List<LinkedHashMap> getApproveTree(ReginParams reginParams) {
// 企业逻辑
......@@ -361,7 +414,7 @@ public class CommonServiceImpl implements ICommonService {
FeignClientResult tree = privilegeFeginService.queryAgencyTreeForCache(RequestContext.getToken(), RequestContext.getAppKey(), RequestContext.getProduct());
List<LinkedHashMap> result = (List<LinkedHashMap>) tree.getResult();
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);
redisUtils.set(ADMINISTRATION_UNIT_TREE, resultTree);
return resultTree;
......@@ -373,7 +426,7 @@ public class CommonServiceImpl implements ICommonService {
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();
while (it.hasNext()) {
LinkedHashMap e = (LinkedHashMap) it.next();
......@@ -386,22 +439,44 @@ public class CommonServiceImpl implements ICommonService {
it.remove();
}
if (!ObjectUtils.isEmpty(e.get("children"))) {
deleteTreeData((List<LinkedHashMap>) e.get("children"),companyType);
deleteTreeData((List<LinkedHashMap>) e.get("children"), companyType);
}
}
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();
while (it.hasNext()) {
LinkedHashMap e = (LinkedHashMap) it.next();
// 删除非行政审批局
// 删除非指定的单位类型
if (!e.get("companyType").toString().contains(companyType)) {
it.remove();
}
if (!ObjectUtils.isEmpty(e.get("children"))) {
deleteData((List<LinkedHashMap>) e.get("children"),companyType);
deleteData((List<LinkedHashMap>) e.get("children"), companyType);
}
}
return result;
......@@ -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
......@@ -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("techInfo", techInfoObj);
JSONObject jsonObject = new JSONObject(noticeObj);
return jgChangeRegistrationReformServiceImpl.save(jsonObject);
return jgChangeRegistrationReformServiceImpl.save(jsonObject);
} 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")));
......@@ -700,6 +859,7 @@ public class CommonServiceImpl implements ICommonService {
}
return null;
}
@Override
public Object transfer(Map<String, Object> map) {
if (ObjectUtils.isEmpty(map.get("nextTaskId")) || map.get("nextTaskId") == null) {
......@@ -749,7 +909,7 @@ public class CommonServiceImpl implements ICommonService {
String id = commonMapper.selectBusinessData(tableName, instanceId);
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee;
//修改业务数据
commonMapper.updateBusinessData(tableName, assignee, id, instanceId,nextTaskId);
commonMapper.updateBusinessData(tableName, assignee, id, instanceId, nextTaskId);
return Boolean.TRUE;
}
......@@ -1152,6 +1312,7 @@ public class CommonServiceImpl implements ICommonService {
});
return workflowResultDtoList;
}
public List<LinkedHashMap> getCompanyUser(Long companyId) {
FeignClientResult result = privilegeFeginService.getCompanyUser(companyId);
List<LinkedHashMap> list = (List<LinkedHashMap>) result.getResult();
......
......@@ -677,7 +677,7 @@ public class JgChangeRegistrationReformServiceImpl extends BaseService<JgChangeR
}
@Override
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response) {
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>();
//查询移装变更详情
JgChangeRegistrationReform jgChangeRegistrationReform = this.getById(sequenceNbr);
......@@ -789,8 +789,13 @@ public class JgChangeRegistrationReformServiceImpl extends BaseService<JgChangeR
}
exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum());
}
//调用生成使用登记证
commonServiceImpl.generateCertificateReport(exportParamsMap, response);
if ("0".equals(printType)) {
//调用生成使用登记证
commonServiceImpl.generateCertificateReport(exportParamsMap, response);
}else{
//套打
commonServiceImpl.generatePdfPrint(exportParamsMap, response);
}
}
/**
......
......@@ -1008,7 +1008,7 @@ public class JgChangeRegistrationTransferServiceImpl extends BaseService<JgChang
*
* @param sequenceNbr
*/
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response) {
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>();
//查询移装变更详情
JgChangeRegistrationTransfer transfer = this.getById(sequenceNbr);
......@@ -1139,8 +1139,12 @@ public class JgChangeRegistrationTransferServiceImpl extends BaseService<JgChang
}
exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum());
}
//调用生成使用登记证
iCommonService.generateCertificateReport(exportParamsMap, response);
if ("0".equals(printType)) {
//调用生成使用登记证
commonService.generateCertificateReport(exportParamsMap, response);
}else{
commonService.generatePdfPrint(exportParamsMap, response);
}
}
......
......@@ -899,7 +899,7 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
*
* @param sequenceNbr
*/
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response) {
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>();
//查询移装变更详情
JgChangeRegistrationUnit transfer = this.getById(sequenceNbr);
......@@ -977,7 +977,13 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
//调用生成使用登记证
exportParamsMap.put("excelType","变更登记");
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
equipMap = idxBizJgRegisterInfoService.getDetailFieldCamelCaseByRecord(equId);
equipMap.put("useUnitCreditCodeUse", equipMap.getOrDefault("useUnitCreditCode", ""));
equipMap.put("useUnitNameUse", equipMap.getOrDefault("useUnitName", ""));
equipMap.put("equRegisterCode", equipMap.getOrDefault("equCode", ""));
for (String s : fields) {
if (installationInfo.containsKey(s)) {
installationInfo.put(s, JSON.parseArray(installationInfo.get(s).toString()));
......
......@@ -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.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.time.LocalDate;
......@@ -651,7 +650,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
return null;
}
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response) {
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>();
//查询使用登记详情
JgUseRegistration useRegistration = this.getById(sequenceNbr);
......@@ -761,8 +760,13 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
}
exportParamsMap.put("factoryNum", factoryInfo.getFactoryNum());
}
//调用生成使用登记证
commonService.generateCertificateReport(exportParamsMap, response);
if ("0".equals(printType)) {
//调用生成使用登记证
commonService.generateCertificateReport(exportParamsMap, response);
}else{
//套打
commonService.generatePdfPrint(exportParamsMap, response);
}
}
/**
......
......@@ -578,7 +578,7 @@
<w:sz w:val="24"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN"/>
</w:rPr>
<w:t>设备注册代码</w:t>
<w:t>设备代码</w:t>
</w:r>
</w:p>
</w:tc>
......
......@@ -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.service.IGenerateCodeService;
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.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
......@@ -33,17 +35,19 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
private static final String LOCK_KEY_SUPERVISORY = "sequence_lock_supervisory";
private static final String SEQUENCE_TYPE_UR = "%05d";
private static final String SEQUENCE_TYPE = "%07d";
private static final long LOCK_EXPIRATION_SECONDS = 60;
private final RedisTemplate<String, String> redisTemplate;
private final StringRedisTemplate stringRedisTemplate;
private final CategoryOtherInfoMapper categoryOtherInfoMapper;
private final RedissonClient redissonClient;
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.redissonClient = redissonClient;
this.stringRedisTemplate = stringRedisTemplate;
this.categoryOtherInfoMapper = categoryOtherInfoMapper;
}
/**
* 生成申请单编号(13位,GZ20231214000)
*
......@@ -109,9 +113,11 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
private String generateSupervisorySequence(String sequenceKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(GenerateCodeServiceImpl.LOCK_KEY_SUPERVISORY);
if (Boolean.TRUE.equals(lockAcquired)) {
try {
RLock lock = redissonClient.getLock(LOCK_KEY_SUPERVISORY);
try {
log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey);
......@@ -126,16 +132,21 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
// 更新顺序码
valueOps.set(sequenceKey, formattedSequence);
return sequenceKey + "-" + formattedSequence;
} finally {
releaseLock(GenerateCodeServiceImpl.LOCK_KEY_SUPERVISORY);
} else {
throw new RuntimeException("Failed to acquire lock for sequence generation");
}
} 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 {
lock.unlock(); // 释放锁
log.info("释放锁");
}
}
/**
* 监管码为空的话,初始化Redis
*
* @param sequenceKey key
* @return 顺序码
*/
......@@ -165,11 +176,13 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
* @param batchSize 批量生成个数
* @return List
*/
public synchronized List<String> generateBatchSequence(String sequenceKey, int batchSize) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(LOCK_KEY_AF);
if (Boolean.TRUE.equals(lockAcquired)) {
try {
public List<String> generateBatchSequence(String sequenceKey, int batchSize) {
RLock lock = redissonClient.getLock(LOCK_KEY_AF);
try {
log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey);
......@@ -192,12 +205,16 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
}
return sequenceList;
} finally {
releaseLock(LOCK_KEY_AF);
} else {
// 获取锁失败,可以选择重试或采取其他策略
throw new RuntimeException("Failed to acquire lock for sequence generation");
}
} 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 {
lock.unlock(); // 释放锁
log.info("释放锁");
}
}
......@@ -211,9 +228,13 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
*/
public String generateSequence(String sequenceKey, String sequenceType, String lockKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(lockKey);
if (Boolean.TRUE.equals(lockAcquired)) {
try {
RLock lock = redissonClient.getLock(lockKey);
try {
log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey);
......@@ -236,40 +257,47 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
log.info("===================>返回《{}》顺序码:{}<===================", sequenceKey, result);
return result;
} finally {
releaseLock(lockKey);
} else {
throw new RuntimeException("Failed to acquire lock for sequence generation");
}
} 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 {
lock.unlock(); // 释放锁
log.info("释放锁");
}
}
/**
* 生成顺序码
*
* @param sequenceKey redisKey
* @param sequenceKey Redis Key
* @param sequenceType 生成码类型
* @param lockKey redis锁
* @return s
* @param lockKey Redis锁Key
* @return 生成的顺序码
*/
public String generateElevatorSequence(String sequenceKey, String sequenceType, String lockKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(lockKey);
if (Boolean.TRUE.equals(lockAcquired)) {
try {
RLock lock = redissonClient.getLock(lockKey);
try {
log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey);
// 如果为空,则初始化为0
if (currentSequenceStr == null) {
currentSequenceStr = EquipmentCategoryEnum.getCodeByValue(sequenceKey);
log.info("===================>获取《{}》初始码:{}<===================", sequenceKey, currentSequenceStr);
return currentSequenceStr;
String initialCode = EquipmentCategoryEnum.getCodeByValue(sequenceKey);
log.info("===================>获取《{}》初始码:{}<===================", sequenceKey, initialCode);
return initialCode;
}
Long currentSequence = Long.parseLong(currentSequenceStr);
Long currentSequence = Long.parseLong(currentSequenceStr);
log.info("===================>获取《{}》当前顺序码:{}<===================", sequenceKey, currentSequenceStr);
currentSequence++;
// 生成顺序码
String formattedSequence = String.format(sequenceType, currentSequence);
......@@ -277,12 +305,15 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
// 更新顺序码
valueOps.set(sequenceKey, formattedSequence);
return formattedSequence;
} finally {
releaseLock(lockKey);
} else {
throw new RuntimeException("Failed to acquire lock for sequence generation");
}
} 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 {
lock.unlock(); // 释放锁
log.info("释放锁");
}
}
......@@ -296,9 +327,11 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
*/
public boolean reduceSequence(String sequenceKey, String sequenceType, String lockKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
Boolean lockAcquired = obtainLock(lockKey);
if (Boolean.TRUE.equals(lockAcquired)) {
try {
RLock lock = redissonClient.getLock(lockKey);
try {
lock.lock(); // 获取锁
log.info("尝试获取锁: {}", lock.tryLock(10, TimeUnit.SECONDS));
if (lock.isLocked()) {
// 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey);
......@@ -321,36 +354,16 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
log.warn("===================>无法回退《{}》顺序码,当前顺序码已为0<===================", sequenceKey);
return false; // 无法回退,当前顺序码已为0
}
} finally {
releaseLock(lockKey);
} else {
throw new RuntimeException("Failed to acquire lock for sequence generation");
}
} else {
throw new RuntimeException("Failed to acquire lock for sequence generation");
}
}
/**
* 分布式锁
*
* @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);
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 保持中断状态
throw new RuntimeException("Thread interrupted while acquiring lock", e);
} finally {
lock.unlock(); // 释放锁
log.info("释放锁");
}
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