Просмотр исходного кода

修改不同工厂的编码验证;PDF打印

hongxudong 3 лет назад
Родитель
Сommit
42bf441b11

+ 39 - 0
pom.xml

@@ -64,6 +64,41 @@
             <artifactId>lombok</artifactId>
             <optional>true</optional>
         </dependency>
+
+<!--        pdf打印-->
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.8</version>
+        </dependency>
+
+<!--        pdf生成-->
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itext7-core</artifactId>
+            <version>7.1.8</version>
+            <type>pom</type>
+        </dependency>
+
+<!--        二维码-->
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.3.3</version>
+        </dependency>
+
+<!--        条形码-->
+        <dependency>
+            <groupId>net.sf.barcode4j</groupId>
+            <artifactId>barcode4j</artifactId>
+            <version>2.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
     </dependencies>
 
     <build>
@@ -174,5 +209,9 @@
                 <enabled>true</enabled>
             </snapshots>
         </repository>
+        <repository>
+            <id>com.e-iceblue</id>
+            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
+        </repository>
     </repositories>
 </project>

+ 16 - 4
src/main/java/com/dk/mdm/controller/mst/LabelPrintLayoutController.java

@@ -2,16 +2,17 @@ package com.dk.mdm.controller.mst;
 
 import com.dk.common.model.pojo.PageList;
 import com.dk.common.response.ResponseResultVO;
-import com.dk.mdm.model.pojo.mst.LabelPrintLayout;
 import com.dk.common.service.BaseService;
+import com.dk.mdm.model.pojo.mst.LabelPrintLayout;
 import com.dk.mdm.model.query.mst.LabelPrinteLayoutQuery;
 import com.dk.mdm.model.response.mst.LabelPrinteLayoutResponse;
 import com.dk.mdm.model.vo.mst.LabelPrinteLayoutVO;
+import com.dk.mdm.service.mst.LabelPrintLayoutService;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.*;
 import org.springframework.beans.factory.annotation.Autowired;
-import io.swagger.annotations.Api;
-import com.dk.mdm.service.mst.LabelPrintLayoutService;
+import org.springframework.web.bind.annotation.*;
+
 
 @Api(tags = "标签打印模板API接口")
 @RestController
@@ -89,4 +90,15 @@ public class LabelPrintLayoutController{
     public ResponseResultVO<Boolean> enable(@PathVariable Long id){
         return this.getService().enable(id);
     }
+
+    /**
+     * @desc   : 打印PDF
+     * @author : 洪旭东
+     * @date   : 2023-04-10 10:56
+     */
+    @ApiOperation(value = "打印PDF", notes = "打印PDF")
+    @PostMapping("print_pdf/{templateId}/{printerId}/{id}")
+    public ResponseResultVO<?> printPdf(@PathVariable Long printerId, @PathVariable Long templateId, @PathVariable Long id){
+        return labelPrintLayoutService.printPdf(printerId, templateId, id);
+    }
 }

+ 47 - 0
src/main/java/com/dk/mdm/controller/mst/TemplatePrintController.java

@@ -0,0 +1,47 @@
+package com.dk.mdm.controller.mst;
+
+import com.dk.mdm.model.pojo.mst.TemplatePrint;
+import com.dk.mdm.service.mst.TemplatePrintService;
+import com.dk.common.controller.BaseController;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "API接口")
+@RestController
+@RequestMapping("mst/template_print")
+public class TemplatePrintController {
+
+	@Autowired
+	private TemplatePrintService templatePrintService;
+
+
+//	/*
+//	 * @desc   : 打印模板数据源
+//	 * @author : 沈博
+//	 * @date   : 2022/6/28 9:10
+//	 */
+//	@PostMapping("select_data_source")
+//	public ResponseResultVO<List<Map<String,Object>>> selectDataSource(){
+//		return templatePrintService.selectDataSource();
+//	}
+//
+//	/**
+//	 * @desc   : 选择打印模板查询
+//	 * @author : 沈博
+//	 * @date   : 2022/6/29 9:58
+//	 */
+//	@PostMapping("select_choose_template")
+//	public ResponseResultVO<List<TemplatePrint>> selectChooseTemplate(@RequestBody TemplatePrint templatePrint){
+//		return templatePrintService.selectChooseTemplate(templatePrint);
+//	}
+	
+}

+ 84 - 0
src/main/java/com/dk/mdm/infrastructure/util/BarCodeUtil.java

@@ -0,0 +1,84 @@
+package com.dk.mdm.infrastructure.util;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.krysalis.barcode4j.HumanReadablePlacement;
+import org.krysalis.barcode4j.impl.code128.Code128Bean;
+import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
+
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.util.UUID;
+
+/**
+ * @desc   : BarCodeUtil
+ * @author : 洪旭东
+ * @date   : 2023-04-07 09:14
+ */
+public class BarCodeUtil {
+
+    public static void main(String[] args) {
+        System.out.println("开始生成...");
+        generateBarCode128("hahahahah");
+        System.out.println("生成完毕!");
+    }
+
+    public static void generateBarCode128(String message) {
+        generateBarCode128(message, 10.00, 0.3, true, false);
+    }
+
+    /**
+     * 生成code128条形码
+     *
+     * @param height        条形码的高度
+     * @param width         条形码的宽度
+     * @param message       要生成的文本
+     * @param withQuietZone 是否两边留白
+     * @param hideText      隐藏可读文本
+     * @return 图片对应的字节码
+     */
+    public static void generateBarCode128(String message, Double height, Double width, boolean withQuietZone, boolean hideText) {
+        // 条码保存的路径
+        String path = "D:\\2022-12-20 mes3.0";
+        // 条码的图片名
+        String codeName = UUID.randomUUID().toString();
+        // 图片类型
+        String imageType = "png";
+
+        File file = new File(path, codeName + "." + imageType);
+        FileOutputStream ous = null;
+        try {
+            ous = new FileOutputStream(file);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+
+        Code128Bean bean = new Code128Bean();
+        // 分辨率
+        int dpi = 512;
+        // 设置两侧是否留白
+        bean.doQuietZone(withQuietZone);
+
+        // 设置条形码高度和宽度
+        bean.setBarHeight((double) ObjectUtils.defaultIfNull(height, 9.0D));
+        if (width != null) {
+            bean.setModuleWidth(width);
+        }
+        // 设置文本位置(包括是否显示)
+        if (hideText) {
+            bean.setMsgPosition(HumanReadablePlacement.HRP_NONE);
+        }
+        // 设置图片类型
+        String format = "image/png";
+
+        BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,
+                BufferedImage.TYPE_BYTE_BINARY, false, 0);
+
+        // 生产条形码
+        bean.generateBarcode(canvas, message);
+        try {
+            canvas.finish();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 47 - 0
src/main/java/com/dk/mdm/infrastructure/util/OverflowHiddenDivRenderer.java

@@ -0,0 +1,47 @@
+package com.dk.mdm.infrastructure.util;
+
+import com.itextpdf.kernel.geom.Rectangle;
+import com.itextpdf.layout.element.Div;
+import com.itextpdf.layout.layout.LayoutArea;
+import com.itextpdf.layout.layout.LayoutContext;
+import com.itextpdf.layout.layout.LayoutResult;
+import com.itextpdf.layout.property.Property;
+import com.itextpdf.layout.property.UnitValue;
+import com.itextpdf.layout.renderer.DivRenderer;
+
+/**
+ * @desc   : 是文字溢出当前DIV
+ * https://qa.1r1g.com/sf/ask/3472120991/
+ * @author : 洪旭东
+ * @date   : 2023-04-07 16:11
+ */
+public class OverflowHiddenDivRenderer extends DivRenderer {
+    public OverflowHiddenDivRenderer(Div modelElement) {
+        super(modelElement);
+    }
+
+    @Override
+    public Rectangle getOccupiedAreaBBox() {
+        Rectangle rectangle = super.getOccupiedAreaBBox();
+        if (height != null) {
+            if (rectangle.getHeight() > height.getValue()) {
+                rectangle.moveUp(rectangle.getHeight() - height.getValue()).setHeight(height.getValue());
+            }
+        }
+        return rectangle;
+    }
+
+    @Override
+    public LayoutResult layout(LayoutContext layoutContext) {
+        height = getPropertyAsUnitValue(Property.HEIGHT);
+        deleteProperty(Property.HEIGHT);
+        LayoutResult layoutResult = super.layout(layoutContext);
+        LayoutArea layoutArea = layoutResult.getOccupiedArea();
+        if (layoutArea != null) {
+            layoutArea.setBBox(getOccupiedAreaBBox());
+        }
+        return layoutResult;
+    }
+
+    UnitValue height;
+}

+ 78 - 0
src/main/java/com/dk/mdm/infrastructure/util/QrCodeUtil.java

@@ -0,0 +1,78 @@
+package com.dk.mdm.infrastructure.util;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.datamatrix.encoder.SymbolShapeHint;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * @author : 洪旭东
+ * @desc : QrCodeUtil
+ * @date : 2023-04-07 08:56
+ */
+
+public class QrCodeUtil {
+    private static final int BLACK = 0xFF000000;
+    private static final int WHITE = 0xFFFFFFFF;
+
+    public static void main(String[] args) {
+        System.out.println("开始生成...");
+        code("fdoiafioash shf shas hcsajkd jkasf bd s");
+        System.out.println("生成完毕!");
+    }
+
+    public static void code(String content) {
+        try {
+            // 二维码保存的路径
+            String path = "D:\\2022-12-20 mes3.0";
+            // 二维码的图片名
+            String codeName = UUID.randomUUID().toString();
+            // 图片类型
+            String imageType = "jpg";
+            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
+            Map<EncodeHintType, Object> hints = new HashMap<>();
+            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+            //容错率
+            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+            //生成的数据矩阵的形状
+            hints.put(EncodeHintType.DATA_MATRIX_SHAPE, SymbolShapeHint.FORCE_SQUARE);
+            BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400, hints);
+            File file = new File(path, codeName + "." + imageType);
+            writeToFile(bitMatrix, imageType, file);
+        } catch (WriterException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static BufferedImage toBufferedImage(BitMatrix matrix) {
+        int width = matrix.getWidth();
+        int height = matrix.getHeight();
+        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        for (int x = 0; x < width; x++) {
+            for (int y = 0; y < height; y++) {
+                image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
+            }
+        }
+        return image;
+    }
+
+    public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {
+        BufferedImage image = toBufferedImage(matrix);
+        if (!ImageIO.write(image, format, file)) {
+            throw new IOException("Could not write an image of format " + format + " to " + file);
+        }
+    }
+}

+ 1 - 1
src/main/java/com/dk/mdm/mapper/core/OrganizationMapper.xml

@@ -120,7 +120,7 @@
     <select id="selectByCode" resultType="Long">
         select count(1)
         from core.t_organization
-        where #{orgCode} = org_code
+        where #{orgCode} = org_code and fty_id = #{ftyId}
         <if test="orgId != null and orgId != 0">
             and org_id != #{orgId}
         </if>

+ 1 - 1
src/main/java/com/dk/mdm/mapper/core/UserMapper.xml

@@ -263,7 +263,7 @@
     <select id="selectUserByCode" resultType="Long">
         select count(1)
         from core.t_user
-        where #{userCode} = user_code
+        where #{userCode} = user_code and fty_id = #{ftyId}
         <if test="userId != null and userId != 0">
             and user_id != #{userId}
         </if>

+ 1 - 1
src/main/java/com/dk/mdm/mapper/mst/FactorySpaceMapper.xml

@@ -147,7 +147,7 @@
     <select id="selectByCode" resultType="Long">
         select count(1)
         from mst.t_factory_space
-        where #{spaceCode} = space_code
+        where #{spaceCode} = space_code and fty_id = #{ftyId}
         <if test="spaceId != null and spaceId != 0">
             and space_id != #{spaceId}
         </if>

+ 1 - 1
src/main/java/com/dk/mdm/mapper/mst/ModelCategoryMapper.xml

@@ -132,7 +132,7 @@
     <select id="selectByCode" resultType="Long">
         select count(1)
         from mst.t_model_category
-        where #{categoryCode} = category_code
+        where #{categoryCode} = category_code and fty_id = #{ftyId}
         <if test="categoryId != null and categoryId != 0">
             and category_id != #{categoryId}
         </if>

+ 1 - 1
src/main/java/com/dk/mdm/mapper/mst/ModelPdtLabelMapper.xml

@@ -146,7 +146,7 @@
     <select id="selectByCode" resultType="Long">
         select count(1)
         from mst.t_model_pdt_label
-        where #{labelCode} = label_code
+        where #{labelCode} = label_code and fty_id = #{ftyId}
         <if test="erpItemId != null and erpItemId != 0">
             and erp_item_id != #{erpItemId}
         </if>

+ 15 - 0
src/main/java/com/dk/mdm/mapper/mst/TemplatePrintMapper.java

@@ -0,0 +1,15 @@
+package com.dk.mdm.mapper.mst;
+
+import com.dk.mdm.model.pojo.mst.TemplatePrint;
+import com.dk.common.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface TemplatePrintMapper extends BaseMapper<TemplatePrint> {
+
+    List<TemplatePrint> selectChooseTemplate(TemplatePrint templatePrint);
+
+}
+

+ 181 - 0
src/main/java/com/dk/mdm/mapper/mst/TemplatePrintMapper.xml

@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dk.mdm.mapper.mst.TemplatePrintMapper">
+
+    <!-- 通用设置 -->
+    <!-- 通用查询列 -->
+    <sql id="Base_Column_List">
+        tm_id
+        , tm_name, doc_code, tm_data, display_no, cp_id, sys_id, flg_valid, remarks, op_create_time, op_create_user_id, op_update_time, op_update_user_id, op_app_id, op_api_id, op_timestamp, op_db_user
+    </sql>
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.mst.TemplatePrint">
+        <id column="tm_id" property="tmId"/>
+        <result column="tm_name" property="tmName"/>
+        <result column="doc_code" property="docCode"/>
+        <result column="tm_data" property="tmData" typeHandler="JsonTypeHandler"/>
+        <result column="display_no" property="displayNo"/>
+        <result column="cp_id" property="cpId"/>
+        <result column="sys_id" property="sysId"/>
+        <result column="flg_valid" property="flgValid"/>
+        <result column="remarks" property="remarks"/>
+        <result column="op_create_time" property="opCreateTime"
+                typeHandler="TimestampTypeHandler"/>
+        <result column="op_create_user_id" property="opCreateUserId"/>
+        <result column="op_update_time" property="opUpdateTime"
+                typeHandler="TimestampTypeHandler"/>
+        <result column="op_update_user_id" property="opUpdateUserId"/>
+        <result column="op_app_id" property="opAppId"
+                typeHandler="UuidTypeHandler"/>
+        <result column="op_api_id" property="opApiId"
+                typeHandler="UuidTypeHandler"/>
+        <result column="op_timestamp" property="opTimestamp"
+                typeHandler="TimestampTypeHandler"/>
+        <result column="op_db_user" property="opDbUser"/>
+    </resultMap>
+
+    <!-- 通用条件列 -->
+    <sql id="Condition">
+        <where>
+            <if test="tmName != null and tmName != ''">
+                AND position(#{tmName} in tm_name) > 0
+            </if>
+            <if test="docCode != null and docCode != ''">
+                AND doc_code = #{docCode}
+            </if>
+            <if test="tmData != null and tmData != ''">
+                AND tm_data = #{tmData}
+            </if>
+            <if test="displayNo != null">
+                AND display_no = #{displayNo}
+            </if>
+            <if test="cpId != null">
+                AND cp_id = #{cpId}
+            </if>
+            <if test="sysId != null">
+                AND sys_id = #{sysId}
+            </if>
+            <if test="flgValid != null">
+                AND flg_valid = #{flgValid}
+            </if>
+            <if test="remarks != null and remarks != ''">
+                AND remarks = #{remarks}
+            </if>
+            <if test="opCreateTime != null">
+                AND op_create_time = #{opCreateTime}
+            </if>
+            <if test="opCreateUserId != null">
+                AND op_create_user_id = #{opCreateUserId}
+            </if>
+            <if test="opUpdateTime != null">
+                AND op_update_time = #{opUpdateTime}
+            </if>
+            <if test="opUpdateUserId != null">
+                AND op_update_user_id = #{opUpdateUserId}
+            </if>
+            <if test="opAppId != null and opAppId != ''">
+                AND op_app_id = #{opAppId}
+            </if>
+            <if test="opApiId != null and opApiId != ''">
+                AND op_api_id = #{opApiId}
+            </if>
+            <if test="opTimestamp != null">
+                AND op_timestamp = #{opTimestamp}
+            </if>
+            <if test="opDbUser != null and opDbUser != ''">
+                AND op_db_user = #{opDbUser}
+            </if>
+        </where>
+    </sql>
+
+    <sql id="idsForeach">
+        <!-- 根据主键tmId批量操作 -->
+        WHERE tm_id in
+        <foreach collection="ids" index="index" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+    </sql>
+
+    <!-- 查询表mst.t_m_template_print,(条件查询+分页)列表 -->
+    <select id="selectByCond" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM mst.t_m_template_print
+        <include refid="Condition"/>
+        order by tm_id desc
+    </select>
+
+    <!-- 查询表mst.t_m_template_print,(条件查询)个数 -->
+    <select id="countByCond" resultType="Long">
+        SELECT
+        count(1)
+        FROM mst.t_m_template_print
+        <include refid="Condition"/>
+    </select>
+
+
+    <!-- 根据主键锁定表mst.t_m_template_print的一行数据 -->
+    <select id="selectByIdForUpdate" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM mst.t_m_template_print
+        WHERE tm_id = #{tmId}
+        for update
+    </select>
+
+    <!-- 根据主键锁定表mst.t_m_template_print的多行数据 -->
+    <select id="selectByIdsForUpdate" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM mst.t_m_template_print
+        <include refid="idsForeach"/>
+        for update
+    </select>
+
+    <insert id="insertBatch">
+        insert into mst.t_m_template_print
+        (
+        <trim suffixOverrides=",">
+            tm_name,
+            doc_code,
+            tm_data,
+            display_no,
+            cp_id,
+            sys_id,
+            remarks,
+        </trim>
+        )
+        values
+        <foreach collection="list" index="index" item="item" separator=",">
+            (
+            <trim suffixOverrides=",">
+                #{item.tmName},
+                #{item.docCode},
+                #{item.tmData},
+                #{item.displayNo},
+                #{item.cpId},
+                #{item.sysId},
+                #{item.remarks},
+            </trim>
+            )
+        </foreach>
+    </insert>
+
+    <select id="selectChooseTemplate" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM mst.t_m_template_print
+        where flg_valid is true and
+        case WHEN (
+            select count(1) from mst.t_m_template_print
+            WHERE cp_id = #{cpId} and sys_id = #{sysId} and flg_valid is true) > 0
+            then
+                cp_id = #{cpId} and sys_id = #{sysId}
+            else
+                cp_id = 1 and sys_id = 1
+            end
+        order by display_no
+    </select>
+
+</mapper>

+ 1 - 1
src/main/java/com/dk/mdm/mapper/pdm/ProductCodeHisMapper.java

@@ -35,6 +35,6 @@ public interface ProductCodeHisMapper extends BaseMapper<ProductCodeHis>{
      * @author : 洪旭东
      * @date   : 2023-02-20 17:30
      */
-    Integer checkByCode(@Param("code") String code);
+    Integer checkByCode(@Param("code") String code, @Param("ftyId") Integer ftyId);
 }
 

+ 1 - 1
src/main/java/com/dk/mdm/mapper/pdm/ProductCodeHisMapper.xml

@@ -238,7 +238,7 @@
 <!--    通过条码查询是否存在-->
     <select id="checkByCode" resultType="Integer">
         select 1 from pdm.t_product_code_his
-        where pdt_barcode = #{code}
+        where pdt_barcode = #{code} and fty_id = #{ftyId}
         limit 1
     </select>
 </mapper>

+ 203 - 0
src/main/java/com/dk/mdm/model/pojo/mst/TemplatePrint.java

@@ -0,0 +1,203 @@
+package com.dk.mdm.model.pojo.mst;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.dk.common.infrastructure.annotaiton.ExportTitle;
+import com.dk.common.infrastructure.handler.JsonTypeHandler;
+import com.dk.common.infrastructure.handler.TimestampTypeHandler;
+import com.dk.common.infrastructure.handler.UuidTypeHandler;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+@ExportTitle
+@TableName(value = "t_m_template_print", autoResultMap = true, schema="mst")
+@ApiModel(value="实体类:", description="表名:t_m_template_print")
+public class TemplatePrint implements Serializable {
+
+    /*
+     * 数据库字段
+     */
+
+    /**
+     * 模板ID
+     */
+    @TableId(value = "tm_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "模板ID")
+    private Long tmId;
+
+
+    /**
+     * 模板名
+     */
+    @Excel(name = "模板名")
+    @ApiModelProperty(value = "模板名")
+    @NotBlank(message = "请输入模板名")
+    private String tmName;
+
+
+    /**
+     * 单据代码
+     */
+    @Excel(name = "单据代码")
+    @ApiModelProperty(value = "单据代码")
+    @NotBlank(message = "请输入单据代码")
+    private String docCode;
+
+
+    /**
+     * 模板内容
+     */
+    @Excel(name = "模板内容")
+    @ApiModelProperty(value = "模板内容")
+    @TableField(typeHandler = JsonTypeHandler.class)
+    @NotNull(message = "请输入模板内容")
+    private JSONObject tmData;
+
+
+    /**
+     * 显示顺序
+     */
+    @Excel(name = "显示顺序")
+    @ApiModelProperty(value = "显示顺序")
+    @NotNull(message = "请输入显示顺序")
+    private Integer displayNo;
+
+
+    /**
+     * 所属公司
+     */
+    @Excel(name = "所属公司")
+    @ApiModelProperty(value = "所属公司")
+    @NotNull(message = "请选择所属公司")
+    private Long cpId;
+
+
+    /**
+     * 所属系统
+     */
+    @Excel(name = "所属系统")
+    @ApiModelProperty(value = "所属系统")
+    @NotNull(message = "请选择所属系统")
+    private Long sysId;
+
+
+    /**
+     * 有效标识 (1:正常 0:停用)
+     */
+    @Excel(name = "有效标识 (1:正常 0:停用)")
+    @ApiModelProperty(value = "有效标识 (1:正常 0:停用)")
+    private Boolean flgValid;
+
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注")
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opCreateTime;
+
+
+    /**
+     * 创建用户
+     */
+    @Excel(name = "创建用户")
+    @ApiModelProperty(value = "创建用户")
+    private Long opCreateUserId;
+
+
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "修改时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opUpdateTime;
+
+
+    /**
+     * 修改用户
+     */
+    @Excel(name = "修改用户")
+    @ApiModelProperty(value = "修改用户")
+    private Long opUpdateUserId;
+
+
+    /**
+     * 数据操作应用
+     */
+    @Excel(name = "数据操作应用")
+    @ApiModelProperty(value = "数据操作应用")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opAppId;
+
+
+    /**
+     * 数据操作API
+     */
+    @Excel(name = "数据操作API")
+    @ApiModelProperty(value = "数据操作API")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opApiId;
+
+
+    /**
+     * 数据时间戳
+     */
+    @Excel(name = "数据时间戳")
+    @ApiModelProperty(value = "数据时间戳")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opTimestamp;
+
+
+    /**
+     * 数据操作数据库用户
+     */
+    @Excel(name = "数据操作数据库用户")
+    @ApiModelProperty(value = "数据操作数据库用户")
+    private String opDbUser;
+
+
+    /*
+     * 相关属性
+     * @TableField(exist = false)
+     */
+
+    /*
+     * 关联属性 + 查询条件
+     * @TableField(exist = false)
+     */
+
+
+    private static final long serialVersionUID = 1L;
+
+}

+ 51 - 5
src/main/java/com/dk/mdm/service/mst/LabelPrintLayoutService.java

@@ -1,22 +1,31 @@
 package com.dk.mdm.service.mst;
 
+import com.alibaba.fastjson.JSONObject;
 import com.dk.common.infrastructure.annotaiton.Pagination;
+import com.dk.common.infrastructure.constant.Constant;
+import com.dk.common.mapper.BaseMapper;
 import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseCodeEnum;
+import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
 import com.dk.mdm.infrastructure.convert.mst.LabelPrinteLayoutConvert;
-import com.dk.mdm.model.pojo.mst.LabelPrintLayout;
+import com.dk.mdm.infrastructure.util.PdfUtil;
 import com.dk.mdm.mapper.mst.LabelPrintLayoutMapper;
-import com.dk.common.service.BaseService;
-import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.mapper.mst.LabelPrinterMapper;
+import com.dk.mdm.model.pojo.mst.LabelPrintLayout;
+import com.dk.mdm.model.pojo.mst.LabelPrinter;
 import com.dk.mdm.model.query.mst.LabelPrinteLayoutQuery;
 import com.dk.mdm.model.response.mst.LabelPrinteLayoutResponse;
 import com.dk.mdm.model.vo.mst.LabelPrinteLayoutVO;
-import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.concurrent.TimeUnit;
+
 @Service
-@Transactional
 public class LabelPrintLayoutService extends BaseService<LabelPrintLayout> {
 
 	@Override
@@ -30,6 +39,15 @@ public class LabelPrintLayoutService extends BaseService<LabelPrintLayout> {
 	@Autowired
 	private LabelPrinteLayoutConvert labelPrinteLayoutConvert;
 
+	@Autowired
+	private PdfUtil pdfUtil;
+
+	@Autowired
+	private LabelPrinterMapper labelPrinterMapper;
+
+	@Autowired
+	private StringRedisTemplate stringRedisTemplate;
+
 	/**
 	 * @desc   : 重写主键
 	 * @author : 常皓宁
@@ -75,6 +93,34 @@ public class LabelPrintLayoutService extends BaseService<LabelPrintLayout> {
 	public ResponseResultVO<Boolean> update(LabelPrinteLayoutVO labelPrinteLayoutVO){
 		// 转换实体
 		LabelPrintLayout labelPrintLayout = labelPrinteLayoutConvert.convertToPo(labelPrinteLayoutVO);
+
+		//删除缓存
+		stringRedisTemplate.delete(Constant.RedisConstant.REDIS_LABEL_PRINTER.getName()+labelPrintLayout.getLayoutId());
+
 		return super.update(labelPrintLayout);
 	}
+
+
+	/**
+	 * @desc   : 打印PDF
+	 * @author : 洪旭东
+	 * @date   : 2023-04-10 11:09
+	 */
+	public ResponseResultVO<?> printPdf(Long printerId, Long templateId, Long id){
+		//标签打印机
+		String printerCode;
+		if (stringRedisTemplate.opsForValue().get(Constant.RedisConstant.REDIS_LABEL_PRINTER.getName() + printerId)==null) {
+			LabelPrinter labelPrinter = labelPrinterMapper.selectById(printerId);
+			if (labelPrinter==null) {
+				return ResponseResultUtil.error(ResponseCodeEnum.SELECT_NULL);
+			}
+			stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_LABEL_PRINTER.getName() + printerId, labelPrinter.getPrinterCode(),
+					1, TimeUnit.HOURS);
+			printerCode = labelPrinter.getPrinterCode();
+		}else{
+			printerCode = stringRedisTemplate.opsForValue().get(Constant.RedisConstant.REDIS_LABEL_PRINTER.getName() + printerId);
+		}
+
+		return pdfUtil.print(printerCode, templateId, (JSONObject) JSONObject.toJSON(labelPrintLayoutMapper.selectById(id)));
+	}
 }

+ 73 - 0
src/main/java/com/dk/mdm/service/mst/TemplatePrintService.java

@@ -0,0 +1,73 @@
+package com.dk.mdm.service.mst;
+
+import com.dk.common.infrastructure.constant.Constant;
+import com.dk.mdm.mapper.mst.TemplatePrintMapper;
+import com.dk.mdm.model.pojo.mst.TemplatePrint;
+import com.dk.common.mapper.BaseMapper;
+import com.dk.common.response.ResponseResultUtil;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TemplatePrintService extends BaseService<TemplatePrint> {
+
+	@Override
+	public BaseMapper<TemplatePrint> getRepository() {
+		return templatePrintMapper;
+	}
+
+	@Autowired
+	private TemplatePrintMapper templatePrintMapper;
+
+	@Autowired
+	private StringRedisTemplate stringRedisTemplate;
+
+//	@Autowired
+//	private SystemDocMapper systemDocMapper;
+//
+//	@Autowired
+//	private PageItemService pageItemService;
+
+
+
+
+	@Override
+	public String getPrimaryKey() {
+		return "tm_id";
+	}
+
+
+//	/**
+//	 * @desc   : 打印模板数据源
+//	 * @author : 沈博
+//	 * @date   : 2022/6/28 9:12
+//	 */
+//	public ResponseResultVO<List<Map<String,Object>>> selectDataSource(){
+//		List<Doc> docs = systemDocMapper.selectByCond(new Doc().setFlgPrintItem(true));
+//		return pageItemService.selectPageItemByDoc(docs);
+//	}
+//
+//	/**
+//	 * @desc   : 选择打印模板查询
+//	 * @author : 沈博
+//	 * @date   : 2022/6/28 9:12
+//	 */
+//	public ResponseResultVO<List<TemplatePrint>> selectChooseTemplate(TemplatePrint templatePrint){
+//		return ResponseResultUtil.success(templatePrintMapper.selectChooseTemplate(templatePrint));
+//	}
+
+
+	@Override
+	public ResponseResultVO<Boolean> update(TemplatePrint templatePrint) {
+		//删除缓存
+		stringRedisTemplate.delete(Constant.RedisConstant.REDIS_PRINT_TEMPLATE.getName()+templatePrint.getTmId());
+		return super.update(templatePrint);
+	}
+}

+ 1 - 1
src/main/java/com/dk/mdm/service/pdm/ProductService.java

@@ -116,7 +116,7 @@ public class ProductService extends BaseService<Product> {
 				// region 校验
 
 				// 校验条码履历中是否生成过
-				Integer count = productCodeHisMapper.checkByCode(it.getUniqueCode());
+				Integer count = productCodeHisMapper.checkByCode(it.getUniqueCode(), it.getFtyId());
 				if (count!=null) {
 					throw new BaseBusinessException(ErrorCodeEnum.PRODUCT_CODE_EXIST.getCode(),
 							ErrorCodeEnum.PRODUCT_CODE_EXIST.getMessage());