24282 il y a 2 ans
Parent
commit
0c1d14ac43

+ 1 - 1
hx-common/code-generator/src/main/java/com/fjhx/modular/Victoriatourist.java

@@ -12,7 +12,7 @@ public class Victoriatourist {
         CodeGenerator.MODULAR_NAME = "victoriatourist";
 
         // 需要生成的表名称,多表用,隔开
-        CodeGenerator.INCLUDE = "check_details";
+        CodeGenerator.INCLUDE = "form_overflow_loss";
 
         // mysql连接
         CodeGenerator.MYSQL_URL = "36.134.91.96:17330";

+ 1 - 1
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/entity/check/CheckDetails.java

@@ -43,7 +43,7 @@ public class CheckDetails extends BaseEntity {
     private BigDecimal checkQuantity;
 
     /**
-     * 盘点结果 0正常 1异常
+     * 盘点结果 0正常 1盘盈 2盘亏
      */
     private Integer resultType;
 

+ 70 - 0
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/entity/form/FormOverflowLoss.java

@@ -0,0 +1,70 @@
+package com.fjhx.entity.form;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FormOverflowLoss extends BaseEntity {
+
+
+    /**
+     * 1溢 2损
+     */
+    private Integer type;
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 原因
+     */
+    private String remarks;
+
+    /**
+     * 业务类型 1盘点
+     */
+    private Integer businessType;
+
+    /**
+     * 业务id
+     */
+    private Long businessId;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+
+}

+ 17 - 0
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/form/FormOverflowLossEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.form;
+
+import com.fjhx.entity.form.FormOverflowLoss;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 
+ *
+ * @author ${author}
+ * @since 2022-12-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FormOverflowLossEx extends FormOverflowLoss {
+
+}

+ 17 - 0
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/form/FormOverflowLossVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.form;
+
+import com.fjhx.entity.form.FormOverflowLoss;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 
+ *
+ * @author ${author}
+ * @since 2022-12-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FormOverflowLossVo extends FormOverflowLoss {
+
+}

+ 37 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/controller/form/FormOverflowLossController.java

@@ -0,0 +1,37 @@
+package com.fjhx.controller.form;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.service.form.FormOverflowLossService;
+import org.springblade.core.tool.api.R;
+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.Map;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-27
+ */
+@RestController
+@RequestMapping("/formOverflowLoss")
+public class FormOverflowLossController {
+
+    @Autowired
+    private FormOverflowLossService formOverflowLossService;
+
+    @PostMapping("/page")
+    public R page(@RequestBody Condition condition) {
+        Page<Map<String, Object>> result = formOverflowLossService.getPage(condition);
+        return R.success(result);
+    }
+
+}
+

+ 23 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/mapper/form/FormOverflowLossMapper.java

@@ -0,0 +1,23 @@
+package com.fjhx.mapper.form;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.form.FormOverflowLoss;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.utils.wrapperUtil.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-27
+ */
+public interface FormOverflowLossMapper extends BaseMapper<FormOverflowLoss> {
+
+    Page<Map<String, Object>> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Object> wrapper);
+
+}

+ 18 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/mapper/form/FormOverflowLossMapper.xml

@@ -0,0 +1,18 @@
+<?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.fjhx.mapper.form.FormOverflowLossMapper">
+
+    <select id="getPage" resultType="java.util.Map">
+        select fol.id,
+               fol.code,
+               fol.amount,
+               fol.create_time,
+               fol.create_user,
+               fol.remarks,
+               w.name warehouseName
+        from form_overflow_loss fol
+                 left join warehouse w on w.id = fol.warehouse_id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 48 - 4
hx-service/victoriatourist/src/main/java/com/fjhx/service/check/impl/CheckInfoServiceImpl.java

@@ -1,16 +1,20 @@
 package com.fjhx.service.check.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.Condition;
 import com.fjhx.entity.check.CheckDetails;
 import com.fjhx.entity.check.CheckInfo;
+import com.fjhx.entity.stock.Stock;
 import com.fjhx.entity.warehouse.Warehouse;
 import com.fjhx.mapper.check.CheckInfoMapper;
 import com.fjhx.params.check.CheckInfoVo;
 import com.fjhx.service.check.CheckDetailsService;
 import com.fjhx.service.check.CheckInfoService;
+import com.fjhx.service.form.FormOverflowLossService;
+import com.fjhx.service.stock.StockService;
 import com.fjhx.uitl.code.CodeEnum;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.UserClientUtil;
@@ -22,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -37,6 +42,12 @@ public class CheckInfoServiceImpl extends ServiceImpl<CheckInfoMapper, CheckInfo
     @Autowired
     private CheckDetailsService checkDetailsService;
 
+    @Autowired
+    private StockService stockService;
+
+    @Autowired
+    private FormOverflowLossService formOverflowLossService;
+
     @Override
     public Page<Map<String, Object>> getPage(Condition condition) {
 
@@ -65,32 +76,55 @@ public class CheckInfoServiceImpl extends ServiceImpl<CheckInfoMapper, CheckInfo
         Long warehouseId = checkInfoVo.getWarehouseId();
         Assert.notEmpty(warehouseId, "仓库id不能为空");
 
+        // 最总盘点结论(0正常 1异常)类型
         int checkResultType = 0;
 
         List<CheckDetails> checkDetailsList = checkInfoVo.getCheckDetailsList();
 
+        // 盘盈金额
+        BigDecimal overflowAmount = BigDecimal.ZERO;
+
+        // 盘亏金额
+        BigDecimal lossAmount = BigDecimal.ZERO;
+
+        // 获取商品加权平均价
+        List<Long> productIdList = checkDetailsList.stream().map(CheckDetails::getProductId).collect(Collectors.toList());
+        Map<Long, BigDecimal> kv = stockService.getKV(Stock::getGoodsId, Stock::getWeightingAveragePrice,
+                q -> q.eq(Stock::getWarehouseId, warehouseId).in(Stock::getGoodsId, productIdList));
+
         for (CheckDetails checkDetails : checkDetailsList) {
+            Long productId = checkDetails.getProductId();
             BigDecimal checkQuantity = checkDetails.getCheckQuantity();
             BigDecimal inventoryQuantity = checkDetails.getInventoryQuantity();
 
-            Assert.notEmpty(checkDetails.getProductId(), "产品id不能为空");
+
+            Assert.notEmpty(productId, "产品id不能为空");
             Assert.notEmpty(checkQuantity, "盘点数量不能为空");
             Assert.notEmpty(inventoryQuantity, "现有库存不能为空");
 
             checkDetails.setCheckInfoId(id);
 
-            int compareTo = inventoryQuantity.compareTo(checkQuantity);
-            if (compareTo > 0) {
+            int flag = inventoryQuantity.compareTo(checkQuantity);
+            if (flag > 0) {
                 checkDetails.setResultType(2);
                 checkResultType = 1;
-            } else if (compareTo < 0) {
+
+                // 添加盘亏金额
+                BigDecimal weightingAveragePrice = ObjectUtil.defaultIfNull(kv.get(productId), BigDecimal.ZERO);
+                lossAmount = lossAmount.add(inventoryQuantity.subtract(checkQuantity).multiply(weightingAveragePrice));
+            } else if (flag < 0) {
                 checkDetails.setResultType(1);
                 checkResultType = 1;
+
+                // 添加盘盈金额
+                BigDecimal weightingAveragePrice = ObjectUtil.defaultIfNull(kv.get(productId), BigDecimal.ZERO);
+                overflowAmount = overflowAmount.add(checkQuantity.subtract(inventoryQuantity).multiply(weightingAveragePrice));
             } else {
                 checkDetails.setResultType(0);
             }
         }
 
+        // 添加盘点记录
         synchronized (this) {
             checkInfoVo.setId(id);
             checkInfoVo.setResultType(checkResultType);
@@ -98,7 +132,17 @@ public class CheckInfoServiceImpl extends ServiceImpl<CheckInfoMapper, CheckInfo
             save(checkInfoVo);
         }
 
+        // 添加盘点明细
         checkDetailsService.saveBatch(checkDetailsList);
+
+        // 添加溢损单
+        if (overflowAmount.compareTo(BigDecimal.ZERO) > 0) {
+            formOverflowLossService.addOverflow(1, id, warehouseId, overflowAmount, "");
+        }
+        if (lossAmount.compareTo(BigDecimal.ZERO) > 0) {
+            formOverflowLossService.addLoss(1, id, warehouseId, lossAmount, "");
+        }
+
     }
 
     @Override

+ 45 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/form/FormOverflowLossService.java

@@ -0,0 +1,45 @@
+package com.fjhx.service.form;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.BaseService;
+import com.fjhx.base.Condition;
+import com.fjhx.entity.form.FormOverflowLoss;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-27
+ */
+public interface FormOverflowLossService extends BaseService<FormOverflowLoss> {
+
+    Page<Map<String, Object>> getPage(Condition condition);
+
+    /**
+     * 报溢
+     *
+     * @param businessType
+     * @param businessId
+     * @param warehouseId
+     * @param amount
+     * @param remarks
+     */
+    void addOverflow(Integer businessType, Long businessId, Long warehouseId, BigDecimal amount, String remarks);
+
+    /**
+     * 报损
+     *
+     * @param businessType
+     * @param businessId
+     * @param warehouseId
+     * @param amount
+     * @param remarks
+     */
+    void addLoss(Integer businessType, Long businessId, Long warehouseId, BigDecimal amount, String remarks);
+
+}

+ 75 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/form/impl/FormOverflowLossServiceImpl.java

@@ -0,0 +1,75 @@
+package com.fjhx.service.form.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.Condition;
+import com.fjhx.entity.form.FormOverflowLoss;
+import com.fjhx.mapper.form.FormOverflowLossMapper;
+import com.fjhx.service.form.FormOverflowLossService;
+import com.fjhx.uitl.code.CodeEnum;
+import com.fjhx.utils.UserClientUtil;
+import com.fjhx.utils.wrapperUtil.IWrapper;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-27
+ */
+@Service
+public class FormOverflowLossServiceImpl extends ServiceImpl<FormOverflowLossMapper, FormOverflowLoss> implements FormOverflowLossService {
+
+    @Override
+    public Page<Map<String, Object>> getPage(Condition condition) {
+
+        IWrapper<Object> wrapper = IWrapper.getWrapper(condition)
+                .eq("fol", FormOverflowLoss::getType)
+                .like("fol", FormOverflowLoss::getCode)
+                .eq("fol", FormOverflowLoss::getWarehouseId)
+                .eq("fol", FormOverflowLoss::getCreateUser)
+                .periodTime("fol", FormOverflowLoss::getCreateTime);
+
+        Page<Map<String, Object>> page = baseMapper.getPage(condition.getPage(), wrapper);
+
+        UserClientUtil.setUserName(page.getRecords(), "createUser", "createUserName");
+
+        return page;
+    }
+
+    @Override
+    public void addOverflow(Integer businessType, Long businessId, Long warehouseId, BigDecimal amount, String remarks) {
+
+        FormOverflowLoss formOverflowLoss = new FormOverflowLoss();
+        formOverflowLoss.setType(1);
+        formOverflowLoss.setCode(CodeEnum.FORM_OVERFLOW.getCode());
+        formOverflowLoss.setWarehouseId(warehouseId);
+        formOverflowLoss.setAmount(amount);
+        formOverflowLoss.setRemarks(remarks);
+        formOverflowLoss.setBusinessType(businessType);
+        formOverflowLoss.setBusinessId(businessId);
+
+        save(formOverflowLoss);
+    }
+
+    @Override
+    public void addLoss(Integer businessType, Long businessId, Long warehouseId, BigDecimal amount, String remarks) {
+
+        FormOverflowLoss formOverflowLoss = new FormOverflowLoss();
+        formOverflowLoss.setType(2);
+        formOverflowLoss.setCode(CodeEnum.FORM_LOSS.getCode());
+        formOverflowLoss.setWarehouseId(warehouseId);
+        formOverflowLoss.setAmount(amount);
+        formOverflowLoss.setRemarks(remarks);
+        formOverflowLoss.setBusinessType(businessType);
+        formOverflowLoss.setBusinessId(businessId);
+
+        save(formOverflowLoss);
+    }
+
+}

+ 10 - 2
hx-service/victoriatourist/src/main/java/com/fjhx/uitl/code/CodeEnum.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fjhx.service.apply.ApplyPurchaseService;
 import com.fjhx.service.check.CheckInfoService;
 import com.fjhx.service.customer.CustomerInfoService;
+import com.fjhx.service.form.FormOverflowLossService;
 import com.fjhx.service.order.OrderInfoService;
 import com.fjhx.service.product.ProductInfoService;
 import com.fjhx.service.product.ProductSpuService;
@@ -53,10 +54,17 @@ public enum CodeEnum {
     JD_IN_JOURNAL("JDI", "yyyyMM-", "code", 5, StockJournalService.class),
     // 销售入库流水单号
     S_IN_JOURNAL("SI", "yyyyMM-", "code", 5, StockJournalService.class),
-    //采购入库流水单号
+    // 采购入库流水单号
     IN_PURCHASE("POI", "yyyyMM-", "code", 5, StockJournalService.class),
     // 盘点单号
-    CHECK_CODE("CK", "yyyyMM-", "code", 5, CheckInfoService.class);
+    CHECK_CODE("CK", "yyyyMM-", "code", 5, CheckInfoService.class),
+    // 报溢单号
+    FORM_OVERFLOW("LR", "yyyyMM-", "code", 5, FormOverflowLossService.class),
+    // 报损单号
+    FORM_LOSS("FL", "yyyyMM-", "code", 5, FormOverflowLossService.class),
+
+
+    ;
 
     CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {
         this.prefix = prefix;