瀏覽代碼

模块开发12

wwh 2 月之前
父節點
當前提交
b20667517d
共有 27 個文件被更改,包括 795 次插入5 次删除
  1. 15 0
      huimv-farm/src/main/java/vip/xiaonuo/production/controller/ProductionEnergyPriceController.java
  2. 1 1
      huimv-farm/src/main/java/vip/xiaonuo/production/entity/ProductionEnergyPrice.java
  3. 6 0
      huimv-farm/src/main/java/vip/xiaonuo/production/service/IProductionEnergyPriceService.java
  4. 24 2
      huimv-farm/src/main/java/vip/xiaonuo/production/service/impl/ProductionEnergyPriceServiceImpl.java
  5. 2 2
      huimv-farm/src/main/java/vip/xiaonuo/production/service/impl/ProductionTargetServiceImpl.java
  6. 56 0
      huimv-farm/src/main/java/vip/xiaonuo/production/service/impl/ProductionWriteRateServiceImpl.java
  7. 20 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/controller/QualityReagentInStockController.java
  8. 20 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/controller/QualityReagentOutStockController.java
  9. 62 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/controller/QualityReagentStockController.java
  10. 68 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/entity/QualityReagentInStock.java
  11. 68 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/entity/QualityReagentOutStock.java
  12. 64 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/entity/QualityReagentStock.java
  13. 16 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/mapper/QualityReagentInStockMapper.java
  14. 16 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/mapper/QualityReagentOutStockMapper.java
  15. 16 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/mapper/QualityReagentStockMapper.java
  16. 19 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/param/QualityStockPageParam.java
  17. 24 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/service/IQualityReagentInStockService.java
  18. 16 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/service/IQualityReagentOutStockService.java
  19. 25 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/service/IQualityReagentStockService.java
  20. 54 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityFenxibaogaoServiceImpl.java
  21. 94 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityReagentInStockServiceImpl.java
  22. 20 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityReagentOutStockServiceImpl.java
  23. 72 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityReagentStockServiceImpl.java
  24. 2 0
      huimv-farm/src/main/java/vip/xiaonuo/write/entity/WriteWarning.java
  25. 5 0
      huimv-farm/src/main/resources/mapper/QualityReagentInStockMapper.xml
  26. 5 0
      huimv-farm/src/main/resources/mapper/QualityReagentOutStockMapper.xml
  27. 5 0
      huimv-farm/src/main/resources/mapper/QualityReagentStockMapper.xml

+ 15 - 0
huimv-farm/src/main/java/vip/xiaonuo/production/controller/ProductionEnergyPriceController.java

@@ -21,6 +21,7 @@ import vip.xiaonuo.production.param.ProductionPageParam;
 import vip.xiaonuo.production.service.IProductionEnergyPriceService;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -53,4 +54,18 @@ public class ProductionEnergyPriceController {
     public CommonResult<Page<ProductionEnergyPrice>> page(@RequestBody ProductionPageParam pageParam) {
         return CommonResult.data(priceService.page(pageParam));
     }
+
+    @PostMapping("/production-energy-price/update")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("能耗单价表填报修改")
+    public CommonResult<CommonResult> update(@RequestBody ProductionEnergyPrice energyPrice) {
+        return CommonResult.data(priceService.update(energyPrice));
+    }
+
+    @PostMapping("/production-energy-price/delete")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("能耗单价表填报删除")
+    public CommonResult<CommonResult> delete(@RequestBody Map<String,String> paramsMap) {
+        return CommonResult.data(priceService.delete(paramsMap));
+    }
 }

+ 1 - 1
huimv-farm/src/main/java/vip/xiaonuo/production/entity/ProductionEnergyPrice.java

@@ -143,7 +143,7 @@ public class ProductionEnergyPrice implements Serializable {
      * 创建时间
      */
     @ApiModelProperty(value = "创建时间", position =19)
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
     private Date createTime;
 
 

+ 6 - 0
huimv-farm/src/main/java/vip/xiaonuo/production/service/IProductionEnergyPriceService.java

@@ -6,6 +6,8 @@ import vip.xiaonuo.production.entity.ProductionEnergyPrice;
 import com.baomidou.mybatisplus.extension.service.IService;
 import vip.xiaonuo.production.param.ProductionPageParam;
 
+import java.util.Map;
+
 /**
  * <p>
  * 能耗单价表填报 服务类
@@ -18,6 +20,10 @@ public interface IProductionEnergyPriceService extends IService<ProductionEnergy
 
     CommonResult addAndEdit(ProductionEnergyPrice energyPrice);
 
+    CommonResult update(ProductionEnergyPrice energyPrice);
+
+    CommonResult delete(Map<String,String> paramsMap);
+
     Page<ProductionEnergyPrice> page(ProductionPageParam pageParam);
 
 }

+ 24 - 2
huimv-farm/src/main/java/vip/xiaonuo/production/service/impl/ProductionEnergyPriceServiceImpl.java

@@ -13,6 +13,9 @@ import vip.xiaonuo.production.service.IProductionEnergyPriceService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.Map;
+
 /**
  * <p>
  * 能耗单价表填报 服务实现类
@@ -30,17 +33,36 @@ public class ProductionEnergyPriceServiceImpl extends ServiceImpl<ProductionEner
     @Override
     public CommonResult addAndEdit(ProductionEnergyPrice energyPrice) {
         String orgId = energyPrice.getOrgId();
-        Integer locationId = energyPrice.getLocationId();
-        ProductionEnergyPrice productionEnergyPrice = priceMapper.selectOne(new QueryWrapper<ProductionEnergyPrice>().eq("location_id", locationId).eq("org_id", orgId));
+        Date createTime = energyPrice.getCreateTime();
+        ProductionEnergyPrice productionEnergyPrice = priceMapper.selectOne(new QueryWrapper<ProductionEnergyPrice>()
+                .eq("org_id", orgId).eq("create_time", createTime));
         if (ObjectUtil.isEmpty(productionEnergyPrice)) {
             priceMapper.insert(energyPrice);
         } else {
+            return CommonResult.error();
+        }
+        return CommonResult.ok();
+    }
+
+    @Override
+    public CommonResult update(ProductionEnergyPrice energyPrice) {
+        String orgId = energyPrice.getOrgId();
+        if ("".equals(orgId) || null == orgId) {
+            return CommonResult.error();
+        } else {
             priceMapper.updateById(energyPrice);
         }
         return CommonResult.ok();
     }
 
     @Override
+    public CommonResult delete(Map<String, String> paramsMap) {
+        String id = paramsMap.get("id");
+        priceMapper.deleteById(id);
+        return CommonResult.ok();
+    }
+
+    @Override
     public Page<ProductionEnergyPrice> page(ProductionPageParam pageParam) {
         String orgId = pageParam.getOrgId();
         Page<ProductionEnergyPrice> page = new Page<>();

+ 2 - 2
huimv-farm/src/main/java/vip/xiaonuo/production/service/impl/ProductionTargetServiceImpl.java

@@ -173,14 +173,14 @@ public class ProductionTargetServiceImpl extends ServiceImpl<ProductionTargetMap
                 ",IFNULL(sum(ya_suo),'0') yaSuo,IFNULL(sum(ro_water),'0') roWater,IFNULL(sum(zl_water),'0') zlWater, IFNULL(sum(xh_water),'0') xhWater" +
                 ",IFNULL(sum(qd_water),'0') qdwater,IFNULL(sum(swd_water),'0') swdWater,IFNULL(sum(eswd_water),'0') eswdWater,IFNULL(sum(re_water),'0') reWater" +
                 ",IFNULL(sum(diwen_water),'0') diwenWater,IFNULL(sum(fu_swd_yierchun),'0') fuSwdYierchun" +
-                ",IFNULL(sum(fu_eswd_yierchun),'0') fuEswdYierchun,location_id locationId");
+                ",IFNULL(sum(fu_eswd_yierchun),'0') fuEswdYierchun,location_id locationId,org_id orgId");
         energyQueryWrapper.groupBy("location_id");
         List<ProductionWriteEnergy> energyList = energyMapper.selectList(energyQueryWrapper);
         Double count = 0.00;
         for (ProductionWriteEnergy energy : energyList) {
             if (energy.getLocationId() != null) {
                 QueryWrapper<ProductionEnergyPrice> priceQueryWrapper = new QueryWrapper<>();
-                priceQueryWrapper.eq("location_id", energy.getLocationId());
+                priceQueryWrapper.eq("org_id", energy.getOrgId()).eq("create_time",time);
                 ProductionEnergyPrice energyPrice = priceMapper.selectOne(priceQueryWrapper);
                 if (ObjectUtil.isNotEmpty(energyPrice)) {
                     if ("".equals(energyPrice.getElectricity())) {

+ 56 - 0
huimv-farm/src/main/java/vip/xiaonuo/production/service/impl/ProductionWriteRateServiceImpl.java

@@ -16,8 +16,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import vip.xiaonuo.sys.modular.org.entity.SysOrg;
 import vip.xiaonuo.sys.modular.org.mapper.SysOrgMapper;
+import vip.xiaonuo.write.entity.WriteThreshold;
+import vip.xiaonuo.write.entity.WriteWarning;
+import vip.xiaonuo.write.mapper.WriteThresholdMapper;
+import vip.xiaonuo.write.mapper.WriteWarningMapper;
 
 import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -35,6 +41,10 @@ public class ProductionWriteRateServiceImpl extends ServiceImpl<ProductionWriteR
     private ProductionWriteRateMapper writeRateMapper;
     @Autowired
     private SysOrgMapper orgMapper;
+    @Autowired
+    private WriteThresholdMapper thresholdMapper;
+    @Autowired
+    private WriteWarningMapper warningMapper;
 
     @Override
     public CommonResult add(ProductionWriteRateAddParam param) {
@@ -44,6 +54,52 @@ public class ProductionWriteRateServiceImpl extends ServiceImpl<ProductionWriteR
         BeanUtil.copyProperties(param, writeRate);
         writeRate.setOrgName(org.getName());
         writeRateMapper.insert(writeRate);
+        String rate = param.getProductionRate();
+        Double value = Double.valueOf(rate);
+        QueryWrapper<WriteThreshold> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id",param.getOrgId()).eq("type_s",5);
+        List<WriteThreshold> thresholds = thresholdMapper.selectList(queryWrapper);
+        if (thresholds.size() != 0) {
+            for (WriteThreshold threshold : thresholds) {
+                String valuesS = threshold.getValuesS();
+                Double valueOf = Double.valueOf(valuesS);
+                Integer isTrue = threshold.getIsTrue();
+                if (0 == isTrue) {
+                    if (value < valueOf) {
+                        WriteWarning warning = new WriteWarning();
+                        warning.setWarningDate(new Date());
+                        warning.setWarningType(threshold.getIndexS());
+                        warning.setWarningLevel(threshold.getLevelS().toString());
+                        warning.setWarningContent(threshold.getIndexS() + rate + "小于阈值");
+                        warning.setUserName(threshold.getUserName());
+                        warning.setUserId(threshold.getUserId());
+                        warning.setType(5);
+                        warningMapper.insert(warning);
+                    }
+                } else if (1 == isTrue) {
+                    WriteWarning warning = new WriteWarning();
+                    warning.setWarningDate(new Date());
+                    warning.setWarningType(threshold.getIndexS());
+                    warning.setWarningLevel(threshold.getLevelS().toString());
+                    warning.setWarningContent(threshold.getIndexS() + rate + "等于阈值");
+                    warning.setUserName(threshold.getUserName());
+                    warning.setUserId(threshold.getUserId());
+                    warning.setType(5);
+                    warningMapper.insert(warning);
+                } else if (2 == isTrue) {
+                    WriteWarning warning = new WriteWarning();
+                    warning.setWarningDate(new Date());
+                    warning.setWarningType(threshold.getIndexS());
+                    warning.setWarningLevel(threshold.getLevelS().toString());
+                    warning.setWarningContent(threshold.getIndexS() + rate + "大于阈值");
+                    warning.setUserName(threshold.getUserName());
+                    warning.setUserId(threshold.getUserId());
+                    warning.setType(5);
+                    warningMapper.insert(warning);
+                }
+            }
+        }
+
         return CommonResult.ok();
     }
 

+ 20 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/controller/QualityReagentInStockController.java

@@ -0,0 +1,20 @@
+package vip.xiaonuo.quality.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 质量试剂入库 前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@RestController
+@RequestMapping("/quality-reagent-in-stock")
+public class QualityReagentInStockController {
+
+}

+ 20 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/controller/QualityReagentOutStockController.java

@@ -0,0 +1,20 @@
+package vip.xiaonuo.quality.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 质量试剂出库 前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@RestController
+@RequestMapping("/quality-reagent-out-stock")
+public class QualityReagentOutStockController {
+
+}

+ 62 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/controller/QualityReagentStockController.java

@@ -0,0 +1,62 @@
+package vip.xiaonuo.quality.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+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 vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.quality.entity.QualityReagentStock;
+import vip.xiaonuo.quality.entity.QualityTarget;
+import vip.xiaonuo.quality.param.QualityParam;
+import vip.xiaonuo.quality.param.QualityStockPageParam;
+import vip.xiaonuo.quality.service.IQualityReagentStockService;
+
+/**
+ * <p>
+ * 质量试剂仓库 前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@RestController
+@Api(tags = "质量试剂仓库")
+@ApiSupport(author = "wang", order = 1)
+@Validated
+public class QualityReagentStockController {
+
+    @Autowired
+    private IQualityReagentStockService stockService;
+
+    @PostMapping("/quality-reagent-stock/page")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("质量试剂仓库分页")
+    public CommonResult<Page<QualityReagentStock>> page(@RequestBody QualityStockPageParam stockPageParam) {
+        return CommonResult.data(stockService.page(stockPageParam));
+    }
+
+    @PostMapping("/quality-reagent-stock/add")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("质量试剂仓库库存添加")
+    public CommonResult add(@RequestBody QualityReagentStock qualityReagentStock) {
+        return stockService.add(qualityReagentStock);
+    }
+
+
+    @PostMapping("/quality-reagent-stock/edit")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("质量试剂仓库库存修改")
+    public CommonResult edit(@RequestBody QualityReagentStock qualityReagentStock) {
+        return stockService.edit(qualityReagentStock);
+    }
+
+}

+ 68 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/entity/QualityReagentInStock.java

@@ -0,0 +1,68 @@
+package vip.xiaonuo.quality.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 质量试剂入库
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("quality_reagent_in_stock")
+public class QualityReagentInStock implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 试剂名称
+     */
+    @ApiModelProperty(value = "试剂名称",position =2 )
+    private String reagent;
+
+    /**
+     * 入库数量
+     */
+    @ApiModelProperty(value = "入库数量",position =3 )
+    private String inValue;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间",position =4 )
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 组织id
+     */
+    @ApiModelProperty(value = "组织id",position =5 )
+    private String orgId;
+
+    /**
+     * 组织名称
+     */
+    @ApiModelProperty(value = "组织名称",position =6 )
+    private String orgName;
+
+
+}

+ 68 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/entity/QualityReagentOutStock.java

@@ -0,0 +1,68 @@
+package vip.xiaonuo.quality.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 质量试剂出库
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("quality_reagent_out_stock")
+public class QualityReagentOutStock implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 试剂名称
+     */
+    @ApiModelProperty(value = "试剂名称",position = 2)
+    private String reagent;
+
+    /**
+     * 出库数量
+     */
+    @ApiModelProperty(value = "出库数量",position = 3)
+    private String outValue;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间",position = 4)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 组织id
+     */
+    @ApiModelProperty(value = "组织id",position = 5)
+    private String orgId;
+
+    /**
+     * 组织名称
+     */
+    @ApiModelProperty(value = "组织名称",position = 6)
+    private String orgName;
+
+
+}

+ 64 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/entity/QualityReagentStock.java

@@ -0,0 +1,64 @@
+package vip.xiaonuo.quality.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 质量试剂仓库
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("quality_reagent_stock")
+public class QualityReagentStock implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 试剂名称
+     */
+    @ApiModelProperty(value = "试剂名称",position = 1)
+    private String reagent;
+
+    /**
+     * 库存量
+     */
+    @ApiModelProperty(value = "库存量",position =2 )
+    private String stock;
+
+
+    @ApiModelProperty(value = "组织id",position =3 )
+    private String orgId;
+
+
+    @ApiModelProperty(value = "组织名称",position = 4)
+    private String orgName;
+
+
+    @ApiModelProperty(value = "最新入库时间", position = 5)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date inTime;
+
+
+    @ApiModelProperty(value = "最新出库时间",position = 6)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date outTime;
+
+}

+ 16 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/mapper/QualityReagentInStockMapper.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.quality.mapper;
+
+import vip.xiaonuo.quality.entity.QualityReagentInStock;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 质量试剂入库 Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+public interface QualityReagentInStockMapper extends BaseMapper<QualityReagentInStock> {
+
+}

+ 16 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/mapper/QualityReagentOutStockMapper.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.quality.mapper;
+
+import vip.xiaonuo.quality.entity.QualityReagentOutStock;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 质量试剂出库 Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+public interface QualityReagentOutStockMapper extends BaseMapper<QualityReagentOutStock> {
+
+}

+ 16 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/mapper/QualityReagentStockMapper.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.quality.mapper;
+
+import vip.xiaonuo.quality.entity.QualityReagentStock;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 质量试剂仓库 Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+public interface QualityReagentStockMapper extends BaseMapper<QualityReagentStock> {
+
+}

+ 19 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/param/QualityStockPageParam.java

@@ -0,0 +1,19 @@
+package vip.xiaonuo.quality.param;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class QualityStockPageParam {
+
+    @ApiModelProperty(value = "当前页数", position = 1)
+    private Integer pageNum;
+
+    @ApiModelProperty(value = "页面大小", position = 2)
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "组织id", position = 3)
+    private String orgId;
+
+}

+ 24 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/service/IQualityReagentInStockService.java

@@ -0,0 +1,24 @@
+package vip.xiaonuo.quality.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.quality.entity.QualityReagentInStock;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.quality.param.QualityStockPageParam;
+
+/**
+ * <p>
+ * 质量试剂入库 服务类
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+public interface IQualityReagentInStockService extends IService<QualityReagentInStock> {
+
+    CommonResult add(QualityReagentInStock inStock);
+
+    CommonResult edit(QualityReagentInStock inStock);
+
+    Page<QualityReagentInStock> page(QualityStockPageParam pageParam);
+}

+ 16 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/service/IQualityReagentOutStockService.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.quality.service;
+
+import vip.xiaonuo.quality.entity.QualityReagentOutStock;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 质量试剂出库 服务类
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+public interface IQualityReagentOutStockService extends IService<QualityReagentOutStock> {
+
+}

+ 25 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/service/IQualityReagentStockService.java

@@ -0,0 +1,25 @@
+package vip.xiaonuo.quality.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.quality.entity.QualityReagentStock;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.quality.param.QualityStockPageParam;
+
+/**
+ * <p>
+ * 质量试剂仓库 服务类
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+public interface IQualityReagentStockService extends IService<QualityReagentStock> {
+
+    Page<QualityReagentStock> page(QualityStockPageParam stockPageParam);
+
+    CommonResult add(QualityReagentStock qualityReagentStock);
+
+    CommonResult edit(QualityReagentStock qualityReagentStock);
+
+}

+ 54 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityFenxibaogaoServiceImpl.java

@@ -33,7 +33,12 @@ import vip.xiaonuo.quality.mapper.QualityFenxibaogaoMapper;
 import vip.xiaonuo.quality.param.*;
 import vip.xiaonuo.quality.param.vo.ChengPinQuXianVo;
 import vip.xiaonuo.quality.service.QualityFenxibaogaoService;
+import vip.xiaonuo.write.entity.WriteThreshold;
+import vip.xiaonuo.write.entity.WriteWarning;
+import vip.xiaonuo.write.mapper.WriteThresholdMapper;
+import vip.xiaonuo.write.mapper.WriteWarningMapper;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -47,6 +52,10 @@ public class QualityFenxibaogaoServiceImpl extends ServiceImpl<QualityFenxibaoga
 
     @Autowired
     private QualityFenxibaogaoMapper qualityFenxibaogaoMapper;
+    @Autowired
+    private WriteThresholdMapper thresholdMapper;
+    @Autowired
+    private WriteWarningMapper warningMapper;
 
     @Override
     public Page<QualityFenxibaogao> page(QualityFenxibaogaoPageParam qualityFenxibaogaoPageParam) {
@@ -73,6 +82,51 @@ public class QualityFenxibaogaoServiceImpl extends ServiceImpl<QualityFenxibaoga
         }
         QualityFenxibaogao qualityFenxibaogao = BeanUtil.toBean(qualityFenxibaogaoAddParam, QualityFenxibaogao.class);
         this.save(qualityFenxibaogao);
+        String otation = qualityFenxibaogao.getSpecificOtation();
+        Double value = Double.valueOf(otation);
+        QueryWrapper<WriteThreshold> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id",qualityFenxibaogao.getOrgId()).eq("type_s",7);
+        List<WriteThreshold> thresholds = thresholdMapper.selectList(queryWrapper);
+        if (thresholds.size() != 0) {
+            for (WriteThreshold threshold : thresholds) {
+                String valuesS = threshold.getValuesS();
+                Double valueOf = Double.valueOf(valuesS);
+                Integer isTrue = threshold.getIsTrue();
+                if (0 == isTrue) {
+                    if (value < valueOf) {
+                        WriteWarning warning = new WriteWarning();
+                        warning.setWarningDate(new Date());
+                        warning.setWarningType(threshold.getIndexS());
+                        warning.setWarningLevel(threshold.getLevelS().toString());
+                        warning.setWarningContent(threshold.getIndexS() + otation + "小于阈值");
+                        warning.setUserName(threshold.getUserName());
+                        warning.setUserId(threshold.getUserId());
+                        warning.setType(7);
+                        warningMapper.insert(warning);
+                    }
+                } else if (1 == isTrue) {
+                    WriteWarning warning = new WriteWarning();
+                    warning.setWarningDate(new Date());
+                    warning.setWarningType(threshold.getIndexS());
+                    warning.setWarningLevel(threshold.getLevelS().toString());
+                    warning.setWarningContent(threshold.getIndexS() + otation + "等于阈值");
+                    warning.setUserName(threshold.getUserName());
+                    warning.setUserId(threshold.getUserId());
+                    warning.setType(7);
+                    warningMapper.insert(warning);
+                } else if (2 == isTrue) {
+                    WriteWarning warning = new WriteWarning();
+                    warning.setWarningDate(new Date());
+                    warning.setWarningType(threshold.getIndexS());
+                    warning.setWarningLevel(threshold.getLevelS().toString());
+                    warning.setWarningContent(threshold.getIndexS() + otation + "大于阈值");
+                    warning.setUserName(threshold.getUserName());
+                    warning.setUserId(threshold.getUserId());
+                    warning.setType(7);
+                    warningMapper.insert(warning);
+                }
+            }
+        }
     }
 
     @Transactional(rollbackFor = Exception.class)

+ 94 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityReagentInStockServiceImpl.java

@@ -0,0 +1,94 @@
+package vip.xiaonuo.quality.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.quality.entity.QualityReagentInStock;
+import vip.xiaonuo.quality.entity.QualityReagentStock;
+import vip.xiaonuo.quality.mapper.QualityReagentInStockMapper;
+import vip.xiaonuo.quality.mapper.QualityReagentStockMapper;
+import vip.xiaonuo.quality.param.QualityStockPageParam;
+import vip.xiaonuo.quality.service.IQualityReagentInStockService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.text.DecimalFormat;
+import java.util.Date;
+
+/**
+ * <p>
+ * 质量试剂入库 服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@Service
+public class QualityReagentInStockServiceImpl extends ServiceImpl<QualityReagentInStockMapper, QualityReagentInStock> implements IQualityReagentInStockService {
+
+
+    @Autowired
+    private QualityReagentInStockMapper inStockMapper;
+    @Autowired
+    private QualityReagentStockMapper stockMapper;
+
+    @Override
+    public CommonResult add(QualityReagentInStock inStock) {
+        if ("".equals(inStock.getOrgId()) || null == inStock.getOrgId()) {
+            return CommonResult.error();
+        } else {
+            inStockMapper.insert(inStock);
+            QueryWrapper<QualityReagentStock> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("org_id", inStock.getOrgId()).eq("reagent", inStock.getReagent());
+            QualityReagentStock stock = stockMapper.selectOne(queryWrapper);
+            if (ObjectUtil.isEmpty(stock)) {
+                QualityReagentStock stock1 = new QualityReagentStock();
+                stock1.setOrgId(inStock.getOrgId());
+                stock1.setOrgName(inStock.getOrgName());
+                stock1.setReagent(inStock.getReagent());
+                stock1.setStock(inStock.getInValue());
+                stockMapper.insert(stock1);
+            } else {
+                String stockStock = stock.getStock();
+                Double aDouble = Double.valueOf(stockStock);
+                String inValue = inStock.getInValue();
+                Double aDouble1 = Double.valueOf(inValue);
+                DecimalFormat def = new DecimalFormat("0.00");
+                stock.setStock(def.format(aDouble + aDouble1));
+                stockMapper.updateById(stock);
+            }
+        }
+        return CommonResult.ok();
+    }
+
+    @Override
+    public CommonResult edit(QualityReagentInStock inStock) {
+        QualityReagentInStock inStock1 = inStockMapper.selectById(inStock);
+        QueryWrapper<QualityReagentStock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", inStock.getOrgId()).eq("reagent", inStock.getReagent());
+        QualityReagentStock stock = stockMapper.selectOne(queryWrapper);
+        Double aDouble = Double.valueOf(stock.getStock());
+        Double aDouble1 = Double.valueOf(inStock1.getInValue());
+        Double aDouble2 = Double.valueOf(inStock.getInValue());
+        DecimalFormat def = new DecimalFormat("0.00");
+        stock.setStock(def.format(aDouble - aDouble1+aDouble2));
+        stockMapper.updateById(stock);
+        inStockMapper.updateById(inStock);
+        return CommonResult.ok();
+    }
+
+    @Override
+    public Page<QualityReagentInStock> page(QualityStockPageParam pageParam) {
+        Integer pageSize = pageParam.getPageSize();
+        Integer pageNum = pageParam.getPageNum();
+        String orgId = pageParam.getOrgId();
+        QueryWrapper<QualityReagentInStock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
+        queryWrapper.orderByDesc("create_time");
+        Page<QualityReagentInStock> page = new Page<>(pageNum, pageSize);
+        return inStockMapper.selectPage(page,queryWrapper);
+    }
+}

+ 20 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityReagentOutStockServiceImpl.java

@@ -0,0 +1,20 @@
+package vip.xiaonuo.quality.service.impl;
+
+import vip.xiaonuo.quality.entity.QualityReagentOutStock;
+import vip.xiaonuo.quality.mapper.QualityReagentOutStockMapper;
+import vip.xiaonuo.quality.service.IQualityReagentOutStockService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 质量试剂出库 服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@Service
+public class QualityReagentOutStockServiceImpl extends ServiceImpl<QualityReagentOutStockMapper, QualityReagentOutStock> implements IQualityReagentOutStockService {
+
+}

+ 72 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityReagentStockServiceImpl.java

@@ -0,0 +1,72 @@
+package vip.xiaonuo.quality.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.quality.entity.QualityReagentStock;
+import vip.xiaonuo.quality.mapper.QualityReagentStockMapper;
+import vip.xiaonuo.quality.param.QualityStockPageParam;
+import vip.xiaonuo.quality.service.IQualityReagentStockService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 质量试剂仓库 服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2025-03-10
+ */
+@Service
+public class QualityReagentStockServiceImpl extends ServiceImpl<QualityReagentStockMapper, QualityReagentStock> implements IQualityReagentStockService {
+
+    @Autowired
+    private QualityReagentStockMapper stockMapper;
+
+    @Override
+    public Page<QualityReagentStock> page(QualityStockPageParam stockPageParam) {
+        String orgId = stockPageParam.getOrgId();
+        Integer pageNum = stockPageParam.getPageNum();
+        Integer pageSize = stockPageParam.getPageSize();
+        Page<QualityReagentStock> page = new Page<>(pageNum, pageSize);
+        QueryWrapper<QualityReagentStock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
+        return stockMapper.selectPage(page,queryWrapper);
+    }
+
+    @Override
+    public CommonResult add(QualityReagentStock qualityReagentStock) {
+        String orgId = qualityReagentStock.getOrgId();
+        String reagent = qualityReagentStock.getReagent();
+        if ("".equals(orgId) || null == orgId) {
+            return CommonResult.error();
+        }
+        QueryWrapper<QualityReagentStock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", orgId).eq("reagent", reagent);
+        QualityReagentStock reagentStock = stockMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isEmpty(reagentStock)) {
+            stockMapper.insert(qualityReagentStock);
+        } else {
+            return CommonResult.error();
+        }
+        return CommonResult.ok();
+    }
+
+    @Override
+    public CommonResult edit(QualityReagentStock qualityReagentStock) {
+        QueryWrapper<QualityReagentStock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("org_id", qualityReagentStock.getOrgId()).eq("reagent", qualityReagentStock.getReagent())
+                .ne("id", qualityReagentStock.getId());
+        QualityReagentStock reagentStock = stockMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isEmpty(reagentStock)) {
+            stockMapper.updateById(qualityReagentStock);
+        } else {
+            return CommonResult.error();
+        }
+        return CommonResult.ok();
+    }
+}

+ 2 - 0
huimv-farm/src/main/java/vip/xiaonuo/write/entity/WriteWarning.java

@@ -85,5 +85,7 @@ public class WriteWarning implements Serializable {
     @ApiModelProperty(value = "模块划分0财务1人事2采购3仓库4风控5生产6销售7质量",position =9 )
     private Integer type;
 
+    private String userId;
+
 
 }

+ 5 - 0
huimv-farm/src/main/resources/mapper/QualityReagentInStockMapper.xml

@@ -0,0 +1,5 @@
+<?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="vip.xiaonuo.quality.mapper.QualityReagentInStockMapper">
+
+</mapper>

+ 5 - 0
huimv-farm/src/main/resources/mapper/QualityReagentOutStockMapper.xml

@@ -0,0 +1,5 @@
+<?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="vip.xiaonuo.quality.mapper.QualityReagentOutStockMapper">
+
+</mapper>

+ 5 - 0
huimv-farm/src/main/resources/mapper/QualityReagentStockMapper.xml

@@ -0,0 +1,5 @@
+<?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="vip.xiaonuo.quality.mapper.QualityReagentStockMapper">
+
+</mapper>