新火炬后端单体项目初始化代码
lixiangyu
2 天以前 f99e7de6d1ed98913398fc5a725ba83b1c5a007d
feat(cms): 更新刀具库存状态管理

- 新增恢复库存状态功能
- 修改刀具领用和报废流程中的库存状态更新逻辑
- 增加获取可报废刀具列表的接口和相关实现
- 优化了代码结构,提高了可维护性
已修改10个文件
142 ■■■■■ 文件已修改
src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/controller/CuttingScrapController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/entity/CuttingReceiveDetail.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/entity/CuttingScrap.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/mapper/CuttingScrapMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingScrapMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/service/ICuttingScrapService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/service/impl/CuttingScrapServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java
@@ -103,7 +103,7 @@
            temp.setOrderId(cuttingReceive.getId());
            cuttingReceiveDetailService.save(temp);
        }
        // 更新库存刀具状态为"已出库"
        // 更新库存刀具状态为"待出库"
        if (!list.isEmpty()) {
            // 收集所有需要更新状态的库存ID
            List<String> inventoryIds = list.stream()
@@ -112,7 +112,7 @@
                    .collect(Collectors.toList());
            if (!inventoryIds.isEmpty()) {
                // 更新库存状态为"已出库"
                // 更新库存状态为"待出库"
                cuttingInventoryService.updateStatus(inventoryIds, "待出库");
            }
        }
@@ -140,7 +140,25 @@
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name = "id") String id) {
        // 先查询出领用单明细,获取相关的库存ID
        List<CuttingReceiveDetail> detailList = cuttingReceiveDetailService.lambdaQuery()
                .eq(CuttingReceiveDetail::getOrderId, id)
                .list();
        // 删除领用单主表和明细表数据
        cuttingReceiveService.removeById(id);
        cuttingReceiveDetailService.removeById(id);
        // 获取库存ID列表
        List<String> inventoryIds = detailList.stream()
                .map(CuttingReceiveDetail::getInventoryId)
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
        // 将相关刀具库存状态改回之前的状态
        if (!inventoryIds.isEmpty()) {
            cuttingInventoryService.restoreStatus(inventoryIds);
        }
        return Result.OK("删除成功!");
    }
@@ -153,6 +171,7 @@
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name = "ids") String ids) {
        this.cuttingReceiveService.removeByIds(Arrays.asList(ids.split(",")));
        //FIXME: 批量删除时,库存状态未恢复。也需要批量恢复库存状态。
        return Result.OK("批量删除成功!");
    }
@@ -214,7 +233,6 @@
        return cuttingReceiveService.submit(orderId);
    }
    //TODO: @GetMapping("/handleBack")
    @GetMapping("/handleBack")
    public Result<?> handleBack(@RequestParam("orderId") String orderId) {
        return cuttingReceiveService.handleBack(orderId);
src/main/java/org/jeecg/modules/cms/controller/CuttingScrapController.java
@@ -19,6 +19,7 @@
import org.jeecg.modules.cms.entity.CuttingReceiveDetail;
import org.jeecg.modules.cms.entity.CuttingScrap;
import org.jeecg.modules.cms.entity.CuttingScrapDetail;
import org.jeecg.modules.cms.service.ICuttingInventoryService;
import org.jeecg.modules.cms.service.ICuttingScrapDetailService;
import org.jeecg.modules.cms.service.ICuttingScrapService;
@@ -59,6 +60,9 @@
    @Autowired
    private ICuttingScrapDetailService cuttingScrapDetailService;
    @Autowired
    private ICuttingInventoryService cuttingInventoryService;
    /**
     * 分页列表查询
@@ -106,6 +110,20 @@
        for (CuttingScrapDetail temp : list) {
            temp.setOrderId(cuttingScrap.getId());
            cuttingScrapDetailService.save(temp);
        }
        // 更新库存刀具状态为"已出库"
        if (!list.isEmpty()) {
            // 收集所有需要更新状态的库存ID
            List<String> inventoryIds = list.stream()
                    .map(CuttingScrapDetail::getInventoryId) // 假设CuttingScrapDetail中有inventoryId字段
                    .filter(id -> id != null && !id.isEmpty())
                    .collect(Collectors.toList());
            if (!inventoryIds.isEmpty()) {
                // 更新库存状态为"已出库"
                cuttingInventoryService.updateStatus(inventoryIds, "待报废");
            }
        }
        return Result.OK("添加成功!");
    }
@@ -209,4 +227,15 @@
        return Result.ok(list);
    }
    /**
     * 选择报废刀具的列表
     */
    @GetMapping("/getInventoryToolList")
    public Result<?> getInventoryToolList(@RequestParam("pageNo") Integer pageNo,
                                          @RequestParam("pageSize") Integer pageSize,
                                          @RequestParam Map<String, Object> params) {
        IPage<Map<String, Object>> inventoryTooList = cuttingScrapService.getInventoryToolList(pageNo, pageSize, params);
        return Result.ok(inventoryTooList);
    }
}
src/main/java/org/jeecg/modules/cms/entity/CuttingReceiveDetail.java
@@ -70,4 +70,5 @@
    @Excel(name = "使用寿命", width = 15)
    @ApiModelProperty(value = "使用寿命")
    private Integer usedLife;
}
src/main/java/org/jeecg/modules/cms/entity/CuttingScrap.java
@@ -61,6 +61,7 @@
    /**报废单状态*/
    @Excel(name = "报废单状态", width = 15)
    @ApiModelProperty(value = "报废单状态")
    @Dict(dicCode = "order_status")
    private String orderStatus;
    /**申请人*/
    @Excel(name = "申请人", width = 15)
src/main/java/org/jeecg/modules/cms/mapper/CuttingScrapMapper.java
@@ -1,7 +1,9 @@
package org.jeecg.modules.cms.mapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.cms.entity.CuttingScrap;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -14,4 +16,5 @@
 */
public interface CuttingScrapMapper extends BaseMapper<CuttingScrap> {
    IPage<Map<String, Object>> getInventoryToolList(IPage<Map> pageData, Map<String, Object> params);
}
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingScrapMapper.xml
@@ -2,4 +2,21 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.cms.mapper.CuttingScrapMapper">
    <select id="getInventoryToolList" parameterType="Map" resultType="Map">
        SELECT
            t1.cutting_id cuttingId,
            t1.id,
            t1.cutting_barcode cuttingBarcode,
            t1.current_life currentLife,
            t2.cutting_code cuttingCode,
            t2.cutting_name cuttingName,
            t2.cutting_category,
            t3.item_text cuttingCategory
        FROM cms_cutting_inventory t1
                 LEFT JOIN cms_cutting_tool t2 ON t1.cutting_id = t2.id
                 LEFT JOIN (select * from v_sys_dict where dict_code = 'cutting_category') t3 on t3.item_value = t2.cutting_category
        WHERE t1.inventory_status != '待报废'
          AND t1.inventory_status != '已报废'
          AND t2.del_flag = 0
    </select>
</mapper>
src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java
@@ -18,5 +18,5 @@
    IPage<Map<String, Object>> statisticsByCuttingIdAndStatus(Page<Map<String, Object>> page);
    void updateStatus(List<String> ids, String status);
    void restoreStatus(List<String> ids);
}
src/main/java/org/jeecg/modules/cms/service/ICuttingScrapService.java
@@ -1,7 +1,10 @@
package org.jeecg.modules.cms.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.cms.entity.CuttingScrap;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;
/**
 * @Description: 刀具报废
@@ -11,4 +14,6 @@
 */
public interface ICuttingScrapService extends IService<CuttingScrap> {
    IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params);
}
src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java
@@ -4,16 +4,21 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.cms.entity.CuttingInventory;
import org.jeecg.modules.cms.mapper.CuttingInventoryMapper;
import org.jeecg.modules.cms.service.ICuttingInventoryService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @Description: 刀具库存
@@ -32,11 +37,51 @@
    @Transactional(rollbackFor = Exception.class)
    public void updateStatus(List<String> ids, String status) {
        if (ids != null && !ids.isEmpty() && StringUtils.isNotBlank(status)) {
//            UpdateWrapper<CuttingInventory> updateWrapper = new UpdateWrapper<>();
//            updateWrapper.in("id", ids);
//            updateWrapper.set("inventory_status", status); // 根据实际数据库字段名调整
            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
            String username = "System"; // 默认用户名
            if (user != null) {
                username = oConvertUtils.getString(user.getUsername(), "System");
            }
            UpdateWrapper<CuttingInventory> updateWrapper = new UpdateWrapper<>();
            updateWrapper.in("id", ids);
            updateWrapper.set("inventory_status", status); // 根据实际数据库字段名调整
            updateWrapper.set("inventory_status", status);
            updateWrapper.set("update_time", new Date());
            updateWrapper.set("update_by", username);
            this.update(updateWrapper);
        }
    }
    @Override
    public void restoreStatus(List<String> ids) {
        if (ids != null && !ids.isEmpty()) {
            // 获取当前登录用户信息
            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
            String username = "System"; // 默认用户名
            if (user != null) {
                username = oConvertUtils.getString(user.getUsername(), "System");
            }
            // 方式1: 查询当前状态并根据状态决定恢复到哪个状态
            List<CuttingInventory> inventoryList = this.listByIds(ids);
            List<String> toRestoreIds = inventoryList.stream()
                    .filter(inv -> "待出库".equals(inv.getInventoryStatus())) // 只处理"待出库"状态的
                    .map(CuttingInventory::getId)
                    .collect(Collectors.toList());
            //FIXME:在报废前有多个状态,如果报废作废,刀具库存状态如何退回原来的状态。
            if (!toRestoreIds.isEmpty()) {
                UpdateWrapper<CuttingInventory> updateWrapper = new UpdateWrapper<>();
                updateWrapper.in("id", toRestoreIds);
                updateWrapper.set("inventory_status", "正常");
                updateWrapper.set("update_time", new Date());
                updateWrapper.set("update_by", username);
                this.update(updateWrapper);
            }
        }
    }
}
src/main/java/org/jeecg/modules/cms/service/impl/CuttingScrapServiceImpl.java
@@ -1,11 +1,15 @@
package org.jeecg.modules.cms.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.cms.entity.CuttingScrap;
import org.jeecg.modules.cms.mapper.CuttingScrapMapper;
import org.jeecg.modules.cms.service.ICuttingScrapService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Map;
/**
 * @Description: 刀具报废
@@ -15,5 +19,10 @@
 */
@Service
public class CuttingScrapServiceImpl extends ServiceImpl<CuttingScrapMapper, CuttingScrap> implements ICuttingScrapService {
    @Override
    public IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params) {
        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
        return super.getBaseMapper().getInventoryToolList(pageData,params);
    }
}