Explorar o código

新增批次管理中添加开始种植时间所属农场,所属地块。批次号生成逻辑修改

zmj hai 1 mes
pai
achega
5b8b410757

+ 1 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/BatchController.java

@@ -72,6 +72,7 @@ public class BatchController extends BaseController
 
     /**
      * 新增批次管理
+     * 批次号由后端自动生成,规则:JYHY-YYYYMMDD-XXX
      */
     @RequiresPermissions("base:batch:add")
     @Log(title = "批次管理", businessType = BusinessType.INSERT)

+ 12 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/Batch.java

@@ -87,6 +87,10 @@ public class Batch extends BaseEntity
     @JsonFormat(pattern = "yyyy-MM-dd")
     @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date updatedAt;
+    /** 开始种植时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始种植时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startPlantingTime;
 
    private String produceDateStart;
    private String produceDateEnd;
@@ -98,4 +102,12 @@ public class Batch extends BaseEntity
 
     /** 检测报告列表(一个批次对应多个检测报告) */
     private List<Report> reports;
+
+    /** 所属农场 */
+    private Long farmId;
+
+    /** 所属地块 */
+    private Long fieldId;
+    @Excel(name = "所属地块")
+    private String fieldName;
 }

+ 8 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/mapper/BatchMapper.java

@@ -35,6 +35,14 @@ public interface BatchMapper
      */
     public Batch selectBatchByBatchNo(String batchNo);
 
+    /**
+     * 查询指定日期的最后一个批次号
+     *
+     * @param date 日期(格式:yyyy-MM-dd)
+     * @return 批次号
+     */
+    public String selectLastBatchNoByDate(String date);
+
     /**
      * 新增批次管理
      *

+ 49 - 6
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/BatchServiceImpl.java

@@ -1,5 +1,7 @@
 package com.ruoyi.base.service.impl;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 import com.ruoyi.common.core.exception.ServiceException;
@@ -8,6 +10,7 @@ import org.springframework.stereotype.Service;
 import com.ruoyi.base.mapper.BatchMapper;
 import com.ruoyi.base.domain.Batch;
 import com.ruoyi.base.service.IBatchService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 批次管理Service业务层处理
@@ -54,18 +57,58 @@ public class BatchServiceImpl implements IBatchService
      * @return 结果
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int insertBatch(Batch batch)
     {
-        // 校验批次号是否已存在
-        if (batch.getBatchNo() != null && !batch.getBatchNo().isEmpty()) {
-            Batch existBatch = batchMapper.selectBatchByBatchNo(batch.getBatchNo());
-            if (existBatch != null) {
-                throw new ServiceException("批次号 " + batch.getBatchNo() + " 已存在,不能重复添加");
-            }
+        // 自动生成批次号
+        String batchNo = generateBatchNo();
+        batch.setBatchNo(batchNo);
+
+        // 设置创建时间
+        if (batch.getCreatedAt() == null) {
+            batch.setCreatedAt(new Date());
         }
+
         return batchMapper.insertBatch(batch);
     }
 
+    /**
+     * 生成批次号
+     * 规则:JYHY-YYYYMMDD-XXX
+     * JYHY: 品牌前缀
+     * YYYYMMDD: 日期
+     * XXX: 当天流水号(从 001 开始)
+     *
+     * @return 生成的批次号
+     */
+    private String generateBatchNo() {
+        Date now = new Date();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+        String dateStr = dateFormat.format(now);
+        String today = dateFormat.format(now).replace("-", "");
+
+        // 查询当天最后一个批次号
+        String lastBatchNo = batchMapper.selectLastBatchNoByDate(today);
+
+        int sequenceNum = 1;
+        if (lastBatchNo != null && !lastBatchNo.isEmpty()) {
+            // 提取流水号部分
+            try {
+                String[] parts = lastBatchNo.split("-");
+                if (parts.length == 3) {
+                    sequenceNum = Integer.parseInt(parts[2]) + 1;
+                }
+            } catch (NumberFormatException e) {
+                sequenceNum = 1;
+            }
+        }
+
+        // 格式化流水号为 3 位数字
+        String sequence = String.format("%03d", sequenceNum);
+
+        return "JYHY-" + dateStr + "-" + sequence;
+    }
+
     /**
      * 修改批次管理
      *

+ 23 - 2
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/BatchMapper.xml

@@ -17,7 +17,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="farmIntro"    column="farm_intro"    />
         <result property="produceDate"    column="produce_date"    />
         <result property="packageDate"    column="package_date"    />
+        <result property="startPlantingTime"    column="start_planting_time"    />
         <result property="status"    column="status"    />
+        <result property="farmId"    column="farm_id"    />
+        <result property="fieldId"    column="field_id"    />
         <result property="createdAt"    column="created_at"    />
         <result property="updatedAt"    column="updated_at"    />
         <association property="certificate" javaType="Certificate" select="com.ruoyi.base.mapper.CertificateMapper.selectCertificateByBatchId" column="id"/>
@@ -26,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectBatchVo">
-        select id, batch_no, product_name, product_spec, product_image, product_desc, farm_name, farm_region, farm_image, farm_intro, produce_date, package_date, status, created_at, updated_at from batch
+        select id, batch_no, product_name, product_spec, product_image, product_desc, farm_name, farm_region, farm_image, farm_intro, produce_date, package_date,start_planting_time, status, created_at, updated_at from batch
     </sql>
 
     <select id="selectBatchList" parameterType="Batch" resultMap="BatchResult">
@@ -55,13 +58,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <select id="selectBatchById" parameterType="Long" resultMap="BatchResult">
-        <include refid="selectBatchVo"/>
+        select id, batch_no, product_name, product_spec, product_image, product_desc, farm_id, field_id,
+               farm_name, farm_region, farm_image, farm_intro, produce_date, package_date,start_planting_time, status, created_at, updated_at from batch
+
         where id = #{id}
     </select>
     <select id="selectBatchByBatchNo" parameterType="String" resultMap="BatchResult">
         <include refid="selectBatchVo"/>
         where batch_no = #{batchNo}
     </select>
+    <select id="selectLastBatchNoByDate" parameterType="String" resultType="String">
+        SELECT batch_no FROM batch
+        WHERE DATE(created_at) = #{date}
+          AND batch_no REGEXP '^JYHY-[0-9]{8}-[0-9]{3}$'
+        ORDER BY batch_no DESC
+            LIMIT 1
+    </select>
 
     <insert id="insertBatch" parameterType="Batch" useGeneratedKeys="true" keyProperty="id">
         insert into batch
@@ -71,12 +83,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="productSpec != null">product_spec,</if>
             <if test="productImage != null">product_image,</if>
             <if test="productDesc != null">product_desc,</if>
+            <if test="farmId != null and farmId != ''">farm_id,</if>
+            <if test="fieldId != null and fieldId != ''">field_id,</if>
             <if test="farmName != null and farmName != ''">farm_name,</if>
             <if test="farmRegion != null and farmRegion != ''">farm_region,</if>
             <if test="farmImage != null">farm_image,</if>
             <if test="farmIntro != null">farm_intro,</if>
             <if test="produceDate != null">produce_date,</if>
             <if test="packageDate != null">package_date,</if>
+            <if test="startPlantingTime != null">start_planting_time,</if>
             <if test="status != null and status != ''">status,</if>
             <if test="createdAt != null">created_at,</if>
             <if test="updatedAt != null">updated_at,</if>
@@ -87,12 +102,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="productSpec != null">#{productSpec},</if>
             <if test="productImage != null">#{productImage},</if>
             <if test="productDesc != null">#{productDesc},</if>
+            <if test="farmId != null and farmId != ''">#{farmId},</if>
+            <if test="fieldId != null and fieldId != ''">#{fieldId},</if>
             <if test="farmName != null and farmName != ''">#{farmName},</if>
             <if test="farmRegion != null and farmRegion != ''">#{farmRegion},</if>
             <if test="farmImage != null">#{farmImage},</if>
             <if test="farmIntro != null">#{farmIntro},</if>
             <if test="produceDate != null">#{produceDate},</if>
             <if test="packageDate != null">#{packageDate},</if>
+            <if test="startPlantingTime != null">#{startPlantingTime},</if>
             <if test="status != null and status != ''">#{status},</if>
             <if test="createdAt != null">#{createdAt},</if>
             <if test="updatedAt != null">#{updatedAt},</if>
@@ -107,12 +125,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="productSpec != null">product_spec = #{productSpec},</if>
             <if test="productImage != null">product_image = #{productImage},</if>
             <if test="productDesc != null">product_desc = #{productDesc},</if>
+            <if test="farmId != null and farmId != ''">farm_id = #{farmId},</if>
+            <if test="fieldId != null and fieldId != ''">field_id = #{fieldId},</if>
             <if test="farmName != null and farmName != ''">farm_name = #{farmName},</if>
             <if test="farmRegion != null and farmRegion != ''">farm_region = #{farmRegion},</if>
             <if test="farmImage != null">farm_image = #{farmImage},</if>
             <if test="farmIntro != null">farm_intro = #{farmIntro},</if>
             <if test="produceDate != null">produce_date = #{produceDate},</if>
             <if test="packageDate != null">package_date = #{packageDate},</if>
+            <if test="startPlantingTime != null">start_planting_time = #{startPlantingTime},</if>
             <if test="status != null and status != ''">status = #{status},</if>
             <if test="createdAt != null">created_at = #{createdAt},</if>
             <if test="updatedAt != null">updated_at = #{updatedAt},</if>