Explorar o código

v3项目-修改0910

wwh hai 2 meses
pai
achega
288efe5f91

+ 12 - 3
app-admin/src/main/java/com/ruoyi/web/v2/v1/controller/JsDrugCheckController.java

@@ -1,6 +1,8 @@
 package com.ruoyi.web.v2.v1.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.annotation.Anonymous;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.web.v2.v1.model.JsDrugCheck;
@@ -8,6 +10,7 @@ import com.ruoyi.web.v2.v1.service.IJsDrugCheckService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
@@ -53,7 +56,12 @@ public class JsDrugCheckController {
 
     @ApiOperation("违禁药物登记列表")
     @PostMapping("/list")
-    public AjaxResult listAll() {
+    public AjaxResult listAll(@RequestBody Map<String, String> param) {
+        if(!ObjectUtils.isEmpty(param) && !ObjectUtils.isEmpty(param.getOrDefault("type", null))) {
+            QueryWrapper wrapper = new QueryWrapper();
+            wrapper.eq("type", param.get("type"));
+            return success(drugCheckService.list(wrapper));
+        }
         return drugCheckService.listAll();
     }
 
@@ -62,9 +70,10 @@ public class JsDrugCheckController {
     public AjaxResult page(@RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize
             , @RequestParam(value = "startTime", required = false) String startTime
             , @RequestParam(value = "endTime", required = false) String endTime
-            , @RequestParam(value = "animalCertNo", required = false) String animalCertNo) {
+            , @RequestParam(value = "animalCertNo", required = false) String animalCertNo
+            , @RequestParam(value = "type", required = false) String type) {
 
-        return drugCheckService.page(pageNum, pageSize, startTime, endTime, animalCertNo);
+        return drugCheckService.page(pageNum, pageSize, startTime, endTime, animalCertNo, type);
     }
 
     @ApiOperation("违禁药物登记详情")

+ 12 - 4
app-admin/src/main/java/com/ruoyi/web/v2/v1/controller/JsDrugController.java

@@ -14,6 +14,7 @@ import com.ruoyi.web.v2.v1.service.IJsDrugService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
@@ -48,7 +49,7 @@ public class JsDrugController {
         }
         int i = drugService.count(new QueryWrapper<JsDrug>().eq("drug_name", jsDrug.getDrugName()));
         if (i != 0) {
-            return error("该违禁药物已存在");
+            return error("该药物已存在");
         }
         drugService.save(jsDrug);
         return success();
@@ -65,7 +66,7 @@ public class JsDrugController {
         }
         int i = drugService.count(new QueryWrapper<JsDrug>().eq("drug_name", jsDrug.getDrugName()).ne("id",jsDrug.getId()));
         if (i != 0) {
-            return error("该违禁药物已存在");
+            return error("该药物已存在");
         }
         drugService.updateById(jsDrug);
         return success();
@@ -84,17 +85,24 @@ public class JsDrugController {
 
     @ApiOperation("违禁药物管理列表")
     @PostMapping("/list")
-    public AjaxResult listAll(){
+    public AjaxResult listAll(@RequestBody Map<String, String> param){
+        if(!ObjectUtils.isEmpty(param) && !ObjectUtils.isEmpty(param.getOrDefault("type", null))) {
+            QueryWrapper wrapper = new QueryWrapper();
+            wrapper.eq("type", param.get("type"));
+            return success(drugService.list(wrapper));
+        }
         return success(drugService.list());
     }
 
     @ApiOperation("违禁药物管理分页")
     @GetMapping("/page")
     public AjaxResult page(@RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize
-            , @RequestParam(value = "drugName", required = false) String drugName) {
+            , @RequestParam(value = "drugName", required = false) String drugName,
+                           @RequestParam(value = "type", required = false) String type) {
         Page<JsDrug> page = new Page<>(pageNum, pageSize);
         QueryWrapper<JsDrug> queryWrapper = new QueryWrapper<>();
         queryWrapper.like(StringUtils.isNotEmpty(drugName), "drug_name", drugName);
+        queryWrapper.eq("type", type);
         return success(drugService.page(page, queryWrapper));
     }
 

+ 44 - 44
app-admin/src/main/java/com/ruoyi/web/v2/v1/controller/JsReportController.java

@@ -83,49 +83,49 @@ public class JsReportController {
     @PostMapping("/register")
     public AjaxResult register(@RequestBody List<JsDivideCircle> circles) {
         //根据提交的分圈登记,计算每个批次的剩余存栏量(每个猪圈的存栏量为0后视为该批次完结),然后决定猪圈状态和待宰栏中的该批次数据状态
-        for (JsDivideCircle circle : circles) {
-            if (!ObjectUtils.isEmpty(circle.getEntranceBatchId()) && !ObjectUtils.isEmpty(circle.getSeriesNo())) {
-                //先检索出同批次、同栏的历史记录,针对数量进行逻辑完整性校验,数量的变化过程,不能小于0,小于0就归零
-                List<JsDivideCircle> records = jsDivideCircleMapper.selectList(new LambdaQueryWrapper<JsDivideCircle>()
-                        .eq(JsDivideCircle::getSeriesNo, circle.getSeriesNo())
-                        .eq(JsDivideCircle::getStatusFlag, "opened")
-                        .ge(JsDivideCircle::getAmount, circle.getAmount()));
-                boolean isDuplicated = records.stream().anyMatch(item -> item.getAmount().equals(circle.getAmount()));
-                if(circle.getAmount() > 0) {
-                    if (!ObjectUtils.isEmpty(records) && !isDuplicated) {
-                        circle.setStatusFlag("opened");
-                        circle.setId(null);
-                        //系统自动插入的数据,分圈时间设置为空
-                        circle.setDivideTime(null);
-                        circle.setCreateTime(new Date());
-                        jsDivideCircleMapper.insert(circle);
-                    }
-                }else {
-                    if (!ObjectUtils.isEmpty(records)) {
-                        circle.setId(null);
-                        //系统自动插入的数据,分圈时间设置为空
-                        circle.setDivideTime(null);
-                        circle.setCreateTime(new Date());
-                        jsDivideCircleMapper.insert(circle);
-                        jsDivideCircleMapper.update(null, new LambdaUpdateWrapper<JsDivideCircle>()
-                                .eq(JsDivideCircle::getSeriesNo, circle.getSeriesNo())
-                                .eq(JsDivideCircle::getStatusFlag, "opened")
-                                .set(JsDivideCircle::getStatusFlag, "closed"));
-                        Pigpen pigpen = new Pigpen();
-                        pigpen.setId(circle.getPigpenId().longValue());
-                        pigpen.setIsUse(0);
-                        pigpenMapper.updatePigpen(pigpen);
-                    }
-                }
-            }
-        }
-        //保存完工报告记录
-        JsReport jsReport = new JsReport();
-        jsReport.setCreateTime(new Date());
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        jsReport.setUserName(Optional.ofNullable(loginUser.getUser())
-                .map(SysUser::getNickName)
-                .orElse("系统管理员"));
-        return success(reportService.save(jsReport));
+//        for (JsDivideCircle circle : circles) {
+//            if (!ObjectUtils.isEmpty(circle.getEntranceBatchId()) && !ObjectUtils.isEmpty(circle.getSeriesNo())) {
+//                //先检索出同批次、同栏的历史记录,针对数量进行逻辑完整性校验,数量的变化过程,不能小于0,小于0就归零
+//                List<JsDivideCircle> records = jsDivideCircleMapper.selectList(new LambdaQueryWrapper<JsDivideCircle>()
+//                        .eq(JsDivideCircle::getSeriesNo, circle.getSeriesNo())
+//                        .eq(JsDivideCircle::getStatusFlag, "opened")
+//                        .ge(JsDivideCircle::getAmount, circle.getAmount()));
+//                boolean isDuplicated = records.stream().anyMatch(item -> item.getAmount().equals(circle.getAmount()));
+//                if(circle.getAmount() > 0) {
+//                    if (!ObjectUtils.isEmpty(records) && !isDuplicated) {
+//                        circle.setStatusFlag("opened");
+//                        circle.setId(null);
+//                        //系统自动插入的数据,分圈时间设置为空
+//                        circle.setDivideTime(null);
+//                        circle.setCreateTime(new Date());
+//                        jsDivideCircleMapper.insert(circle);
+//                    }
+//                }else {
+//                    if (!ObjectUtils.isEmpty(records)) {
+//                        circle.setId(null);
+//                        //系统自动插入的数据,分圈时间设置为空
+//                        circle.setDivideTime(null);
+//                        circle.setCreateTime(new Date());
+//                        jsDivideCircleMapper.insert(circle);
+//                        jsDivideCircleMapper.update(null, new LambdaUpdateWrapper<JsDivideCircle>()
+//                                .eq(JsDivideCircle::getSeriesNo, circle.getSeriesNo())
+//                                .eq(JsDivideCircle::getStatusFlag, "opened")
+//                                .set(JsDivideCircle::getStatusFlag, "closed"));
+//                        Pigpen pigpen = new Pigpen();
+//                        pigpen.setId(circle.getPigpenId().longValue());
+//                        pigpen.setIsUse(0);
+//                        pigpenMapper.updatePigpen(pigpen);
+//                    }
+//                }
+//            }
+//        }
+//        //保存完工报告记录
+//        JsReport jsReport = new JsReport();
+//        jsReport.setCreateTime(new Date());
+//        LoginUser loginUser = SecurityUtils.getLoginUser();
+//        jsReport.setUserName(Optional.ofNullable(loginUser.getUser())
+//                .map(SysUser::getNickName)
+//                .orElse("系统管理员"));
+        return success(reportService.register(circles));
     }
 }

+ 3 - 0
app-admin/src/main/java/com/ruoyi/web/v2/v1/model/JsDrug.java

@@ -42,4 +42,7 @@ public class JsDrug implements Serializable {
     @ApiModelProperty(value = "方法")
     private String method;
 
+    @ApiModelProperty(value = "药物类型:1.违禁药物2.疫病检测3.抗生素")
+    private String type;
+
 }

+ 3 - 0
app-admin/src/main/java/com/ruoyi/web/v2/v1/model/JsDrugCheck.java

@@ -67,4 +67,7 @@ public class JsDrugCheck implements Serializable {
     @ApiModelProperty(value = "检测人员(签字)")
     private String examinerConfirm;
 
+    @ApiModelProperty(value = "药物类型:1.违禁药物2.疫病检测3.抗生素")
+    private String type;
+
 }

+ 1 - 1
app-admin/src/main/java/com/ruoyi/web/v2/v1/service/IJsDrugCheckService.java

@@ -22,7 +22,7 @@ public interface IJsDrugCheckService extends IService<JsDrugCheck> {
 
     AjaxResult delete(String ids);
 
-    AjaxResult page(Integer pageNum, Integer pageSize, String startTime, String endTime, String animalCertNo);
+    AjaxResult page(Integer pageNum, Integer pageSize, String startTime, String endTime, String animalCertNo,String type);
 
     AjaxResult listAll();
 

+ 5 - 0
app-admin/src/main/java/com/ruoyi/web/v2/v1/service/IJsReportService.java

@@ -1,8 +1,11 @@
 package com.ruoyi.web.v2.v1.service;
 
+import com.ruoyi.web.v2.v1.model.JsDivideCircle;
 import com.ruoyi.web.v2.v1.model.JsReport;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * v2.0完工报告 服务类
@@ -13,4 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IJsReportService extends IService<JsReport> {
 
+    boolean register(List<JsDivideCircle> circles);
+
 }

+ 4 - 1
app-admin/src/main/java/com/ruoyi/web/v2/v1/service/impl/JsDrugCheckServiceImpl.java

@@ -129,7 +129,7 @@ public class JsDrugCheckServiceImpl extends ServiceImpl<JsDrugCheckMapper, JsDru
     }
 
     @Override
-    public AjaxResult page(Integer pageNum, Integer pageSize, String startTime, String endTime, String animalCertNo) {
+    public AjaxResult page(Integer pageNum, Integer pageSize, String startTime, String endTime, String animalCertNo, String type) {
         Page<JsDrugCheck> page = new Page<>(pageNum, pageSize);
         QueryWrapper<JsDrugCheck> queryWrapper = new QueryWrapper<>();
         if ("".equals(startTime) || null == startTime) {
@@ -137,6 +137,9 @@ public class JsDrugCheckServiceImpl extends ServiceImpl<JsDrugCheckMapper, JsDru
         } else {
             queryWrapper.between("check_time", startTime + " 00:00:00", endTime + " 23:59:59");
         }
+        if(!ObjectUtils.isEmpty(type)) {
+            queryWrapper.eq("type", type);
+        }
         queryWrapper.orderByDesc("check_time");
         queryWrapper.like(StringUtils.isNotEmpty(animalCertNo), "animal_cert_no", animalCertNo);
         return success(drugCheckMapper.selectPage(page, queryWrapper));

+ 80 - 0
app-admin/src/main/java/com/ruoyi/web/v2/v1/service/impl/JsReportServiceImpl.java

@@ -1,10 +1,26 @@
 package com.ruoyi.web.v2.v1.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.ruoyi.app.mapper.PigpenMapper;
+import com.ruoyi.app.model.Pigpen;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.web.v2.v1.mapper.JsDivideCircleMapper;
+import com.ruoyi.web.v2.v1.model.JsDivideCircle;
 import com.ruoyi.web.v2.v1.model.JsReport;
 import com.ruoyi.web.v2.v1.mapper.JsReportMapper;
 import com.ruoyi.web.v2.v1.service.IJsReportService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
 
 /**
  * <p>
@@ -17,4 +33,68 @@ import org.springframework.stereotype.Service;
 @Service
 public class JsReportServiceImpl extends ServiceImpl<JsReportMapper, JsReport> implements IJsReportService {
 
+    @Autowired
+    private PigpenMapper pigpenMapper;
+
+    @Autowired
+    private JsDivideCircleMapper jsDivideCircleMapper;
+
+
+    @Transactional
+    @Override
+    public boolean register(List<JsDivideCircle> circles) {
+        //根据提交的分圈登记,计算每个批次的剩余存栏量(每个猪圈的存栏量为0后视为该批次完结),然后决定猪圈状态和待宰栏中的该批次数据状态
+        for (JsDivideCircle circle : circles) {
+            if(ObjectUtils.isEmpty(circle.getAmount()) || circle.getAmount() < 0) {
+                throw new IllegalArgumentException("待宰栏【" + circle.getPigpenName() + "】的猪只数量不能为空,或小于0...");
+            }
+            if (!ObjectUtils.isEmpty(circle.getEntranceBatchId()) && !ObjectUtils.isEmpty(circle.getSeriesNo())) {
+                //先检索出同批次、同栏的历史记录,针对数量进行逻辑完整性校验,数量的变化过程,不能小于0,小于0就归零
+                List<JsDivideCircle> records = jsDivideCircleMapper.selectList(new LambdaQueryWrapper<JsDivideCircle>()
+                        .eq(JsDivideCircle::getSeriesNo, circle.getSeriesNo())
+                        .eq(JsDivideCircle::getStatusFlag, "opened")
+                        .ge(JsDivideCircle::getAmount, circle.getAmount()));
+                boolean isDuplicated = records.stream().anyMatch(item -> item.getAmount().equals(circle.getAmount()));
+                if(circle.getAmount() > 0) {
+                    if (!ObjectUtils.isEmpty(records) && !isDuplicated) {
+                        //检测输入数量是否为递减(不允许存栏量是增多的)
+                        boolean isIncreasing = records.stream().anyMatch(item -> item.getAmount() < circle.getAmount());
+                        if(isIncreasing) {
+                            throw new IllegalArgumentException("待宰栏【" + circle.getPigpenName() + "】的存栏量不能多于已登记的数量...");
+                        }
+                        circle.setStatusFlag("opened");
+                        circle.setId(null);
+                        //系统自动插入的数据,分圈时间设置为空
+                        circle.setDivideTime(null);
+                        circle.setCreateTime(new Date());
+                        jsDivideCircleMapper.insert(circle);
+                    }
+                }else {
+                    if (!ObjectUtils.isEmpty(records)) {
+                        circle.setId(null);
+                        //系统自动插入的数据,分圈时间设置为空
+                        circle.setDivideTime(null);
+                        circle.setCreateTime(new Date());
+                        jsDivideCircleMapper.insert(circle);
+                        jsDivideCircleMapper.update(null, new LambdaUpdateWrapper<JsDivideCircle>()
+                                .eq(JsDivideCircle::getSeriesNo, circle.getSeriesNo())
+                                .eq(JsDivideCircle::getStatusFlag, "opened")
+                                .set(JsDivideCircle::getStatusFlag, "closed"));
+                        Pigpen pigpen = new Pigpen();
+                        pigpen.setId(circle.getPigpenId().longValue());
+                        pigpen.setIsUse(0);
+                        pigpenMapper.updatePigpen(pigpen);
+                    }
+                }
+            }
+        }
+        //保存完工报告记录
+        JsReport jsReport = new JsReport();
+        jsReport.setCreateTime(new Date());
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        jsReport.setUserName(Optional.ofNullable(loginUser.getUser())
+                .map(SysUser::getNickName)
+                .orElse("系统管理员"));
+        return save(jsReport);
+    }
 }

+ 22 - 17
app-system/src/main/java/com/ruoyi/app/service/impl/EntranceBatchServiceImpl.java

@@ -2,6 +2,7 @@ package com.ruoyi.app.service.impl;
 
 import java.time.ZoneId;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -77,24 +78,28 @@ public class EntranceBatchServiceImpl implements IEntranceBatchService {
 
     @Override
     public List<EntranceBatch> selectEntranceBatchList2(EntranceBatch entranceBatch) {
-        List<EntranceBatch> list;
-        if(!ObjectUtils.isEmpty(entranceBatch.getEntranceTime())) {
-            //限定数据的日期范围
-            entranceBatch.setCreateTime(Date.from(entranceBatch.getEntranceTime().atZone(ZoneId.systemDefault()).toInstant()));
-            //检索出猪圈状态为开放的所有批次
-            List<DivideCircle> closedList = divideCircleMapper.selectList(new LambdaQueryWrapper<DivideCircle>().eq(DivideCircle::getStatusFlag, "closed"));
-            //过滤掉所有状态是closed的批次(保留状态是opened的批次以及还未分圈的批次)
-//            list = entranceBatchMapper.selectEntranceBatchList1(entranceBatch).stream().filter(item1 -> openList.stream()
-//                    .anyMatch(item2 -> item2.getAnimalCertNo().equals(item1.getAnimalCertNo())))
+        List<DivideCircle> closedList = divideCircleMapper.selectList(new LambdaQueryWrapper<DivideCircle>().eq(DivideCircle::getStatusFlag, "closed"));
+        //过滤掉所有状态是closed的批次(保留状态是opened的批次以及还未分圈的批次)
+        List<EntranceBatch> list = entranceBatchMapper.selectEntranceBatchList1(null).stream()
+                .filter(item1 -> closedList.stream()
+                        .noneMatch(item2 -> item2.getAnimalCertNo().equals(item1.getAnimalCertNo())))
+                // 新增排序逻辑:按时间降序(从最近到最早)
+                .sorted(Comparator.comparing(EntranceBatch::getEntranceTime).reversed())
+                .collect(Collectors.toList());
+//        if(!ObjectUtils.isEmpty(entranceBatch.getEntranceTime())) {
+//            //限定数据的日期范围
+//            entranceBatch.setCreateTime(Date.from(entranceBatch.getEntranceTime().atZone(ZoneId.systemDefault()).toInstant()));
+//            //检索出关联猪圈状态为关闭的记录进行过滤
+//            List<DivideCircle> closedList = divideCircleMapper.selectList(new LambdaQueryWrapper<DivideCircle>().eq(DivideCircle::getStatusFlag, "closed"));
+//            //过滤掉所有状态是closed的批次(保留状态是opened的批次以及还未分圈的批次)
+//            list = entranceBatchMapper.selectEntranceBatchList1(entranceBatch).stream()
+//                    .filter(item1 -> closedList.stream()
+//                            .noneMatch(item2 -> item2.getAnimalCertNo().equals(item1.getAnimalCertNo())))
 //                    .collect(Collectors.toList());
-            list = entranceBatchMapper.selectEntranceBatchList1(entranceBatch).stream()
-                    .filter(item1 -> closedList.stream()
-                            .noneMatch(item2 -> item2.getAnimalCertNo().equals(item1.getAnimalCertNo())))
-                    .collect(Collectors.toList());
-        }else {
-            //如果输入参数不带时间,就按普通分页查询进行处理
-            list = entranceBatchMapper.selectEntranceBatchList1(entranceBatch);
-        }
+//        }else {
+//            //如果输入参数不带时间,就按普通分页查询进行处理
+//            list = entranceBatchMapper.selectEntranceBatchList1(entranceBatch);
+//        }
         return list;
 
     }

+ 2 - 2
app-system/src/main/resources/mapper/app/SupplierMapper.xml

@@ -122,8 +122,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="inBlacklist != null">in_blacklist = #{inBlacklist},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
-            <if test="principalType != null">#{principalType},</if>
-            <if test="principalId != null">#{principalId},</if>
+            <if test="principalType != null">principal_type = #{principalType},</if>
+            <if test="principalId != null">principal_id = #{principalId},</if>
         </trim>
         where id = #{id}
     </update>

+ 5 - 0
sql/v3_biz_20250814.sql

@@ -593,3 +593,8 @@ CREATE TABLE `hb_org_info` (
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企业信息';
 -- remarks字段设定为default的就是默认企业信息,设定为current的,则是当前企业信息
 INSERT INTO `hb_org_info` VALUES (1, '杭州慧牧科技有限公司', '杭州i慧牧', '/default_logo.png', '', '', '', '', 'default', 0, 'admin', '2025-09-09 11:11:21', 'admin', '2025-09-09 11:20:44');
+
+-- 药物管理 添加“药物类型”
+ALTER TABLE `js_drug` ADD COLUMN `type` VARCHAR(30) COMMENT '药物类型:1.违禁药物2.疫病检测3.抗生素';
+-- 药物登记 添加“药物类型”
+ALTER TABLE `js_drug_check` ADD COLUMN `type` VARCHAR(30) COMMENT '药物类型:1.违禁药物2.疫病检测3.抗生素';