src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
@@ -1,7 +1,9 @@
package com.ruoyi.production.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
@@ -11,14 +13,22 @@
import com.ruoyi.production.dto.ProductionDispatchAddDto;
import com.ruoyi.production.dto.SalesLedgerSchedulingDto;
import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
import com.ruoyi.production.mapper.SpeculativeTradingInfoMapper;
import com.ruoyi.production.pojo.SpeculativeTradingInfo;
import com.ruoyi.production.service.impl.SalesLedgerSchedulingServiceImpl;
import com.ruoyi.sales.mapper.LossMapper;
import com.ruoyi.sales.pojo.Loss;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
/**
@@ -32,6 +42,70 @@
    @Autowired
    private SalesLedgerSchedulingServiceImpl salesLedgerSchedulingService;
    @Autowired
    private SpeculativeTradingInfoMapper speculativeTradingInfoMapper;
    @Autowired
    private LossMapper lossMapper;
    @GetMapping("/loss")
    @Log(title = "生产管理-生产派工-损耗率", businessType = BusinessType.OTHER)
    @ApiOperation("生产管理-生产派工-损耗率")
    public AjaxResult loss() {
        return AjaxResult.success(lossMapper.selectOne(new LambdaQueryWrapper<Loss>().last("limit 1")));
    }
    @PostMapping("/addLoss")
    @Log(title = "生产管理-生产派工-添加损耗率", businessType = BusinessType.INSERT)
    @ApiOperation("生产管理-生产派工-添加损耗率")
    public AjaxResult addLoss(@RequestBody Loss loss) {
        lossMapper.insert(loss);
        return AjaxResult.success("添加损耗率成功");
    }
    @PostMapping("/updateLoss")
    @Log(title = "生产管理-生产派工-修改损耗率", businessType = BusinessType.UPDATE)
    @ApiOperation("生产管理-生产派工-修改损耗率")
    public AjaxResult updateLoss(@RequestBody Loss loss) {
        lossMapper.updateById(loss);
        return AjaxResult.success("修改损耗率成功");
    }
    @GetMapping("/list")
    @Log(title = "生产管理-生产派工-炒机信息", businessType = BusinessType.OTHER)
    @ApiOperation("生产管理-生产派工-炒机信息")
    public AjaxResult list() {
        List<SpeculativeTradingInfo> result = speculativeTradingInfoMapper.selectList(null);
        result.forEach(item -> {
            item.setCurrentWorkLoad(salesLedgerSchedulingService.getSchedulingNumBySpeculativeTradingName(item.getName()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
            item.setVacant(item.getWorkLoad().subtract(item.getCurrentWorkLoad()).setScale(2, RoundingMode.HALF_UP)); //保留两位小数
        });
        return AjaxResult.success(result);
    }
    @PostMapping("/addSpeculatTrading")
    @Log(title = "生产管理-生产派工-添加炒机信息", businessType = BusinessType.INSERT)
    @ApiOperation("生产管理-生产派工-添加炒机信息")
    public AjaxResult addSpeculatTrading(@RequestBody List<SpeculativeTradingInfo> speculativeTradingInfo) {
        if(CollectionUtils.isEmpty(speculativeTradingInfo)) return AjaxResult.error("数据组不能为空");
        speculativeTradingInfo.forEach(item -> {
            speculativeTradingInfoMapper.insert(item);
        });
        return AjaxResult.success("添加炒机信息成功");
    }
    @PostMapping("/updateSpeculatTrading")
    @Log(title = "生产管理-生产派工-修改炒机信息", businessType = BusinessType.UPDATE)
    @ApiOperation("生产管理-生产派工-修改炒机信息")
    public AjaxResult updateSpeculatTrading(@RequestBody List<SpeculativeTradingInfo> speculativeTradingInfo) {
        if(CollectionUtils.isEmpty(speculativeTradingInfo)) return AjaxResult.error("数据组不能为空");
        speculativeTradingInfo.forEach(item -> {
            speculativeTradingInfoMapper.updateById(item);
        });
        return AjaxResult.success("修改炒机信息成功");
    }
    @GetMapping("/listPage")
@@ -52,12 +126,34 @@
        salesLedgerSchedulingService.export(response);
    }
    /**
     * 导出
     * @param response
     */
    @PostMapping("/exportOne")
    @ApiOperation("生产管理-生产派工-导出")
    public void exportOne(HttpServletResponse response) {
        salesLedgerSchedulingService.exportOne(response);
    }
    @PostMapping("/productionDispatch")
    @Log(title = "生产管理-生产订单-生产派工", businessType = BusinessType.INSERT)
    @ApiOperation("生产管理-生产订单-生产派工")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult productionDispatch(@RequestBody ProductionDispatchAddDto productionDispatchAddDto) {
        int result = salesLedgerSchedulingService.productionDispatch(productionDispatchAddDto);
        List<ProductionDispatchAddDto> productionDispatchAddDtoList = new ArrayList<>();
        productionDispatchAddDtoList.add(productionDispatchAddDto);
        String result = salesLedgerSchedulingService.productionDispatch(productionDispatchAddDtoList);
        return AjaxResult.success(result);
    }
    @PostMapping("/productionDispatchList")
    @Log(title = "生产管理-生产订单-自动派工", businessType = BusinessType.INSERT)
    @ApiOperation("生产管理-生产订单-自动派工")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult productionDispatchList(@RequestBody List<ProductionDispatchAddDto> productionDispatchAddDto) {
        String result = salesLedgerSchedulingService.productionDispatch(productionDispatchAddDto);
        return AjaxResult.success(result);
    }
@@ -69,6 +165,23 @@
        return AjaxResult.success(result);
    }
    /**
     * 导出
     * @param response
     */
    @PostMapping("/exportTwo")
    @ApiOperation("生产管理-工序排产-导出")
    public void exportTwo(HttpServletResponse response) {
        Page page = new Page(-1,-1);
        SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto = new SalesLedgerSchedulingProcessDto();
        IPage<SalesLedgerSchedulingProcessDto> result = salesLedgerSchedulingService.listPageProcess(page,salesLedgerSchedulingDto);
        result.getRecords().forEach(item -> {
            item.setStatusName(item.getStatus().toString());
        });
        ExcelUtil<SalesLedgerSchedulingProcessDto> util = new ExcelUtil<>(SalesLedgerSchedulingProcessDto.class);
        util.exportExcel(response, result.getRecords(), "工序排产");
    }
    @DeleteMapping("/productionDispatchDelete")
    @Log(title = "生产管理-工序排产-取消排产", businessType = BusinessType.DELETE)