liyong
昨天 ecec32b774a6f1d37a3c5a9541e175178b17171c
feat(production): 生产核算接口开发
已修改6个文件
77 ■■■■ 文件已修改
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductionProductMainMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -1,10 +1,12 @@
package com.ruoyi.production.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.production.pojo.ProductionProductMain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
@@ -30,7 +32,7 @@
    @ApiModelProperty(value = "报废数量")
    @Excel(name = "报废数量")
    private BigDecimal scrapQty;
    private BigDecimal scrapQty = BigDecimal.ZERO;
    //产品名称
    @Excel(name = "产品名称")
@@ -48,10 +50,14 @@
    @Excel(name = "销售合同号")
    private String salesContractNo;
    private LocalDate scheduleDate;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate schedulingDate;
    private String schedulingUserName;
    private String customerName;
    private String process;
    private BigDecimal workHours;
    private BigDecimal wages;
}
src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java
@@ -1,12 +1,15 @@
package com.ruoyi.production.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
 * @author :yys
@@ -63,17 +66,27 @@
     */
    @ApiModelProperty(value = "排产日期")
    @Excel(name = "生产日期")
    private String schedulingDate;
    private LocalDate schedulingDate;
    @ApiModelProperty(value = "开始时间")
    private String entryDateStart;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate entryDateStart;
    @ApiModelProperty(value = "结束时间")
    private String entryDateEnd;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate entryDateEnd;
    private BigDecimal outputNum;
    private BigDecimal outputRate;
    private String outputRate;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate entryDate;
    private String dateType;
}
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -239,9 +239,11 @@
            salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
        }
        //如果报废数量>0,需要进入报废的库存
        if (dto.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
        if (ObjectUtils.isNotEmpty(dto.getScrapQty())) {
            if (BigDecimal.ZERO.compareTo(dto.getScrapQty()) > 0) {
            stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(), StockUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
        }
        }
        return true;
    }
src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
@@ -43,11 +43,23 @@
    @Override
    public IPage<SalesLedgerProductionAccountingDto> pageProductionAccounting(SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page) {
        // TODO 管理员查询所有,其他人只能查自己
        if (salesLedgerProductionAccountingDto.getDateType().equals("month"))  {
            salesLedgerProductionAccountingDto.setEntryDate(null);
        }else {
            salesLedgerProductionAccountingDto.setEntryDateStart(null);
            salesLedgerProductionAccountingDto.setEntryDateEnd(null);
        }
        return salesLedgerProductionAccountingMapper.pageProductionAccounting(page, salesLedgerProductionAccountingDto);
    }
    @Override
    public IPage<ProductionProductMainDto> listProductionDetails(SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page) {
        if (salesLedgerProductionAccountingDto.getDateType().equals("month"))  {
            salesLedgerProductionAccountingDto.setEntryDate(null);
        }else {
            salesLedgerProductionAccountingDto.setEntryDateStart(null);
            salesLedgerProductionAccountingDto.setEntryDateEnd(null);
        }
        return productionProductMainMapper.listProductionDetails(salesLedgerProductionAccountingDto, page);
    }
src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -63,7 +63,7 @@
        sl.sales_contract_no,
        sl.customer_name,
        p.product_name,
        pm.model,
        pm.model as product_model_name,
        pm.unit,
        slpa.process,
        ppo.quantity,
@@ -83,6 +83,14 @@
            <if test="ew.schedulingUserName != null and ew.schedulingUserName !=''">
                and slpa.scheduling_user_name = #{ew.schedulingUserName}
            </if>
            <if test="ew.entryDate != null " >
                and slpa.scheduling_date >= #{ew.entryDate}
                and slpa.scheduling_date &lt; DATE_ADD(#{ew.entryDate}, INTERVAL 1 DAY)
            </if>
            <if test="ew.entryDateStart != null and ew.entryDateEnd != null" >
                and slpa.scheduling_date >= #{ew.entryDateStart}
                and slpa.scheduling_date &lt; date_add(#{ew.entryDateEnd}, INTERVAL 1 DAY)
            </if>
        </where>
    </select>
src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
@@ -57,7 +57,16 @@
            slpa.scheduling_user_name,
               sum(ppout.quantity) as output_num,
               sum(slpa.finished_num * work_hours) as  wages,
               SUM(slpa.finished_num) / SUM(ppout.quantity) as output_rate
        CONCAT(
        ROUND(
        CASE
        WHEN SUM(ppout.quantity) = 0 OR SUM(ppout.quantity) IS NULL THEN 0
        ELSE SUM(slpa.finished_num) * 100.0 / SUM(ppout.quantity)
        END,
        2
        ),
        '%'
        ) as output_rate
        FROM sales_ledger_production_accounting slpa
                 LEFT JOIN production_product_main ppm ON slpa.sales_ledger_work_id = ppm.id
                 LEFT JOIN production_product_output ppout ON ppm.id = ppout.product_main_id
@@ -65,6 +74,15 @@
            <if test="ew.schedulingUserName != null and ew.schedulingUserName !=''" >
                and slpa.scheduling_user_name  = #{ew.schedulingUserName}
            </if>
            <if test="ew.entryDate != null ">
                and slpa.scheduling_date >= #{ew.entryDate}
                and slpa.scheduling_date &lt; DATE_ADD(DATE(#{ew.entryDate}), INTERVAL 1 DAY)
            </if>
            <if test="ew.entryDateStart != null and ew.entryDateEnd != null">
                and slpa.scheduling_date >= #{ew.entryDateStart}
                and slpa.scheduling_date &lt; DATE_ADD(DATE(#{ew.entryDateEnd}), INTERVAL 1 DAY)
            </if>
        </where>
        GROUP BY slpa.scheduling_user_name