Browse Source

fix:[资源库管理][供试品管理]导出

master
HanLong 2 months ago
parent
commit
2190103db8
7 changed files with 453 additions and 3 deletions
  1. +36
    -0
      hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/controller/GspController.java
  2. +22
    -0
      hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/domain/GspTz.java
  3. +12
    -0
      hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/mapper/GspTzMapper.java
  4. +3
    -3
      hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/service/impl/GspTzServiceImpl.java
  5. +169
    -0
      hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/lang/GspJcnrUtil.java
  6. +201
    -0
      hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/GspPdf.java
  7. +10
    -0
      hxhq-modules/hxhq-system/src/main/resources/mapper/business/GspTzMapper.xml

+ 36
- 0
hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/controller/GspController.java View File

@ -9,10 +9,13 @@ import com.hxhq.business.form.gsp.*;
import com.hxhq.business.form.gyzj.SearchForm; import com.hxhq.business.form.gyzj.SearchForm;
import com.hxhq.business.service.IGspJcgjService; import com.hxhq.business.service.IGspJcgjService;
import com.hxhq.business.service.IGspTzService; import com.hxhq.business.service.IGspTzService;
import com.hxhq.business.utils.pdf.PdfExportUtil;
import com.hxhq.common.core.constant.Constants; import com.hxhq.common.core.constant.Constants;
import com.hxhq.common.security.annotation.Logical;
import com.hxhq.common.security.annotation.RequiresPermissions; import com.hxhq.common.security.annotation.RequiresPermissions;
import com.hxhq.common.security.utils.SecurityUtils; import com.hxhq.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.hxhq.business.service.IGspService; import com.hxhq.business.service.IGspService;
@ -40,6 +43,39 @@ public class GspController extends BaseController {
private IGspTzService gspTzService; private IGspTzService gspTzService;
/** /**
* 上传文件存储在本地的根路径
*/
@Value("${file.path}")
private String localFilePath;
/**
* 资源映射路径 前缀
*/
@Value("${file.prefix}")
public String localFilePrefix;
/**
* 导出
*/
@RequiresPermissions(value={"business:resource:mjy:xq","business:archive:mjy:xq"}, logical= Logical.OR)
@GetMapping(value = "/exportDetail")
public AjaxResult exportDetail(Long id,String lang) {
GspJcgj gspJcgj = new GspJcgj();
gspJcgj.setGspId(id);
List<GspJcgj> jcgjList = gspJcgjService.queryList(gspJcgj);
GspTz gspTz = new GspTz();
gspTz.setGspId(id);
List<GspTz> tzList = gspTzService.queryList(gspTz);
return AjaxResult.success(localFilePrefix + PdfExportUtil.export(
"com.hxhq.business.utils.pdf.resource.GspPdf",
"exportDetail",
gspService.queryInfo(id),
tzList,
jcgjList,
lang,
localFilePath));
}
/**
* 试验物资列表 * 试验物资列表
*/ */
@GetMapping("/studyList") @GetMapping("/studyList")

+ 22
- 0
hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/domain/GspTz.java View File

@ -1,5 +1,6 @@
package com.hxhq.business.domain; package com.hxhq.business.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.hxhq.common.core.domain.MpBaseEntity; import com.hxhq.common.core.domain.MpBaseEntity;
@ -52,6 +53,27 @@ public class GspTz extends MpBaseEntity
/** 签名人id */ /** 签名人id */
private Long qmrId; private Long qmrId;
private Long bdId;
/** 表单名称 */
@TableField(exist = false)
private String bdMc;
public String getBdMc() {
return bdMc;
}
public void setBdMc(String bdMc) {
this.bdMc = bdMc;
}
public Long getBdId() {
return bdId;
}
public void setBdId(Long bdId) {
this.bdId = bdId;
}
public void setGspId(Long gspId) public void setGspId(Long gspId)
{ {

+ 12
- 0
hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/mapper/GspTzMapper.java View File

@ -1,7 +1,13 @@
package com.hxhq.business.mapper; package com.hxhq.business.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.hxhq.business.domain.GspTz; import com.hxhq.business.domain.GspTz;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hxhq.business.domain.GyzjTz;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 供试品-台账Mapper接口 * 供试品-台账Mapper接口
* *
@ -11,4 +17,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface GspTzMapper extends BaseMapper<GspTz> public interface GspTzMapper extends BaseMapper<GspTz>
{ {
/**
* 查询列表
* @param queryWrapper
* @return
*/
List<GspTz> queryList(@Param("ew") Wrapper<GspTz> queryWrapper);
} }

+ 3
- 3
hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/service/impl/GspTzServiceImpl.java View File

@ -34,9 +34,9 @@ public class GspTzServiceImpl extends ServiceImpl implements
if(form.getGspId()==null||form.getGspId().longValue()<0){ if(form.getGspId()==null||form.getGspId().longValue()<0){
throw new SecurityException("供试品id不能为空"); throw new SecurityException("供试品id不能为空");
} }
queryWrapper.eq("gsp_id",form.getGspId());
queryWrapper.orderByDesc("id");
return this.list(queryWrapper);
queryWrapper.eq("t.gsp_id",form.getGspId());
queryWrapper.orderByDesc("t.id");
return baseMapper.queryList(queryWrapper);
} }
@Override @Override

+ 169
- 0
hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/lang/GspJcnrUtil.java View File

@ -0,0 +1,169 @@
package com.hxhq.business.utils.lang;
import com.hxhq.business.utils.JctUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author tanfei
*/
public class GspJcnrUtil {
private static final Logger logger = LoggerFactory.getLogger(GspJcnrUtil.class.getName());
private static HashMap<String,String> mapLang=new HashMap<>();
static {
mapLang.put("入库","In Storage");
mapLang.put("未入库","Not in Storage");
mapLang.put("已发放","In Use");
mapLang.put("已锁定","Locked");
mapLang.put("待归档","Pending Archiving");
mapLang.put("归档","Archived");
mapLang.put("待解档","Pending De-archiving");
mapLang.put("借阅开始时间","Checkout Start Date");
mapLang.put("借阅结束时间","Checkout End Date");
mapLang.put("处置方式","Dispose Method");
mapLang.put("处置原因","Reason");
mapLang.put("处置","Dispose");
mapLang.put("处置量","Amount");
mapLang.put("使用","Usage");
mapLang.put("配制完成","Configuration completed");
mapLang.put("处置人","Operator");
mapLang.put("复核人","Reviewer");
mapLang.put("监督人","Supervisor");
mapLang.put("钥匙1领取人","Key 1 User");
mapLang.put("钥匙2领取人","Key 2 User");
mapLang.put("出库量","Out Amount");
mapLang.put("转移条件","Transfer Condition");
mapLang.put("出库毛重","Check-out Gross Weight");
mapLang.put("入库毛重","Check-in Gross Weight");
mapLang.put("使用量","Usage Amount");
mapLang.put("归还人1","Returner 1");
mapLang.put("归还人2","Returner 2");
mapLang.put("库管员1","Warehouse Keeper 1");
mapLang.put("库管员2","Warehouse Keeper 2");
mapLang.put("签名人1","Signed By 1");
mapLang.put("签名人2","Signed By 2");
mapLang.put("入库位置","Check-in Location");
mapLang.put("入库条件","Check-in Condition");
mapLang.put("入库净重","Check-in Net Weight");
mapLang.put("入库量","Total Amount");
mapLang.put("申请备注","Apply Comment");
mapLang.put("审核备注","Approve Comment");
mapLang.put("领取人","Recipient");
mapLang.put("领取人2","Recipient 2");
mapLang.put("发放人","Issuer");
mapLang.put("发放人2","Issuer 2");
mapLang.put("存储条件","Storage Condition");
mapLang.put("存储位置","Storage Location");
mapLang.put("使用人","User");
mapLang.put("领取/归还人/入库申请人","Recipient/Returner/Check-in Applicant");
mapLang.put("发放/接收人","Issuer/Receiver");
mapLang.put("操作类型","Action");
mapLang.put("操作量","Amount");
mapLang.put("备注/原因","Comment/Reason");
mapLang.put("操作时间","Datetime");
mapLang.put("名称","Name");
mapLang.put("编号","ID");
mapLang.put("浓度","Concentration");
mapLang.put("库存量","Amount");
mapLang.put("失效日期","Expiration");
mapLang.put("状态","Status");
mapLang.put("所属表单","In Record");
mapLang.put("表单所属试验","From Study");
mapLang.put("表单所属人","By User");
mapLang.put("基本信息","Information");
mapLang.put("表单信息","Record Information");
mapLang.put("稽查轨迹","Track Record");
mapLang.put("给药制剂台账","Formulation Table");
mapLang.put("备注","Comment");
mapLang.put("签名人","Signed By");
mapLang.put("批号","Batch Num");
mapLang.put("规格","Specification");
mapLang.put("接收日期","Date Received");
mapLang.put("有效期","Validity Period");
mapLang.put("申请解档","Apply for De-archiving");
mapLang.put("申请借阅","Apply for Check-out");
mapLang.put("申请归档","Apply for Archiving");
mapLang.put("锁定给药制剂","Lock Drug");
mapLang.put("解锁给药制剂","Unlock Drug");
mapLang.put("处置药剂","Dispose Substance");
mapLang.put("处置容器","Dispose Container");
mapLang.put("钥匙发放","Issue Key");
mapLang.put("申请编辑","Apply Edit");
mapLang.put("同意编辑","Approve Edit");
mapLang.put("拒绝编辑","Reject Edit");
mapLang.put("修改库存申请","Apply Edit Inventory");
mapLang.put("同意修改库存","Approve Edit Inventory");
mapLang.put("拒绝修改库存","Reject Edit Inventory");
mapLang.put("归还","Return");
mapLang.put("确认归还","Confirm Check-in");
mapLang.put("领取发放","Distribution");
mapLang.put("存储","Storage");
mapLang.put("取出","Take Out");
mapLang.put("给药制剂详情","Formulation Information");
mapLang.put("到期自动归还","到期自动归还");
mapLang.put("表单名称","Preset Name");
mapLang.put("锁定发放记录","Lock Record");
mapLang.put("解锁发放记录","Unlock Record");
mapLang.put("给药制剂入库","Formulation Check-in");
mapLang.put("同意入库","Approve Check-in");
mapLang.put("拒绝入库","Reject Check-in");
mapLang.put("目的","Purpose");
mapLang.put("同意归档","Approve Archiving");
mapLang.put("拒绝归档","Reject Archiving");
mapLang.put("同意解档","Approve De-archiving");
mapLang.put("拒绝解档","Reject De-archiving");
mapLang.put("同意借阅","Approve Check-out");
mapLang.put("拒绝借阅","Reject Check-out");
}
public static void main(String[] args) {
Map<String, String> formData = new LinkedHashMap<>();
formData.put("申请备注", "1111");
formData.put("审核备注", "22");
logger.info(getJcnrEn(formData));
}
/**
* 获取英文
* @param name
* @return
*/
public static String getEn(String name) {
return mapLang.get(name);
}
/**
* 稽查名称英文
* @param map
* @return
*/
public static String getJcnrEn(Map<String, String> map) {
Map<String, String> result =new LinkedHashMap<>();
for (Map.Entry<String, String> entry : map.entrySet()) {
result.put(mapLang.get(entry.getKey()),entry.getValue());
}
return JctUtil.formatStr(result);
}
/**
* 稽查名称英文
* @param map
* @return
*/
public static Map<String, String> getMapEn(Map<String, String> map) {
Map<String, String> result =new LinkedHashMap<>();
for (Map.Entry<String, String> entry : map.entrySet()) {
result.put(mapLang.get(entry.getKey()),entry.getValue());
}
return result;
}
}

+ 201
- 0
hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/GspPdf.java View File

@ -0,0 +1,201 @@
package com.hxhq.business.utils.pdf.resource;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hxhq.business.domain.GspJcgj;
import com.hxhq.business.domain.GspTz;
import com.hxhq.business.dto.gsp.GspDto;
import com.hxhq.business.enums.zykgl.ZjztEnum;
import com.hxhq.business.utils.lang.GyzjJcnrUtil;
import com.hxhq.business.utils.pdf.PdfBaseUtil;
import com.hxhq.business.utils.pdf.PdfExportUtil;
import com.hxhq.common.core.utils.StringUtils;
import com.hxhq.common.security.utils.SecurityUtils;
import com.hxhq.system.api.model.LoginUser;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.*;
/**
* 供试品详情
*
* @author HanLong
*/
public class GspPdf {
private static final Logger logger = LoggerFactory.getLogger(GspPdf.class.getName());
public String language="zh";
/**
* 导出
*
* @param gsp
* @return
*/
public String exportDetail(GspDto gsp, List<GspTz> tzList, List<GspJcgj> jcgjList, String lang, String localFilePath) {
language=lang;
Document document = null;
FileOutputStream fos = null;
String filePath = PdfBaseUtil.getFilePath(localFilePath,"Gsp");
try {
String sign = "hxhq";
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null) {
sign = loginUser.getSysUser().getNickName();
}
document = PdfBaseUtil.init(document, fos, filePath, sign + PdfExportUtil.parseDateToStr(new Date()), getName("给药制剂详情"),false);
// 基本信息
PdfBaseUtil.addUnderlinedTitle(document, getName("基本信息"), 10, true);
Map<String, String> formData1 = new LinkedHashMap<>();
formData1.put(getName("名称"), gsp.getMc());
formData1.put(getName("编号"), gsp.getBh());
formData1.put(getName("批号"), gsp.getPh());
formData1.put(getName("规格"), gsp.getGg() + gsp.getGgdw());
formData1.put(getName("接收日期"), gsp.getGg() + gsp.getGgdw());
formData1.put(getName("库存量"), gsp.getKc() + gsp.getKcdw());
formData1.put(getName("有效期"), PdfExportUtil.parseDateToStr(gsp.getYxq()));
formData1.put(getName("状态"), "en".equals(language) ? (GyzjJcnrUtil.getEn(ZjztEnum.getEnumByValue(gsp.getZjzt()).getText())) : ZjztEnum.getEnumByValue(gsp.getZjzt()).getText());
PdfBaseUtil.addFormTableColumns(document, formData1, 2);
// 表单信息
/*PdfBaseUtil.addUnderlinedTitle(document, getName("表单信息"), 10, true);
Map<String, String> formData3 = new LinkedHashMap<>();
formData3.put(getName("表单所属试验"), gsp.getStudyMc());
formData3.put(getName("所属表单"), gsp.getBdMc());
formData3.put(getName("表单所属人"), gsp.getBdgsrMc());
PdfBaseUtil.addFormTableColumns(document, formData3, 2);
PdfBaseUtil.addUnderlinedTitle(document, getName("给药制剂台账") , 10, true);*/
// 台账
addTz(document, tzList, lang);
PdfBaseUtil.addUnderlinedTitle(document, getName("稽查轨迹") , 10, true);
//稽查轨迹
addJcgj(document, jcgjList, lang);
logger.info("生成成功:{}", filePath);
} catch (Exception e) {
logger.error("生成失败", e);
throw new RuntimeException("生成失败: " + e.getMessage());
} finally {
if (document != null) {
document.close();
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
logger.error("关闭文件流失败", e);
}
}
}
return filePath;
}
/**
* 台账
*
* @param document
* @param tzList
* @throws IOException
* @throws DocumentException
*/
public void addTz(Document document, List<GspTz> tzList, String lang) throws IOException, DocumentException {
// 9. 表头
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font headerFont = new Font(bfChinese, 8, Font.NORMAL);
Font contentFont = new Font(bfChinese, 8, Font.NORMAL);
// 8. 创建表格
PdfPTable table = new PdfPTable(8);
table.setWidthPercentage(100);
String[] headers = {getName("使用人"),getName("领取/归还人/入库申请人"),getName("发放/接收人"),getName("操作类型"),getName("表单名称"),getName("操作量"),getName("备注/原因"),getName("操作时间")};
for (String header : headers) {
PdfPCell cell = new PdfPCell(new Phrase(header, headerFont));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setPadding(8);
cell.setBorderWidth(1);
table.addCell(cell);
}
int rowNum = 0;
for (GspTz gspTz : tzList) {
// 交替行颜色
if (rowNum % 2 == 0) {
table.getDefaultCell().setBackgroundColor(BaseColor.WHITE);
} else {
table.getDefaultCell().setBackgroundColor(BaseColor.WHITE);
}
table.addCell(PdfBaseUtil.createCell(gspTz.getQmrMc(), contentFont));
table.addCell(PdfBaseUtil.createCell(StringUtils.isNoneBlank(gspTz.getLqrMc()) ? gspTz.getLqrMc() : "" + (StringUtils.isNoneBlank(gspTz.getGhrMc()) ? gspTz.getGhrMc() : ""), contentFont));
table.addCell(PdfBaseUtil.createCell(StringUtils.isNoneBlank(gspTz.getFfrMc()) ? gspTz.getFfrMc() : "" + (StringUtils.isNoneBlank(gspTz.getJsrMc()) ? gspTz.getJsrMc() : ""), contentFont));
table.addCell(PdfBaseUtil.createCell(gspTz.getQmyy(), contentFont));
table.addCell(PdfBaseUtil.createCell(gspTz.getBdMc(), contentFont));
table.addCell(PdfBaseUtil.createCell(gspTz.getCzl() + gspTz.getCzldw(), contentFont));
table.addCell(PdfBaseUtil.createCell(gspTz.getRemark(), contentFont));
table.addCell(PdfBaseUtil.createCell(PdfExportUtil.parseDateToStr(gspTz.getCreateTime()), contentFont));
rowNum++;
}
document.add(table);
}
/**
* 稽查轨迹
*
* @param document
* @param jcgjList
* @throws IOException
* @throws DocumentException
*/
public void addJcgj(Document document, List<GspJcgj> jcgjList, String lang) throws IOException, DocumentException {
for (GspJcgj jcgj : jcgjList) {
StringJoiner result = new StringJoiner(", ");
if ("en".equals(lang)) {
PdfBaseUtil.addUnderlinedTitle(document, PdfExportUtil.parseDateToStr(jcgj.getCreateTime())+ " " + jcgj.getJcmcEn(), 10, false);
if (StringUtils.isNoneBlank(jcgj.getJcnrEn())) {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonArray = mapper.readTree(jcgj.getJcnrEn());
for (JsonNode node : jsonArray) {
if (node.get("name") != null) {
String name = node.get("name").asText();
String value = node.get("value")!=null? node.get("value").asText():"";
result.add(name + ":" + value);
}
}
}
} else {
PdfBaseUtil.addUnderlinedTitle(document, PdfExportUtil.parseDateToStr(jcgj.getCreateTime())+ " " + jcgj.getJcmc(), 10, false);
if (StringUtils.isNoneBlank(jcgj.getJcnr())) {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonArray = mapper.readTree(jcgj.getJcnr());
for (JsonNode node : jsonArray) {
if (node.get("name") != null) {
String name = node.get("name").asText();
String value =node.get("value")!=null? node.get("value").asText():"";
result.add(name + ":" + value);
}
}
}
}
if (StringUtils.isNoneBlank(jcgj.getRemark())) {
result.add(getName("备注")+":" + jcgj.getRemark());
}
if (StringUtils.isNoneBlank(jcgj.getQmrMc())) {
result.add(getName("签名人")+":" + jcgj.getQmrMc());
}
PdfBaseUtil.addUnderlinedTitle(document, result.toString(), 10, false);
}
}
/**
* 获取名称
* @param name
* @return
*/
public String getName(String name){
return "en".equals(language) ? GyzjJcnrUtil.getEn(name) : name;
}
}

+ 10
- 0
hxhq-modules/hxhq-system/src/main/resources/mapper/business/GspTzMapper.xml View File

@ -3,4 +3,14 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hxhq.business.mapper.GspTzMapper"> <mapper namespace="com.hxhq.business.mapper.GspTzMapper">
<select id="queryList" resultType="com.hxhq.business.domain.GspTz">
select t.*,sf.bdmc as bdMc
FROM `t_gsp_tz` t
left join `t_study_form_fill` sf on sf.id=t.bd_id
<if test="ew.sqlSegment != '' and ew.sqlSegment != null">
<where>
${ew.sqlSegment}
</where>
</if>
</select>
</mapper> </mapper>

Loading…
Cancel
Save