cuilei
2025-05-21 36cff30b1967bf7b6c6f17ae7379c4a6197933b3
工具管理-工具出库申请
已添加14个文件
已修改1个文件
1248 ■■■■■ 文件已修改
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/OutboundOrderController.java 338 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/OutboundOrderAndDetailDto.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/OutboundDetailVo.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutBillStatus.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/OutboundDetailMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/OutboundOrderMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/OutboundDetailMapper.xml 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/OutboundOrderMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IOutboundDetailService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IOutboundOrderService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundDetailServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolLedgerDetailServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/OutboundOrderController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,338 @@
package org.jeecg.modules.tms.controller;
import org.jeecg.common.system.query.QueryGenerator;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.tms.entity.dto.OutboundOrderAndDetailDto;
import org.jeecg.modules.tms.entity.vo.OutboundDetailVo;
import org.jeecg.modules.tms.enums.OutBillStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import java.util.Arrays;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.tms.entity.OutboundDetail;
import org.jeecg.modules.tms.entity.OutboundOrder;
import org.jeecg.modules.tms.service.IOutboundOrderService;
import org.jeecg.modules.tms.service.IOutboundDetailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 /**
 * @Description: tms_outbound_order
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
@Api(tags="tms_outbound_order")
@RestController
@RequestMapping("/tms/outboundOrder")
@Slf4j
public class OutboundOrderController extends JeecgController<OutboundOrder, IOutboundOrderService> {
    @Autowired
    private IOutboundOrderService outboundOrderService;
    @Autowired
    private IOutboundDetailService outboundDetailService;
    /*---------------------------------主表处理-begin-------------------------------------*/
    /**
     * åˆ†é¡µåˆ—表查询
     * @param outboundOrder
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "tms_outbound_order-分页列表查询")
    @ApiOperation(value="tms_outbound_order-分页列表查询", notes="tms_outbound_order-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<OutboundOrder>> queryPageList(OutboundOrder outboundOrder,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        Map<String, String[]> parameterMap = req.getParameterMap();
        QueryWrapper<OutboundOrder> queryWrapper = QueryGenerator.initQueryWrapper(outboundOrder, parameterMap);
        Page<OutboundOrder> page = new Page<OutboundOrder>(pageNo, pageSize);
        IPage<OutboundOrder> pageList = outboundOrderService.queryPageList(page, parameterMap);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     * @param outboundOrder
     * @return
     */
    @AutoLog(value = "tms_outbound_order-添加")
    @ApiOperation(value="tms_outbound_order-添加", notes="tms_outbound_order-添加")
    //@RequiresPermissions("org.jeecg.modules:tms_outbound_order:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody OutboundOrder outboundOrder) {
        outboundOrderService.save(outboundOrder);
        return Result.OK("添加成功!");
    }
    @AutoLog(value = "tms_outbound_order-添加出库申请单主表及明细信息")
    @ApiOperation(value="tms_outbound_order-添加出库申请单主表及明细信息", notes="tms_outbound_order-添加出库申请单主表及明细信息")
    @PostMapping(value = "/addTotal")
    public Result<String> addTotal(@RequestBody OutboundOrderAndDetailDto outboundOrder) {
        outboundOrderService.addTotal(outboundOrder);
        return Result.OK("添加成功!");
    }
    @AutoLog(value = "tms_outbound_order-编辑出库申请单主表及明细信息")
    @ApiOperation(value="tms_outbound_order-编辑出库申请单主表及明细信息", notes="tms_outbound_order-编辑出库申请单主表及明细信息")
    //@RequiresPermissions("org.jeecg.modules:tms_outbound_order:edit")
    @RequestMapping(value = "/editTotal", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> editTotal(@RequestBody OutboundOrderAndDetailDto outboundOrder) {
        outboundOrderService.editTotal(outboundOrder);
        return Result.OK("编辑成功!");
    }
    /**
     *  ç¼–辑
     * @param outboundOrder
     * @return
     */
    @AutoLog(value = "tms_outbound_order-编辑")
    @ApiOperation(value="tms_outbound_order-编辑", notes="tms_outbound_order-编辑")
    //@RequiresPermissions("org.jeecg.modules:tms_outbound_order:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody OutboundOrder outboundOrder) {
        outboundOrderService.updateById(outboundOrder);
        return Result.OK("编辑成功!");
    }
    @AutoLog(value = "tms_outbound_order-提交出库申请单")
    @ApiOperation(value="tms_outbound_order-提交出库申请单", notes="tms_outbound_order-提交出库申请单")
    @GetMapping(value = "/submit")
    public Result<String> submit(@RequestParam(name="id") String id) {
        OutboundOrder order = new OutboundOrder();
        order.setId(id);
        order.setOrderStatus(OutBillStatus.SUBMITTED.getValue());
        outboundOrderService.updateById(order);
        //开启流程
        return Result.OK("提交成功!");
    }
    /**
     * é€šè¿‡id删除
     * @param id
     * @return
     */
    @AutoLog(value = "tms_outbound_order-通过id删除")
    @ApiOperation(value="tms_outbound_order-通过id删除", notes="tms_outbound_order-通过id删除")
    //@RequiresPermissions("org.jeecg.modules:tms_outbound_order:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        outboundOrderService.delMain(id);
        return Result.OK("删除成功!");
    }
    /**
     * æ‰¹é‡åˆ é™¤
     * @param ids
     * @return
     */
    @AutoLog(value = "tms_outbound_order-批量删除")
    @ApiOperation(value="tms_outbound_order-批量删除", notes="tms_outbound_order-批量删除")
    //@RequiresPermissions("org.jeecg.modules:tms_outbound_order:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.outboundOrderService.delBatchMain(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * å¯¼å‡º
     * @return
     */
    //@RequiresPermissions("org.jeecg.modules:tms_outbound_order:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, OutboundOrder outboundOrder) {
        return super.exportXls(request, outboundOrder, OutboundOrder.class, "tms_outbound_order");
    }
    /**
     * å¯¼å…¥
     * @return
     */
    //@RequiresPermissions("org.jeecg.modules:tms_outbound_order:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, OutboundOrder.class);
    }
    /*---------------------------------主表处理-end-------------------------------------*/
    /*--------------------------------子表处理-出库申请单明细-begin----------------------------------------------*/
    /**
     * é€šè¿‡ä¸»è¡¨ID查询
     * @return
     */
    //@AutoLog(value = "出库申请单明细-通过主表ID查询")
    @ApiOperation(value="出库申请单明细-通过主表ID查询", notes="出库申请单明细-通过主表ID查询")
    @GetMapping(value = "/listOutboundDetailByMainId")
    public Result<IPage<OutboundDetailVo>> listOutboundDetailByMainId(OutboundDetail outboundDetail,
                                                    @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                    @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                    HttpServletRequest req) {
        Map<String, String[]> parameterMap = req.getParameterMap();
        QueryWrapper<OutboundDetail> queryWrapper = QueryGenerator.initQueryWrapper(outboundDetail, parameterMap);
        Page<OutboundDetail> page = new Page<OutboundDetail>(pageNo, pageSize);
        IPage<OutboundDetailVo> pageList = outboundDetailService.queryPageList(page, parameterMap);
        return Result.OK(pageList);
    }
    /**
     * æ·»åŠ 
     * @param outboundDetail
     * @return
     */
    @AutoLog(value = "出库申请单明细-添加")
    @ApiOperation(value="出库申请单明细-添加", notes="出库申请单明细-添加")
    @PostMapping(value = "/addOutboundDetail")
    public Result<String> addOutboundDetail(@RequestBody OutboundDetail outboundDetail) {
        outboundDetailService.save(outboundDetail);
        return Result.OK("添加成功!");
    }
    /**
     * ç¼–辑
     * @param outboundDetail
     * @return
     */
    @AutoLog(value = "出库申请单明细-编辑")
    @ApiOperation(value="出库申请单明细-编辑", notes="出库申请单明细-编辑")
    @RequestMapping(value = "/editOutboundDetail", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> editOutboundDetail(@RequestBody OutboundDetail outboundDetail) {
        outboundDetailService.updateById(outboundDetail);
        return Result.OK("编辑成功!");
    }
    /**
     * é€šè¿‡id删除
     * @param id
     * @return
     */
    @AutoLog(value = "出库申请单明细-通过id删除")
    @ApiOperation(value="出库申请单明细-通过id删除", notes="出库申请单明细-通过id删除")
    @DeleteMapping(value = "/deleteOutboundDetail")
    public Result<String> deleteOutboundDetail(@RequestParam(name="id",required=true) String id) {
        outboundDetailService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     * æ‰¹é‡åˆ é™¤
     * @param ids
     * @return
     */
    @AutoLog(value = "出库申请单明细-批量删除")
    @ApiOperation(value="出库申请单明细-批量删除", notes="出库申请单明细-批量删除")
    @DeleteMapping(value = "/deleteBatchOutboundDetail")
    public Result<String> deleteBatchOutboundDetail(@RequestParam(name="ids",required=true) String ids) {
        this.outboundDetailService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * å¯¼å‡º
     * @return
     */
    @RequestMapping(value = "/exportOutboundDetail")
    public ModelAndView exportOutboundDetail(HttpServletRequest request, OutboundDetail outboundDetail) {
         // Step.1 ç»„装查询条件
         QueryWrapper<OutboundDetail> queryWrapper = QueryGenerator.initQueryWrapper(outboundDetail, request.getParameterMap());
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         // Step.2 èŽ·å–å¯¼å‡ºæ•°æ®
         List<OutboundDetail> pageList = outboundDetailService.list(queryWrapper);
         List<OutboundDetail> exportList = null;
         // è¿‡æ»¤é€‰ä¸­æ•°æ®
         String selections = request.getParameter("selections");
         if (oConvertUtils.isNotEmpty(selections)) {
             List<String> selectionList = Arrays.asList(selections.split(","));
             exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
         } else {
             exportList = pageList;
         }
         // Step.3 AutoPoi å¯¼å‡ºExcel
         ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
         //此处设置的filename无效,前端会重更新设置一下
         mv.addObject(NormalExcelConstants.FILE_NAME, "出库申请单明细");
         mv.addObject(NormalExcelConstants.CLASS, OutboundDetail.class);
         mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("出库申请单明细报表", "导出人:" + sysUser.getRealname(), "出库申请单明细"));
         mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
         return mv;
    }
    /**
     * å¯¼å…¥
     * @return
     */
    @RequestMapping(value = "/importOutboundDetail/{mainId}")
    public Result<?> importOutboundDetail(HttpServletRequest request, HttpServletResponse response, @PathVariable("mainId") String mainId) {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
       // èŽ·å–ä¸Šä¼ æ–‡ä»¶å¯¹è±¡
             MultipartFile file = entity.getValue();
             ImportParams params = new ImportParams();
             params.setTitleRows(2);
             params.setHeadRows(1);
             params.setNeedSave(true);
             try {
                 List<OutboundDetail> list = ExcelImportUtil.importExcel(file.getInputStream(), OutboundDetail.class, params);
                 for (OutboundDetail temp : list) {
                    temp.setOutStorehouseId(mainId);
                 }
                 long start = System.currentTimeMillis();
                 outboundDetailService.saveBatch(list);
                 log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒");
                 return Result.OK("文件导入成功!数据行数:" + list.size());
             } catch (Exception e) {
                 log.error(e.getMessage(), e);
                 return Result.error("文件导入失败:" + e.getMessage());
             } finally {
                 try {
                     file.getInputStream().close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
         }
         return Result.error("文件导入失败!");
    }
    /*--------------------------------子表处理-出库申请单明细-end----------------------------------------------*/
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package org.jeecg.modules.tms.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.UnsupportedEncodingException;
/**
 * @Description: å‡ºåº“申请单明细
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
@Data
@TableName("tms_outbound_detail")
@ApiModel(value="tms_outbound_detail对象", description="出库申请单明细")
public class OutboundDetail implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键")
    private String id;
    /**出库单号*/
    @ApiModelProperty(value = "出库单号")
    private String outStorehouseId;
    /**刀具编码*/
    @Excel(name = "刀具编码", width = 15)
    @ApiModelProperty(value = "刀具编码")
    private String toolCode;
    /**刀具编号*/
    @Excel(name = "刀具编号", width = 15)
    @ApiModelProperty(value = "刀具编号")
    private String toolId;
    /**申请出库数量*/
    @Excel(name = "申请出库数量", width = 15)
    @ApiModelProperty(value = "申请出库数量")
    private java.math.BigDecimal outboundQuantity;
    /**实际出库数量*/
    @Excel(name = "实际出库数量", width = 15)
    @ApiModelProperty(value = "实际出库数量")
    private java.math.BigDecimal outActualCount;
    /**出库时间*/
    @Excel(name = "出库时间", width = 15, format = "yyyy-MM-dd HH:mm")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "出库时间")
    private Date outboundTime;
    /**仓库*/
    @Excel(name = "仓库", width = 15)
    @ApiModelProperty(value = "仓库")
    @Dict(dictTable = "tms_warehouse", dicCode = "id", dicText = "warehouse_name")
    private String storageLocation;
    /**出库库位*/
    @Excel(name = "出库库位", width = 15)
    @ApiModelProperty(value = "出库库位")
    private String outboundLocation;
    /**出库状态;1.未出库;2.部分出库;3.出库完成*/
    @Excel(name = "出库状态;1.未出库;2.部分出库;3.出库完成", width = 15)
    @ApiModelProperty(value = "出库状态;1.未出库;2.部分出库;3.出库完成")
    @Dict(dicCode = "out_storehouse_status")
    private Integer status;
    /**租户号*/
    @Excel(name = "租户号", width = 15)
    @ApiModelProperty(value = "租户号")
    private String tenantId;
    /**操作员*/
    @ApiModelProperty(value = "操作员")
    private String createBy;
    /**创建时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    /**更新人*/
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
package org.jeecg.modules.tms.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.*;
import org.jeecgframework.poi.excel.annotation.Excel;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * @Description: tms_outbound_order
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
@Data
@TableName("tms_outbound_order")
@ApiModel(value="tms_outbound_order对象", description="tms_outbound_order")
public class OutboundOrder implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键id*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键id")
    private String id;
    /**出库单编号*/
    @Excel(name = "出库单编号", width = 15)
    @ApiModelProperty(value = "出库单编号")
    private String outNum;
    /**出库类型*/
    @Excel(name = "出库类型", width = 15, dicCode = "out_storehouse_type")
    @Dict(dicCode = "out_storehouse_type")
    @ApiModelProperty(value = "出库类型")
    private String outStorehouseType;
    /**是否归还;1未归还(默认);2.已归还*/
    @Excel(name = "是否归还;1未归还(默认);2.已归还", width = 15)
    @ApiModelProperty(value = "是否归还;1未归还(默认);2.已归还")
    private Integer isReturn;
    /**经手人*/
    @Excel(name = "经手人", width = 15, dictTable = "sys_user", dicText = "realname", dicCode = "id")
    @Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
    @ApiModelProperty(value = "经手人")
    private String handler;
    /**审核人*/
    @Excel(name = "审核人", width = 15, dictTable = "sys_user", dicText = "realname", dicCode = "id")
    @Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
    @ApiModelProperty(value = "审核人")
    private String reviewer;
    /**单子状态*/
    @Excel(name = "单子状态", width = 15)
    @ApiModelProperty(value = "单子状态")
    @Dict(dicCode = "out_bill_status")
    private String orderStatus;
    /**出库状态*/
    @Excel(name = "出库状态", width = 15)
    @ApiModelProperty(value = "出库状态")
    @Dict(dicCode = "out_storehouse_status")
    private String outStatus;
    /**审核时间*/
    @Excel(name = "审核时间", width = 15, format = "yyyy-MM-dd HH:mm")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "审核时间")
    private Date auditDate;
    /**开始时间*/
    @TableField(exist = false)
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "开始时间")
    private Date startTime;
    /**结束时间*/
    @TableField(exist = false)
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "结束时间")
    private Date endTime;
    /**审核意见*/
    @Excel(name = "审核意见", width = 15)
    @ApiModelProperty(value = "审核意见")
    private String approvalOpinion;
    /**领用事由*/
    @Excel(name = "领用事由", width = 15)
    @ApiModelProperty(value = "领用事由")
    private String subjectMatter;
    /**出库时间*/
    @Excel(name = "出库时间", width = 15, format = "yyyy-MM-dd HH:mm")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "出库时间")
    private Date outboundTime;
    /**备注*/
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
    /**租户号*/
    @Excel(name = "租户号", width = 15)
    @ApiModelProperty(value = "租户号")
    private String tenantId;
    /**操作员*/
    @ApiModelProperty(value = "操作员")
    private String createBy;
    /**创建时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    /**更新人*/
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/OutboundOrderAndDetailDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package org.jeecg.modules.tms.entity.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.modules.tms.entity.OutboundDetail;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @Description: tms_outbound_order
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
@Data
@Accessors(chain = true)
@ApiModel(value="tms_outbound_order对象", description="tms_outbound_order")
public class OutboundOrderAndDetailDto implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键id*/
    @ApiModelProperty(value = "主键id")
    private String id;
    /**出库单编号*/
    @ApiModelProperty(value = "出库单编号")
    private String outNum;
    /**出库类型*/
    @Dict(dicCode = "out_storehouse_type")
    @ApiModelProperty(value = "出库类型")
    private String outStorehouseType;
    /**是否归还;1未归还(默认);2.已归还*/
    @ApiModelProperty(value = "是否归还;1未归还(默认);2.已归还")
    private Integer isReturn;
    /**经手人*/
    @ApiModelProperty(value = "经手人")
    private String handler;
    /**审核人*/
    @Dict(dictTable = "sys_user", dicText = "realname", dicCode = "username")
    @ApiModelProperty(value = "审核人")
    private String reviewer;
    /**单子状态*/
    @ApiModelProperty(value = "单子状态")
    private String orderStatus;
    /**审核时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "审核时间")
    private Date auditDate;
    /**审核意见*/
    @ApiModelProperty(value = "审核意见")
    private String approvalOpinion;
    /**领用事由*/
    @ApiModelProperty(value = "领用事由")
    private String subjectMatter;
    /**出库时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "出库时间")
    private Date outboundTime;
    /**备注*/
    @ApiModelProperty(value = "备注")
    private String remark;
    /**出库申请单明细*/
    @ApiModelProperty(value = "出库申请单明细")
    private List<OutboundDetail> outboundDetailList;
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/OutboundDetailVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
package org.jeecg.modules.tms.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * @Description: å‡ºåº“申请单明细
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
@Data
@ApiModel(value="出库申请单明细页面展示对象封装", description="出库申请单明细页面展示对象封装")
public class OutboundDetailVo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键*/
    @ApiModelProperty(value = "主键")
    private String id;
    /**出库单号*/
    @ApiModelProperty(value = "出库单号")
    private String outStorehouseId;
    /**刀具编码*/
    @ApiModelProperty(value = "刀具编码(tms_base_tool表主键id)")
    private String toolCode;
    /**刀具编号*/
    @ApiModelProperty(value = "刀具编号")
    private String toolId;
    /**刀具编码*/
    @ApiModelProperty(value = "刀具编码(tms_base_tool表tool_code字段)")
    private String toolNum;
    /**申请出库数量*/
    @ApiModelProperty(value = "申请出库数量")
    private java.math.BigDecimal outboundQuantity;
    /**实际出库数量*/
    @ApiModelProperty(value = "实际出库数量")
    private java.math.BigDecimal outActualCount;
    /**出库时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "出库时间")
    private Date outboundTime;
    /**仓库*/
    @ApiModelProperty(value = "仓库")
    @Dict(dictTable = "tms_warehouse", dicCode = "id", dicText = "warehouse_name")
    private String storageLocation;
    /**出库库位*/
    @ApiModelProperty(value = "出库库位")
    private String outboundLocation;
    /**出库状态;1.未出库;2.部分出库;3.出库完成*/
    @ApiModelProperty(value = "出库状态;1.未出库;2.部分出库;3.出库完成")
    @Dict(dicCode = "out_storehouse_status")
    private Integer status;
    /**操作员*/
    @ApiModelProperty(value = "操作员")
    private String createBy;
    /**创建时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    /**工具类型*/
    @Dict(dicCode = "application_type")
    @ApiModelProperty(value = "工具类型")
    private String applicationType;
    /**中文名称*/
    @ApiModelProperty(value = "中文名称")
    private String chineseName;
    /**型号/图号*/
    @ApiModelProperty(value = "型号/图号")
    private String toolModel;
    /**刀具材料*/
    @ApiModelProperty(value = "刀具材料")
    private String toolMaterial;
    /**零件材料*/
    @ApiModelProperty(value = "零件材料")
    private String partMaterial;
    /**厂家*/
    @ApiModelProperty(value = "厂家")
    private String supplierId;
    /**可用库存数量*/
    @ApiModelProperty(value = "可用库存数量")
    private java.math.BigDecimal quantity;
    /**仓库名称*/
    @ApiModelProperty(value = "仓库名称")
    private String warehouseName;
    /**台账明细表主键id*/
    @ApiModelProperty(value = "台账明细表主键id,工具选择时去重用")
    private String toolLedgerDetailId;
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutBillStatus.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package org.jeecg.modules.tms.enums;
import java.util.Objects;
/**
 * å‡ºåº“单状态枚举类
 */
public enum OutBillStatus {
    /**
     * è‰ç¨¿çŠ¶æ€ï¼Œå€¼ä¸º1
     */
    DRAFT("1", "草稿"),
    /**
     * å·²æäº¤çŠ¶æ€ï¼Œå€¼ä¸º2
     */
    SUBMITTED("2", "已提交"),
    /**
     * å®¡æ‰¹é€šè¿‡çŠ¶æ€ï¼Œå€¼ä¸º3
     */
    APPROVED("3", "审批通过"),
    /**
     * å®¡æ‰¹é©³å›žçŠ¶æ€ï¼Œå€¼ä¸º4
     */
    REJECTED("4", "审批驳回");
    private final String value;
    private final String description;
    /**
     * æž„造方法
     *
     * @param value       çŠ¶æ€å€¼
     * @param description çŠ¶æ€æè¿°
     */
    OutBillStatus(String value, String description) {
        this.value = value;
        this.description = description;
    }
    /**
     * èŽ·å–çŠ¶æ€å€¼
     *
     * @return çŠ¶æ€å€¼
     */
    public String getValue() {
        return value;
    }
    /**
     * èŽ·å–çŠ¶æ€æè¿°
     *
     * @return çŠ¶æ€æè¿°
     */
    public String getDescription() {
        return description;
    }
    /**
     * æ ¹æ®çŠ¶æ€å€¼èŽ·å–å¯¹åº”çš„æžšä¸¾å®žä¾‹
     *
     * @param value çŠ¶æ€å€¼
     * @return å¯¹åº”的枚举实例,如果找不到匹配的值则返回null
     */
    public static OutBillStatus fromValue(String value) {
        for (OutBillStatus status : values()) {
            if (Objects.equals(status.getValue(), value)) {
                return status;
            }
        }
        return null;
    }
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/OutboundDetailMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package org.jeecg.modules.tms.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.tms.entity.OutboundDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.tms.entity.vo.OutboundDetailVo;
/**
 * @Description: å‡ºåº“申请单明细
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
public interface OutboundDetailMapper extends BaseMapper<OutboundDetail> {
    /**
     * é€šè¿‡ä¸»è¡¨id删除子表数据
     *
     * @param mainId ä¸»è¡¨id
     * @return boolean
     */
    public boolean deleteByMainId(@Param("mainId") String mainId);
   /**
    * é€šè¿‡ä¸»è¡¨id查询子表数据
    *
    * @param mainId ä¸»è¡¨id
    * @return List<OutboundDetail>
    */
    public List<OutboundDetail> selectByMainId(@Param("mainId") String mainId);
    IPage<OutboundDetailVo> queryPageList(Page<OutboundDetail> page,
                                          @Param(Constants.WRAPPER) Wrapper<OutboundDetail> queryWrapper);
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/OutboundOrderMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package org.jeecg.modules.tms.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.tms.entity.OutboundOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Description: tms_outbound_order
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
public interface OutboundOrderMapper extends BaseMapper<OutboundOrder> {
    IPage<OutboundOrder> queryPageList(Page<OutboundOrder> page,
                                       @Param(Constants.WRAPPER) Wrapper<OutboundOrder> queryWrapper);
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/OutboundDetailMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
<?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="org.jeecg.modules.tms.mapper.OutboundDetailMapper">
    <delete id="deleteByMainId" parameterType="java.lang.String">
        DELETE
        FROM  tms_outbound_detail
        WHERE
             out_storehouse_id = #{mainId}
    </delete>
    <select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.tms.entity.OutboundDetail">
        SELECT *
        FROM  tms_outbound_detail
        WHERE
             out_storehouse_id = #{mainId}
    </select>
    <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.vo.OutboundDetailVo">
        SELECT
            t1.id,
            t1.out_storehouse_id outStorehouseId,
            t1.tool_code toolCode,
            t1.tool_id toolId,
            t2.tool_code toolNum,
            t1.outbound_quantity outboundQuantity,
            t1.out_actual_count outActualCount,
            t1.outbound_time outboundTime,
            t1.storage_location storageLocation,
            t1.outbound_location outboundLocation,
            t1.status,
            t1.create_by createBy,
            t1.create_time createTime,
            t2.chinese_name chineseName,
            t2.tool_model toolModel,
            t2.parama_table_name paramaTableName,
            t3.application_type applicationType,
            t3.supplier_id supplierId,
            t11.id toolLedgerDetailId,
            t11.quantity,
            ISNULL(t12.warehouse_id, '') + '/' + ISNULL(t12.warehouse_name, '') warehouseName,
            <choose>
                <when test="ew.paramNameValuePairs.paramaTableName == '1'">
                    t4.tool_material toolMaterial,
                    t4.part_material partMaterial
                </when>
                <when test="ew.paramNameValuePairs.paramaTableName == '2'">
                    t5.tool_material toolMaterial,
                    t5.part_material partMaterial
                </when>
                <when test="ew.paramNameValuePairs.paramaTableName == '3'">
                    t6.tool_material toolMaterial,
                    t6.part_material partMaterial
                </when>
                <when test="ew.paramNameValuePairs.paramaTableName == '4'">
                    t7.tool_material toolMaterial,
                    t7.part_material partMaterial
                </when>
                <when test="ew.paramNameValuePairs.paramaTableName == '5'">
                    t8.tool_material toolMaterial,
                    t8.part_material partMaterial
                </when>
                <when test="ew.paramNameValuePairs.paramaTableName == '6'">
                    t9.tool_material toolMaterial,
                    t9.part_material partMaterial
                </when>
                <otherwise>
                    t10.tool_material toolMaterial,
                    t10.part_material partMaterial
                </otherwise>
            </choose>
        FROM tms_outbound_detail t1
        LEFT JOIN tms_base_tools t2 on t1.tool_code = t2.id
        LEFT JOIN tms_tools_config_property t3 on t3.tool_code = t2.id
        LEFT JOIN tms_tool_ledger_detail t11 on t1.tool_code = t11.tool_code and t1.tool_id = t11.tool_id
        LEFT JOIN tms_warehouse t12 on t1.storage_location = t12.id
        <choose>
            <when test="ew.paramNameValuePairs.paramaTableName == '1'">
                LEFT JOIN tms_para_common_tool t4 on t4.tool_code = t2.id
            </when>
            <when test="ew.paramNameValuePairs.paramaTableName == '2'">
                LEFT JOIN tms_para_hole_tools t5 on t5.tool_code = t2.id
            </when>
            <when test="ew.paramNameValuePairs.paramaTableName == '3'">
                LEFT JOIN tms_para_threading_tool t6 on t6.tool_code = t2.id
            </when>
            <when test="ew.paramNameValuePairs.paramaTableName == '4'">
                LEFT JOIN tms_para_mill_tool t7 on t7.tool_code = t2.id
            </when>
            <when test="ew.paramNameValuePairs.paramaTableName == '5'">
                LEFT JOIN tms_para_turning_tools t8 on t8.tool_code = t2.id
            </when>
            <when test="ew.paramNameValuePairs.paramaTableName == '6'">
                LEFT JOIN tms_para_blade t9 on t9.tool_code = t2.id
            </when>
            <otherwise>
                LEFT JOIN tms_para_common_tool t10 on t10.tool_code = t2.id
            </otherwise>
        </choose>
        ${ew.customSqlSegment}
    </select>
</mapper>
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/OutboundOrderMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<?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="org.jeecg.modules.tms.mapper.OutboundOrderMapper">
    <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.OutboundOrder">
        SELECT
            t.id,
            t.out_num outNum,
            t.out_storehouse_type outStorehouseType,
            t.is_return isReturn,
            t.handler,
            t.reviewer,
            t.order_status orderStatus,
            t.out_status outStatus,
            t.audit_date auditDate,
            t.approval_opinion approvalOpinion,
            t.subject_matter subjectMatter,
            t.outbound_time outboundTime,
            t.remark,
            t.create_by createBy,
            t.create_time createTime
        FROM tms_outbound_order t
        ${ew.customSqlSegment}
    </select>
</mapper>
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IOutboundDetailService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package org.jeecg.modules.tms.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.tms.entity.OutboundDetail;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.tms.entity.vo.OutboundDetailVo;
import java.util.List;
import java.util.Map;
/**
 * @Description: å‡ºåº“申请单明细
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
public interface IOutboundDetailService extends IService<OutboundDetail> {
  /**
   * é€šè¿‡ä¸»è¡¨id查询子表数据
   *
   * @param mainId
   * @return List<OutboundDetail>
   */
    public List<OutboundDetail> selectByMainId(String mainId);
    IPage<OutboundDetailVo> queryPageList(Page<OutboundDetail> page, Map<String, String[]> parameterMap);
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IOutboundOrderService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package org.jeecg.modules.tms.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.tms.entity.OutboundDetail;
import org.jeecg.modules.tms.entity.OutboundOrder;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.tms.entity.dto.OutboundOrderAndDetailDto;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
 * @Description: tms_outbound_order
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
public interface IOutboundOrderService extends IService<OutboundOrder> {
    /**
     * åˆ é™¤ä¸€å¯¹å¤š
     *
     * @param id
     */
    public void delMain (String id);
    /**
     * æ‰¹é‡åˆ é™¤ä¸€å¯¹å¤š
     *
     * @param idList
     */
    public void delBatchMain (Collection<? extends Serializable> idList);
    void addTotal(OutboundOrderAndDetailDto outboundOrder);
    IPage<OutboundOrder> queryPageList(Page<OutboundOrder> page, Map<String, String[]> parameterMap);
    void editTotal(OutboundOrderAndDetailDto outboundOrder);
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundDetailServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package org.jeecg.modules.tms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.tms.entity.OutboundDetail;
import org.jeecg.modules.tms.entity.vo.OutboundDetailVo;
import org.jeecg.modules.tms.mapper.OutboundDetailMapper;
import org.jeecg.modules.tms.service.IOutboundDetailService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * @Description: å‡ºåº“申请单明细
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
@Service
public class OutboundDetailServiceImpl extends ServiceImpl<OutboundDetailMapper, OutboundDetail> implements IOutboundDetailService {
    @Autowired
    private OutboundDetailMapper outboundDetailMapper;
    @Override
    public List<OutboundDetail> selectByMainId(String mainId) {
        return outboundDetailMapper.selectByMainId(mainId);
    }
    @Override
    public IPage<OutboundDetailVo> queryPageList(Page<OutboundDetail> page, Map<String, String[]> parameterMap) {
        QueryWrapper<OutboundDetail> queryWrapper = Wrappers.query();
        String[] outStorehouseIds = parameterMap.get("outStorehouseId");
        if (outStorehouseIds != null && outStorehouseIds.length > 0) {
            queryWrapper.eq("t1.out_storehouse_id", outStorehouseIds[0]);
        }
        return this.baseMapper.queryPageList(page, queryWrapper);
    }
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,136 @@
package org.jeecg.modules.tms.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
import org.jeecg.modules.tms.entity.OutboundOrder;
import org.jeecg.modules.tms.entity.OutboundDetail;
import org.jeecg.modules.tms.entity.dto.OutboundOrderAndDetailDto;
import org.jeecg.modules.tms.enums.OutBillStatus;
import org.jeecg.modules.tms.mapper.OutboundDetailMapper;
import org.jeecg.modules.tms.mapper.OutboundOrderMapper;
import org.jeecg.modules.tms.service.IOutboundDetailService;
import org.jeecg.modules.tms.service.IOutboundOrderService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
/**
 * @Description: tms_outbound_order
 * @Author: jeecg-boot
 * @Date:   2025-05-16
 * @Version: V1.0
 */
@Service
public class OutboundOrderServiceImpl extends ServiceImpl<OutboundOrderMapper, OutboundOrder> implements IOutboundOrderService {
    @Autowired
    private IOutboundDetailService outboundDetailService;
    @Autowired
    private ISysBusinessCodeRuleService businessCodeRuleService;
    @Autowired
    private OutboundOrderMapper outboundOrderMapper;
    @Autowired
    private OutboundDetailMapper outboundDetailMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delMain(String id) {
        outboundDetailMapper.deleteByMainId(id);
        outboundOrderMapper.deleteById(id);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delBatchMain(Collection<? extends Serializable> idList) {
        for(Serializable id:idList) {
            outboundDetailMapper.deleteByMainId(id.toString());
            outboundOrderMapper.deleteById(id);
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addTotal(OutboundOrderAndDetailDto outboundOrder) {
        OutboundOrder order = BeanUtil.copyProperties(outboundOrder, OutboundOrder.class);
        order.setHandler(Objects.requireNonNull(getCurrentUser()).getId());
        order.setOutNum(businessCodeRuleService.generateBusinessCodeSeq("outBoundOrder"));
        order.setOrderStatus(OutBillStatus.DRAFT.getValue());
        save(order);
        List<OutboundDetail> detailList = CollectionUtil.newArrayList();
        outboundOrder.getOutboundDetailList().forEach(item->{
            item.setOutStorehouseId(order.getId());
            detailList.add(item);
        });
        outboundDetailService.saveBatch(detailList);
    }
    @Override
    public IPage<OutboundOrder> queryPageList(Page<OutboundOrder> page, Map<String, String[]> parameterMap) {
        QueryWrapper<OutboundOrder> queryWrapper = Wrappers.query();
        String[] outNums = parameterMap.get("outNum");
        if (outNums != null && outNums.length > 0) {
            queryWrapper.like("t.out_num", outNums[0]);
        }
        String[] outStorehouseTypes = parameterMap.get("outStorehouseType");
        if (outStorehouseTypes != null && outStorehouseTypes.length > 0) {
            queryWrapper.eq("t.out_storehouse_type", outStorehouseTypes[0]);
        }
        String[] statuses = parameterMap.get("orderStatus");
        if (statuses != null && statuses.length > 0) {
            queryWrapper.eq("t.order_status", statuses[0]);
        }
        String[] startTimes = parameterMap.get("startTime");
        if (startTimes != null && startTimes.length > 0) {
            queryWrapper.ge("t.create_time", startTimes[0]);
        }
        String[] endTimes = parameterMap.get("endTime");
        if (endTimes != null && endTimes.length > 0) {
            queryWrapper.le("t.create_time", endTimes[0]);
        }
        queryWrapper.orderByDesc("t.create_time");
        return this.baseMapper.queryPageList(page, queryWrapper);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void editTotal(OutboundOrderAndDetailDto outboundOrder) {
        //删除所有明细
        outboundDetailService.remove(new LambdaQueryWrapper<OutboundDetail>()
                .eq(OutboundDetail::getOutStorehouseId, outboundOrder.getId()));
        OutboundOrder outboundOrderUpdate = BeanUtil.copyProperties(outboundOrder, OutboundOrder.class);
        outboundOrderMapper.updateById(outboundOrderUpdate);
        List<OutboundDetail> detailList = CollectionUtil.newArrayList();
        outboundOrder.getOutboundDetailList().forEach(item->{
            item.setOutStorehouseId(outboundOrderUpdate.getId());
            detailList.add(item);
        });
        outboundDetailService.saveBatch(detailList);
    }
    private LoginUser getCurrentUser() {
        // èŽ·å–å½“å‰è®¤è¯çš„ç™»å½•ç”¨æˆ·ä¿¡æ¯
        Subject currentUser = SecurityUtils.getSubject();
        if (currentUser != null && currentUser.isAuthenticated()) {
            Object principal = currentUser.getPrincipal();
            if (principal instanceof LoginUser) {
                return (LoginUser) principal;
            }
        }
        return null;
    }
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolLedgerDetailServiceImpl.java
@@ -8,9 +8,7 @@
import org.jeecg.modules.tms.mapper.ToolLedgerDetailMapper;
import org.jeecg.modules.tms.service.IToolLedgerDetailService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Map;
/**
@@ -33,6 +31,11 @@
        if (statuses != null && statuses.length > 0) {
            queryWrapper.eq("t.status", statuses[0]);
        }
        String[] excludeIds = parameterMap.get("excludeIds");
        if (excludeIds != null && excludeIds.length > 0) {
            String[] idArray = excludeIds[0].split(",");
            queryWrapper.notIn("t.id", idArray);
        }
        return this.baseMapper.queryPageList(page, queryWrapper);
    }
}