zss
2 天以前 928f17024c89d224da33e4cf7778615345ac9941
feat(procurement): 增加产品自定义入库功能及缺货信息支持
已修改6个文件
123 ■■■■ 文件已修改
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/Details.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -44,6 +44,13 @@
        return AjaxResult.success(procurementRecordService.add(procurementDto));
    }
    @PostMapping("/addProduct")
    @Log(title = "入库管理-产品入库", businessType = BusinessType.INSERT)
    @Transactional
    public AjaxResult addProduct(@RequestBody Details detail) {
        return AjaxResult.success(procurementRecordService.addProduct(detail));
    }
    @PostMapping("/update")
    @Log(title = "采购入库-入库管理-修改入库", businessType = BusinessType.UPDATE)
    @Transactional
src/main/java/com/ruoyi/procurementrecord/dto/Details.java
@@ -13,4 +13,15 @@
    private Integer id;
    private BigDecimal inboundQuantity;
    private BigDecimal warnNum;
    private Long productModelId;
    /**
     * 缺货数量
     */
    private BigDecimal outStockQuantity;
    /**
     * 缺货情况
     */
    private String shortageDescription;
}
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -46,6 +46,16 @@
//    private BigDecimal minStock;
    /**
     * 缺货数量
     */
    private BigDecimal outStockQuantity;
    /**
     * 缺货情况
     */
    private String shortageDescription;
    /**
     * 入库用户
     */
    private String createBy;
@@ -76,4 +86,6 @@
     */
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    private Long productModelId;
}
src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -34,4 +34,6 @@
    void exportCopy(HttpServletResponse response);
    Map<String, Object> getReportList(Page page, ProcurementPageDto procurementDto);
    int addProduct(Details detail);
}
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -10,8 +10,8 @@
import com.ruoyi.procurementrecord.dto.*;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
@@ -24,10 +24,12 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -370,6 +372,30 @@
    }
    @Override
    public int addProduct(Details detail) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        ProcurementRecordStorage.ProcurementRecordStorageBuilder builder = ProcurementRecordStorage.builder()
                .id(detail.getId())
                .inboundBatches("第1批次")
                .inboundNum(detail.getInboundQuantity())
                .warnNum(detail.getWarnNum())
                .outStockQuantity(detail.getOutStockQuantity())
                .shortageDescription(detail.getShortageDescription())
                .productModelId(detail.getProductModelId())
                .updateTime(LocalDateTime.now())
                .updateUser(loginUser.getUserId());
        if (detail.getId() == null) {
            builder.createTime(LocalDateTime.now())
                    .createUser(loginUser.getUserId())
                    .createBy(loginUser.getNickName());
        }
        boolean success = this.saveOrUpdate(builder.build());
        return success ? 1 : 0;
    }
    @Override
    public IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto) {
        IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPage(page, procurementDto);
        List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords();
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -32,27 +32,35 @@
        select
        t3.supplier_name,
        t3.purchase_contract_number,
        t2.product_category,
        case when t2.product_category is null then t5.product_name
        else t2.product_category end as productCategory,
        t1.id,
        t1.sales_ledger_product_id,
        t1.product_model_id,
        t1.create_user,
        t2.specification_model,
        t2.product_model_id,
        t2.unit,
        case when t2.specification_model is null then t4.model
        else t2.specification_model end as specificationModel,
        case when t2.unit is null then t4.unit
        else t2.unit end as unit,
        t2.tax_rate,
        t2.tax_inclusive_unit_price,
        (t1.inbound_num * t2.tax_inclusive_unit_price) as taxInclusiveTotalPrice,
        (t1.inbound_num * t2.tax_inclusive_unit_price - t1.inbound_num * t2.tax_inclusive_unit_price * t2.tax_rate / 100) as taxExclusiveTotalPrice,
        (t1.inbound_num * t2.tax_inclusive_unit_price - t1.inbound_num * t2.tax_inclusive_unit_price * t2.tax_rate /
        100) as taxExclusiveTotalPrice,
        t1.inbound_batches,
        t1.inbound_num,
        t1.inbound_num as inboundNum0,
        t1.create_time,
        t1.update_time,
        t1.create_by,
        ifnull(t1.warn_num, t2.warn_num) as warnNum
         ifnull(t1.warn_num, t2.warn_num) as warnNum,
        t1.out_stock_quantity as outStockQuantity,
        t1.shortage_description as shortageDescription
        from  procurement_record_storage t1
                  left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
                  left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        left join product_model t4 on t4.id = t1.product_model_id
        left join product t5 on t5.id = t4.product_id
        <where>
            1 = 1
            <if test="req.supplierName != null and req.supplierName != ''">
@@ -60,6 +68,9 @@
            </if>
            <if test="req.timeStr != null and req.timeStr != ''">
                and t1.create_time like  concat('%',#{req.timeStr},'%')
            </if>
            <if test="req.productModelId != null">
                and t1.product_model_id = #{req.productModelId}
            </if>
        </where>
    </select>
@@ -88,30 +99,35 @@
    </select>
    <select id="listPageCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
        select
        t3.supplier_name,
        t3.supplier_name as supplierName,
        t3.purchase_contract_number,
        t2.product_category,
        t1.id,
        case when t2.product_category is null then t5.product_name
        else t2.product_category end as productCategory,
        max(t1.id) as id,
        t1.sales_ledger_product_id,
        t1.create_user,
        t2.specification_model,
        t2.unit,
        case when t2.specification_model is null then t4.model
        else t2.specification_model end as specificationModel,
        case when t2.unit is null then t4.unit
        else t2.unit end as unit,
        t2.min_stock,
        t2.tax_rate,
        t2.tax_inclusive_unit_price,
        t2.tax_inclusive_total_price,
        t2.tax_exclusive_total_price,
        t1.inbound_batches,
        group_concat(t1.inbound_batches) as inbound_batches,
        sum(t1.inbound_num) as inboundNum,
        sum(t1.inbound_num) as inboundNum0,
        t1.inbound_num as totalInboundNum,
        t1.create_time,
        t1.update_time,
        sum(t1.inbound_num) as totalInboundNum,
        max(t1.create_time) as create_time,
        max(t1.update_time) as update_time,
        t1.create_by,
        ifnull(t1.warn_num, t2.warn_num) as warnNum
        from  procurement_record_storage t1
        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
        left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        left join product_model t4 on t4.id = t1.product_model_id
        left join product t5 on t5.id = t4.product_id
        <where>
            1 = 1
            <if test="req.supplierName != null and req.supplierName != ''">
@@ -121,7 +137,8 @@
                and t1.create_time like  concat('%',#{req.timeStr},'%')
            </if>
            <if test="req.reportDate != null">
                and t1.create_time >= #{req.reportDate} and t1.create_time &lt; DATE_ADD(#{req.reportDate}, INTERVAL 1 DAY)
                and t1.create_time >= #{req.reportDate} and t1.create_time &lt; DATE_ADD(#{req.reportDate}, INTERVAL 1
                DAY)
            </if>
            <if test="req.startMonth != null">
                and t1.create_time >= #{req.startMonth}
@@ -136,7 +153,15 @@
                and t1.create_time &lt;= #{req.endDate}
            </if>
        </where>
        group by t3.supplier_name,t2.product_category,t2.specification_model
        group by
        t3.supplier_name,
        t3.purchase_contract_number,
        productCategory,
        specificationModel,
        unit
        order by
        (t3.supplier_name IS NULL) DESC,
        t3.supplier_name ASC
    </select>
    <select id="listCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
        select