Browse Source

试验相关

liuyc 2 năm trước cách đây
mục cha
commit
8b46bc964d
16 tập tin đã thay đổi với 675 bổ sung9 xóa
  1. 1 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TrialMaterialMobilizationVO.java
  2. 27 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TrialSampleInfoVO.java
  3. 22 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/wrapper/TrialSampleInfoWarpper.java
  4. 5 0
      blade-service/blade-business/pom.xml
  5. 90 8
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialMaterialController.java
  6. 72 0
      blade-service/blade-business/src/main/java/org/springblade/business/excel/TrialMaterialMobilizationExcel.java
  7. 20 0
      blade-service/blade-business/src/main/java/org/springblade/business/excel/TrialMaterialMobilizationImporter.java
  8. 62 0
      blade-service/blade-business/src/main/java/org/springblade/business/excel/TrialSampleInfoExcel.java
  9. 20 0
      blade-service/blade-business/src/main/java/org/springblade/business/excel/TrialSampleInfoImporter.java
  10. 11 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialMaterialMobilizationService.java
  11. 16 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSampleInfoService.java
  12. 154 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialMaterialMobilizationServiceImpl.java
  13. 80 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSampleInfoServiceImpl.java
  14. 93 0
      blade-service/blade-business/src/main/java/org/springblade/business/utils/PDFUtil.java
  15. 2 0
      blade-service/blade-business/src/main/resources/application-dev.yml
  16. BIN
      blade-service/blade-business/src/main/resources/templates/SIMYOU.TTF

+ 1 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TrialMaterialMobilizationVO.java

@@ -8,7 +8,7 @@ public class TrialMaterialMobilizationVO extends TrialMaterialMobilization {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 材料类型
+     * 材料类型 名称、规格、编号
      */
     private Integer materialType;
 

+ 27 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TrialSampleInfoVO.java

@@ -0,0 +1,27 @@
+package org.springblade.business.vo;
+
+import lombok.Data;
+import org.springblade.business.entity.TrialSampleInfo;
+
+
+@Data
+public class TrialSampleInfoVO extends TrialSampleInfo {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 查询输入框 名称、规格、编号
+     */
+    private String queryValue;
+
+    /**
+     * 开始时间
+     */
+    private String startTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+
+
+}

+ 22 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/wrapper/TrialSampleInfoWarpper.java

@@ -0,0 +1,22 @@
+package org.springblade.business.wrapper;
+
+import org.springblade.business.entity.TrialSampleInfo;
+import org.springblade.business.vo.TrialSampleInfoVO;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.Objects;
+
+public class TrialSampleInfoWarpper extends BaseEntityWrapper<TrialSampleInfo, TrialSampleInfoVO> {
+
+    public static TrialSampleInfoWarpper build() {
+        return new TrialSampleInfoWarpper();
+    }
+
+    @Override
+    public TrialSampleInfoVO entityVO(TrialSampleInfo entity) {
+        return Objects.requireNonNull(BeanUtil.copy(entity, TrialSampleInfoVO.class));
+    }
+
+}

+ 5 - 0
blade-service/blade-business/pom.xml

@@ -82,6 +82,11 @@
             <version>5.5.13</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.lowagie</groupId>
+            <artifactId>itext</artifactId>
+            <version>2.1.5</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>

+ 90 - 8
blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialMaterialController.java

@@ -1,23 +1,38 @@
 package org.springblade.business.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.business.entity.TrialMaterialMobilization;
+import org.springblade.business.entity.TrialSampleInfo;
+import org.springblade.business.excel.TrialMaterialMobilizationExcel;
+import org.springblade.business.excel.TrialMaterialMobilizationImporter;
+import org.springblade.business.excel.TrialSampleInfoExcel;
+import org.springblade.business.excel.TrialSampleInfoImporter;
 import org.springblade.business.service.ITrialMaterialMobilizationService;
 import org.springblade.business.service.ITrialSampleInfoService;
 import org.springblade.business.vo.TrialMaterialMobilizationVO;
+import org.springblade.business.vo.TrialSampleInfoVO;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.system.entity.Region;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import springfox.documentation.annotations.ApiIgnore;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 @AllArgsConstructor
@@ -30,38 +45,105 @@ public class TrialMaterialController extends BladeController {
 
     @GetMapping("/mobilization/detail")
     @ApiOperationSupport(order = 1)
-    @ApiOperation(value = "材料详情", notes = "传入id")
+    @ApiOperation(value = "材料进场详情", notes = "传入id")
     public R<TrialMaterialMobilization> mobilizationDetail(@Valid @RequestParam Long id) {
         return R.data(iTrialMaterialMobilizationService.mobilizationDetail(id));
     }
 
     @GetMapping("/mobilization/page")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "材料界面分页", notes = "page")
+    @ApiOperation(value = "材料进场分页查询", notes = "传入page、TrialMaterialMobilizationVO")
     public R<IPage<TrialMaterialMobilizationVO>> mobilizationPage(Query query, TrialMaterialMobilizationVO obj) {
         return R.data(iTrialMaterialMobilizationService.selectPage(Condition.getPage(query), obj));
     }
 
-    @PostMapping("/mobilization/submit")
+    @GetMapping("/mobilization/list")
     @ApiOperationSupport(order = 3)
-    @ApiOperation(value = "材料新增或修改", notes = "传入TrialMaterialMobilization对象")
+    @ApiOperation(value = "材料取样列表查询", notes = "null")
+    public R<List<TrialMaterialMobilization>> mobilizationList() {
+        return R.data(iTrialMaterialMobilizationService.selectList());
+    }
+
+    @PostMapping("/mobilization/submit")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "材料进场新增或修改", notes = "传入TrialMaterialMobilization对象")
     public R<Object> mobilizationSubmit(@Valid @RequestBody TrialMaterialMobilization obj) {
         return R.status(iTrialMaterialMobilizationService.mobilizationSubmit(obj));
     }
 
     @PostMapping("/mobilization/remove")
-    @ApiOperationSupport(order = 4)
-    @ApiOperation(value = "材料批量删除", notes = "传入ids")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "材料进场批量删除", notes = "传入ids")
     public R<Object> mobilizationRemove(@Valid @RequestParam String ids) {
         return R.status(iTrialMaterialMobilizationService.deleteLogic(Func.toLongList(ids)));
     }
 
     @PostMapping("/mobilization/copy")
-    @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "材料批量复制", notes = "传入ids")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "材料进场批量复制", notes = "传入ids")
     public R<Object> mobilizationCopy(@Valid @RequestParam String ids) {
         return R.status(iTrialMaterialMobilizationService.mobilizationCopy(ids));
     }
 
+    @PostMapping("mobilization/import")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "导入进场材料", notes = "传入excel")
+    public R mobilizationImport(MultipartFile file, Integer isCovered) {
+        TrialMaterialMobilizationImporter trialMaterialMobilizationImporter = new TrialMaterialMobilizationImporter(iTrialMaterialMobilizationService, isCovered == 1);
+        ExcelUtil.save(file, trialMaterialMobilizationImporter, TrialMaterialMobilizationExcel.class);
+        return R.success("操作成功");
+    }
+
+    @PostMapping("mobilization/export-pdf")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "导出进场材料Pdf", notes = "传入ids")
+    public void mobilizationExportPdf(@Valid @RequestParam String ids, HttpServletResponse response) {
+        iTrialMaterialMobilizationService.mobilizationExportPdf(ids, response);
+    }
+
+    @GetMapping("/sample/detail")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "材料取样详情", notes = "传入id")
+    public R<TrialSampleInfo> sampleDetail(@Valid @RequestParam Long id) {
+        return R.data(iTrialSampleInfoService.sampleDetail(id));
+    }
+
+    @GetMapping("/sample/page")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "材料取样分页查询", notes = "传入page、TrialSampleInfoVO")
+    public R<IPage<TrialSampleInfoVO>> mobilizationPage(Query query, TrialSampleInfoVO obj) {
+        return R.data(iTrialSampleInfoService.selectPage(Condition.getPage(query), obj));
+    }
+
+    @PostMapping("/sample/submit")
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "材料取样新增或修改", notes = "传入TrialSampleInfo对象")
+    public R<Object> sampleSubmit(@Valid @RequestBody TrialSampleInfo obj) {
+        return R.status(iTrialSampleInfoService.sampleSubmit(obj));
+    }
+
+    @PostMapping("/sample/remove")
+    @ApiOperationSupport(order = 11)
+    @ApiOperation(value = "材料取样批量删除", notes = "传入ids")
+    public R<Object> sampleRemove(@Valid @RequestParam String ids) {
+        return R.status(iTrialSampleInfoService.deleteLogic(Func.toLongList(ids)));
+    }
+
+    @PostMapping("/sample/copy")
+    @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "材料取样批量复制", notes = "传入ids")
+    public R<Object> sampleCopy(@Valid @RequestParam String ids) {
+        return R.status(iTrialSampleInfoService.sampleCopy(ids));
+    }
+
+    @PostMapping("sample/import")
+    @ApiOperationSupport(order = 13)
+    @ApiOperation(value = "导入样品材料", notes = "传入excel")
+    public R sampleImport(MultipartFile file, Integer isCovered) {
+        TrialSampleInfoImporter trialSampleInfoImporter = new TrialSampleInfoImporter(iTrialSampleInfoService, isCovered == 1);
+        ExcelUtil.save(file, trialSampleInfoImporter, TrialSampleInfoExcel.class);
+        return R.success("操作成功");
+    }
+
 
 }

+ 72 - 0
blade-service/blade-business/src/main/java/org/springblade/business/excel/TrialMaterialMobilizationExcel.java

@@ -0,0 +1,72 @@
+package org.springblade.business.excel;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ColumnWidth(16)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class TrialMaterialMobilizationExcel implements Serializable {
+
+    @ExcelProperty(value = "id")
+    @ExcelIgnore
+    private Long id;
+
+    @ExcelProperty(value = "记录人")
+    private String userName;
+
+    @ExcelProperty(value = "材料名称")
+    private String materialName;
+
+    @ExcelProperty(value = "材料类型")
+    private Integer materialType;
+
+    @ExcelProperty(value = "规格型号")
+    private String specificationModel;
+
+    @ExcelProperty(value = "规格编号")
+    private String specificationNumber;
+
+    @ExcelProperty(value = "材料单价")
+    private BigDecimal materialPrice;
+
+    @ExcelProperty(value = "材料数量")
+    private Integer materialCount;
+
+    @ExcelProperty(value = "计算单位")
+    private String calculationUnit;
+
+    @ExcelProperty(value = "生产批号")
+    private Integer batchNumber;
+
+    @ExcelProperty(value = "进场日期")
+    private Date mobilizationDate;
+
+    @ExcelProperty(value = "拟定部位")
+    private String proposedPosition;
+
+    @ExcelProperty(value = "供应商单位")
+    private String supplierUnit;
+
+    @ExcelProperty(value = "生产地/厂家")
+    private String placeOfProduction;
+
+    @ExcelProperty(value = "生产合格证")
+    private String productionCertificate;
+
+    @ExcelProperty(value = "厂家质检报告")
+    private String qualityInspectionReport;
+
+    @ExcelProperty(value = "其他附件")
+    private String otherAccessories;
+
+}

+ 20 - 0
blade-service/blade-business/src/main/java/org/springblade/business/excel/TrialMaterialMobilizationImporter.java

@@ -0,0 +1,20 @@
+package org.springblade.business.excel;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.business.service.ITrialMaterialMobilizationService;
+import org.springblade.core.excel.support.ExcelImporter;
+
+import java.util.List;
+
+@RequiredArgsConstructor
+public class TrialMaterialMobilizationImporter implements ExcelImporter<TrialMaterialMobilizationExcel> {
+
+    private final ITrialMaterialMobilizationService service;
+    private final Boolean isCovered;
+
+    @Override
+    public void save(List<TrialMaterialMobilizationExcel> data) {
+        service.importMobilization(data, isCovered);
+    }
+
+}

+ 62 - 0
blade-service/blade-business/src/main/java/org/springblade/business/excel/TrialSampleInfoExcel.java

@@ -0,0 +1,62 @@
+package org.springblade.business.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ColumnWidth(16)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class TrialSampleInfoExcel implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ExcelProperty(value = "样品名称")
+    private String materialName;
+
+    @ExcelProperty(value = "规格型号")
+    private String specificationModel;
+
+    @ExcelProperty(value = "样品编号")
+    private String specificationNumber;
+
+    @ExcelProperty(value = "试样数量")
+    private Integer materialCount;
+
+    @ExcelProperty(value = "代表数量")
+    private Integer representativeCount;
+
+    @ExcelProperty(value = "计算单位")
+    private String calculationUnit;
+
+    @ExcelProperty(value = "生产批号")
+    private Integer batchNumber;
+
+    @ExcelProperty(value = "拟定部位")
+    private String proposedPosition;
+
+    @ExcelProperty(value = "供应商单位")
+    private String supplierUnit;
+
+    @ExcelProperty(value = "取样地点")
+    private String samplingLocation;
+
+    @ExcelProperty(value = "样品描述")
+    private String sampleDescription;
+
+    @ExcelProperty(value = "进场日期")
+    private Date mobilizationDate;
+
+    @ExcelProperty(value = "取样日期")
+    private Date samplingDate;
+
+    @ExcelProperty(value = "是否委外")
+    private Integer isOutsourcing;
+
+}

+ 20 - 0
blade-service/blade-business/src/main/java/org/springblade/business/excel/TrialSampleInfoImporter.java

@@ -0,0 +1,20 @@
+package org.springblade.business.excel;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.business.service.ITrialSampleInfoService;
+import org.springblade.core.excel.support.ExcelImporter;
+
+import java.util.List;
+
+@RequiredArgsConstructor
+public class TrialSampleInfoImporter implements ExcelImporter<TrialSampleInfoExcel> {
+
+    private final ITrialSampleInfoService service;
+    private final Boolean isCovered;
+
+    @Override
+    public void save(List<TrialSampleInfoExcel> data) {
+        service.importSample(data, isCovered);
+    }
+
+}

+ 11 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialMaterialMobilizationService.java

@@ -2,11 +2,16 @@ package org.springblade.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.business.entity.TrialMaterialMobilization;
+import org.springblade.business.excel.TrialMaterialMobilizationExcel;
 import org.springblade.business.vo.TrialMaterialMobilizationVO;
 import org.springblade.core.mp.base.BaseService;
 
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
 
 public interface ITrialMaterialMobilizationService extends BaseService<TrialMaterialMobilization> {
+
     boolean mobilizationSubmit(TrialMaterialMobilization obj);
 
     TrialMaterialMobilization mobilizationDetail(Long id);
@@ -15,4 +20,10 @@ public interface ITrialMaterialMobilizationService extends BaseService<TrialMate
 
     IPage<TrialMaterialMobilizationVO> selectPage(IPage<TrialMaterialMobilization> page, TrialMaterialMobilizationVO obj);
 
+    List<TrialMaterialMobilization> selectList();
+
+    void importMobilization(List<TrialMaterialMobilizationExcel> data, Boolean isCovered);
+
+    void mobilizationExportPdf(String ids, HttpServletResponse response);
+
 }

+ 16 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSampleInfoService.java

@@ -1,7 +1,23 @@
 package org.springblade.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.business.entity.TrialSampleInfo;
+import org.springblade.business.excel.TrialSampleInfoExcel;
+import org.springblade.business.vo.TrialSampleInfoVO;
 import org.springblade.core.mp.base.BaseService;
 
+import java.util.List;
+
 public interface ITrialSampleInfoService extends BaseService<TrialSampleInfo> {
+
+    TrialSampleInfo sampleDetail(Long id);
+
+    IPage<TrialSampleInfoVO> selectPage(IPage<TrialSampleInfo> page, TrialSampleInfoVO obj);
+
+    boolean sampleSubmit(TrialSampleInfo obj);
+
+    boolean sampleCopy(String ids);
+
+    void importSample(List<TrialSampleInfoExcel> data, Boolean isCovered);
+
 }

+ 154 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialMaterialMobilizationServiceImpl.java

@@ -2,12 +2,23 @@ package org.springblade.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.Font;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.pdf.BaseFont;
+import com.lowagie.text.pdf.PdfPTable;
+import com.lowagie.text.pdf.PdfWriter;
+import com.sun.org.apache.regexp.internal.RE;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.springblade.business.entity.TrialMaterialMobilization;
+import org.springblade.business.excel.TrialMaterialMobilizationExcel;
 import org.springblade.business.mapper.TrialMaterialMobilizationMapper;
 import org.springblade.business.service.ITrialMaterialMobilizationService;
+import org.springblade.business.utils.PDFUtil;
 import org.springblade.business.vo.TrialMaterialMobilizationVO;
 import org.springblade.business.wrapper.TrialMaterialMobilizationWarpper;
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -15,17 +26,30 @@ import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @Service
 @AllArgsConstructor
 public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialMaterialMobilizationMapper, TrialMaterialMobilization> implements ITrialMaterialMobilizationService {
 
+    private final static String SIMYOU_TTF = "classpath:templates/SIMYOU.TTF";
+    private final IUserClient iUserClient;
+
     @Override
     public boolean mobilizationSubmit(TrialMaterialMobilization obj) {
         if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
@@ -70,4 +94,134 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
         List<TrialMaterialMobilizationVO> records = trialMaterialMobilizationVOIPage.getRecords();
         return trialMaterialMobilizationVOIPage.setRecords(records);
     }
+
+    @Override
+    public List<TrialMaterialMobilization> selectList() {
+        return baseMapper.selectList(Wrappers.<TrialMaterialMobilization>query().lambda().eq(TrialMaterialMobilization::getStatus, 1));
+    }
+
+    @Override
+    public void importMobilization(List<TrialMaterialMobilizationExcel> data, Boolean isCovered) {
+        List<TrialMaterialMobilization> list = new ArrayList<>();
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+            throw new ServiceException("获取用户信息失败");
+        }
+        data.forEach(excel -> {
+            TrialMaterialMobilization trialMaterialMobilization = BeanUtil.copyProperties(excel, TrialMaterialMobilization.class);
+            assert trialMaterialMobilization != null;
+            trialMaterialMobilization.setUserId(SecureUtil.getUserId());
+            list.add(trialMaterialMobilization);
+        });
+        if (isCovered) {
+            this.saveOrUpdateBatch(list);
+        } else {
+            this.saveBatch(list);
+        }
+    }
+
+    @Override
+    public void mobilizationExportPdf(String ids, HttpServletResponse response) {
+        try {
+            String fileName = java.net.URLEncoder.encode(DateUtil.time() + ".pdf", "UTF-8");
+            response.reset();
+            response.setContentType("application/pdf; name=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
+            response.setHeader("Content-Disposition", "inline; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
+            //构建字节输出流
+            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+
+            //构造数据
+            List<TrialMaterialMobilization> list = baseMapper.selectBatchIds(Func.toLongList(ids));
+            List<TrialMaterialMobilizationExcel> pdfData = new ArrayList<>();
+            for (TrialMaterialMobilization trialMaterialMobilization : list) {
+                R<User> userR = iUserClient.userInfoById(trialMaterialMobilization.getUserId());
+                TrialMaterialMobilizationExcel trialMaterialMobilizationExcel = BeanUtil.copyProperties(trialMaterialMobilization, TrialMaterialMobilizationExcel.class);
+                assert trialMaterialMobilizationExcel != null;
+                trialMaterialMobilizationExcel.setUserName(userR.getData().getName());
+                pdfData.add(trialMaterialMobilizationExcel);
+            }
+
+            //创建文档,设置页面大小、左右上下边距
+            Document document = new Document();
+
+            //处理中文显示问题,使用资源字体
+            BaseFont bfChinese = BaseFont.createFont(SIMYOU_TTF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
+
+            //Font dateTitle = new Font(bfChinese, 7, Font.NORMAL);
+            //Font title = new Font(bfChinese, 12, Font.BOLD);//文字加粗
+            Font textFont = new Font(bfChinese, 7, Font.NORMAL);//文字正常
+
+            //设置分页
+            PdfWriter.getInstance(document, byteArrayOutputStream);
+
+            //打开文档
+            document.open();
+
+            //标题
+            PdfPTable tableTitle = new PdfPTable(3);
+            //生成一个13列的表格
+            PdfPTable table = new PdfPTable(13);
+
+            //定义每个单元格的宽度
+            float[] widthsHeaderTitle = {1f, 1f, 1f};
+            float[] widthsHeader = {1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f};
+
+            float lineHeight = (float) 20.0;
+
+            //设置表格每一格的宽度
+            tableTitle.setWidths(widthsHeaderTitle);
+            table.setWidths(widthsHeader);
+
+            //设置表格总体宽度
+            tableTitle.setWidthPercentage(100);
+            table.setWidthPercentage(100);
+
+            int colSpan = 1;
+
+            /*SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date date = new Date(System.currentTimeMillis());
+            //添加标题
+            PDFUtil.createTableCellLeft("导出人:XXX", textFont, tableTitle, lineHeight, colSpan);
+            PDFUtil.createTableCellCenter("XXX表", title, tableTitle, lineHeight, colSpan);
+            PDFUtil.createTableCellRight(formatter.format(date), dateTitle, tableTitle, lineHeight, colSpan);*/
+
+            document.add(tableTitle);
+            document.add(new Paragraph("\n"));
+
+            String[] array = {"材料编号", "进场日期", "材料名称", "材料类型", "规格型号", "供应商单位", "材料单价", "材料数量", "计算单位", "生产批号", "上产地/厂家", "拟用部位", "记录人"};
+            for (String s : array) {
+                PDFUtil.createTableCell(s, textFont, table, lineHeight, colSpan);
+            }
+            for (TrialMaterialMobilizationExcel pdfDatum : pdfData) {
+                PDFUtil.createTableCell(pdfDatum.getId().toString(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(DateUtil.formatDate(pdfDatum.getMobilizationDate()), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getMaterialName(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getMaterialType().toString(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getSpecificationModel(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getSupplierUnit(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getMaterialPrice().toString(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getMaterialCount().toString(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getCalculationUnit(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getBatchNumber().toString(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getPlaceOfProduction(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getProposedPosition(), textFont, table, lineHeight, colSpan);
+                PDFUtil.createTableCell(pdfDatum.getUserName(), textFont, table, lineHeight, colSpan);
+            }
+            document.add(table);
+            document.close();
+            try {
+                byteArrayOutputStream.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+            //输出
+            ServletOutputStream os = response.getOutputStream();
+            os.write(byteArrayOutputStream.toByteArray());
+
+        } catch (DocumentException | IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
 }

+ 80 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSampleInfoServiceImpl.java

@@ -1,14 +1,94 @@
 package org.springblade.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateUtils;
 import org.springblade.business.entity.TrialSampleInfo;
+import org.springblade.business.excel.TrialSampleInfoExcel;
 import org.springblade.business.mapper.TrialSampleInfoMapper;
 import org.springblade.business.service.ITrialSampleInfoService;
+import org.springblade.business.vo.TrialSampleInfoVO;
+import org.springblade.business.wrapper.TrialSampleInfoWarpper;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Service
 @AllArgsConstructor
 public class TrialSampleInfoServiceImpl extends BaseServiceImpl<TrialSampleInfoMapper, TrialSampleInfo> implements ITrialSampleInfoService {
 
+    @Override
+    public TrialSampleInfo sampleDetail(Long id) {
+        return baseMapper.selectById(id);
+    }
+
+    @Override
+    public IPage<TrialSampleInfoVO> selectPage(IPage<TrialSampleInfo> page, TrialSampleInfoVO obj) {
+        QueryWrapper<TrialSampleInfo> queryWrapper = Condition.getQueryWrapper(obj);
+        if (StringUtils.isNotEmpty(obj.getStartTime()) && StringUtils.isNotEmpty(obj.getEndTime())) {
+            String endTime = obj.getEndTime();
+            endTime = DateUtil.format(DateUtils.addDays(DateUtil.parse(endTime, "yyyy-MM-dd HH:mm:ss"), 1), "yyyy-MM-dd HH:mm:ss");
+            queryWrapper.lambda().between(TrialSampleInfo::getCreateTime, obj.getStartTime(), endTime);
+        }
+        if (ObjectUtil.isNotEmpty(obj.getQueryValue())) {
+            queryWrapper.lambda().like(TrialSampleInfo::getMaterialName, obj.getQueryValue());
+            queryWrapper.lambda().or().like(TrialSampleInfo::getSpecificationModel, obj.getQueryValue());
+            queryWrapper.lambda().or().like(TrialSampleInfo::getSpecificationNumber, obj.getQueryValue());
+        }
+        IPage<TrialSampleInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, TrialSampleInfo::getCreateTime));
+        IPage<TrialSampleInfoVO> trialMaterialMobilizationVOIPage = TrialSampleInfoWarpper.build().pageVO(pages);
+        List<TrialSampleInfoVO> records = trialMaterialMobilizationVOIPage.getRecords();
+        return trialMaterialMobilizationVOIPage.setRecords(records);
+    }
+
+    @Override
+    public boolean sampleSubmit(TrialSampleInfo obj) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+            throw new ServiceException("获取用户信息失败");
+        }
+        obj.setUserId(SecureUtil.getUserId());
+        return this.saveOrUpdate(obj);
+    }
+
+    @Override
+    public boolean sampleCopy(String ids) {
+        List<TrialSampleInfo> trialSampleInfos = baseMapper.selectBatchIds(Func.toLongList(ids));
+        for (TrialSampleInfo obj : trialSampleInfos) {
+            obj.setId(SnowFlakeUtil.getId());
+        }
+        return this.saveBatch(trialSampleInfos);
+    }
+
+    @Override
+    public void importSample(List<TrialSampleInfoExcel> data, Boolean isCovered) {
+        List<TrialSampleInfo> list = new ArrayList<>();
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+            throw new ServiceException("获取用户信息失败");
+        }
+        data.forEach(excel -> {
+            TrialSampleInfo trialSampleInfo = BeanUtil.copyProperties(excel, TrialSampleInfo.class);
+            assert trialSampleInfo != null;
+            trialSampleInfo.setUserId(SecureUtil.getUserId());
+            list.add(trialSampleInfo);
+        });
+        if (isCovered) {
+            this.saveOrUpdateBatch(list);
+        } else {
+            this.saveBatch(list);
+        }
+    }
+
+
 }

+ 93 - 0
blade-service/blade-business/src/main/java/org/springblade/business/utils/PDFUtil.java

@@ -0,0 +1,93 @@
+package org.springblade.business.utils;
+
+import com.lowagie.text.*;
+import com.lowagie.text.Font;
+import com.lowagie.text.pdf.BaseFont;
+import com.lowagie.text.pdf.PdfPCell;
+import com.lowagie.text.pdf.PdfPTable;
+import com.lowagie.text.pdf.PdfWriter;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.List;
+
+public class PDFUtil {
+
+    public static void createTableCell(String text, Font font, PdfPTable table, float lineHeight, int colSapn) {
+        PdfPCell cell;
+        cell = new PdfPCell(new Paragraph(text, font));
+        //合并单元格列
+        cell.setColspan(colSapn);
+        //设置水平居中
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        //设置垂直居中
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setFixedHeight(lineHeight);
+        //将单元格内容添加到表格中
+        table.addCell(cell);
+    }
+
+    public static void createTableCellLeft(String text, Font font, PdfPTable table, float lineHeight, int colSapn) {
+        PdfPCell cell;
+        cell = new PdfPCell(new Paragraph(text, font));
+        //合并单元格列
+        cell.setColspan(colSapn);
+        //设置水平
+        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
+        //设置垂直
+        cell.setVerticalAlignment(Element.ALIGN_BOTTOM);
+        cell.setFixedHeight(lineHeight);
+        cell.setBorderWidthRight(0);
+        cell.setBorderWidthBottom(0);
+        cell.setBorderWidthLeft(0);
+        cell.setBorderWidthTop(0);
+        //将单元格内容添加到表格中
+        table.addCell(cell);
+    }
+
+    public static void createTableCellCenter(String text, Font font, PdfPTable table, float lineHeight, int colSapn) {
+        PdfPCell cell;
+        cell = new PdfPCell(new Paragraph(text, font));
+        //合并单元格列
+        cell.setColspan(colSapn);
+        //设置水平居中
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        //设置垂直居中
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setFixedHeight(lineHeight);
+        cell.setBorderWidthLeft(0);
+        cell.setBorderWidthRight(0);
+        cell.setBorderWidthBottom(0);
+        cell.setBorderWidthTop(0);
+
+        //将单元格内容添加到表格中
+        table.addCell(cell);
+
+    }
+
+    public static void createTableCellRight(String text, Font font, PdfPTable table, float lineHeight, int colSapn) {
+        PdfPCell cell;
+        cell = new PdfPCell(new Paragraph(text, font));
+        //合并单元格列
+        cell.setColspan(colSapn);
+        //设置水平
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        //设置垂直
+        cell.setVerticalAlignment(Element.ALIGN_TOP);
+        cell.setFixedHeight(lineHeight);
+        //将单元格内容添加到表格中
+        //去除边框
+        cell.setBorderWidthLeft(0);
+        cell.setBorderWidthBottom(0);
+        cell.setBorderWidthRight(0);
+        cell.setBorderWidthTop(0);
+        table.addCell(cell);
+    }
+
+}
+
+

+ 2 - 0
blade-service/blade-business/src/main/resources/application-dev.yml

@@ -9,3 +9,5 @@ spring:
     username: ${blade.datasource.dev.username}
     password: ${blade.datasource.dev.password}
 
+  resources:
+    static-locations: classpath*:/templates

BIN
blade-service/blade-business/src/main/resources/templates/SIMYOU.TTF