lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/EquipmentLeanOutStatusEnum.java
@@ -7,4 +7,13 @@ WAIT_CONFIRM, //å¾ ç¡®è®¤ COMPLETE, //已宿 ; public static EquipmentLeanOutStatusEnum getInstance(String code) { EquipmentLeanOutStatusEnum[] values = EquipmentLeanOutStatusEnum.values(); for (EquipmentLeanOutStatusEnum value : values) { if (value.name().equals(code)) { return value; } } return null; } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentLeanOutController.java
@@ -18,6 +18,7 @@ import org.jeecg.modules.eam.constant.EquipmentLeanOutStatusEnum; import org.jeecg.modules.eam.entity.EamEquipmentLeanOut; import org.jeecg.modules.eam.request.EamEquipmentLeanOutQuery; import org.jeecg.modules.eam.request.EamEquipmentLeanOutRequest; import org.jeecg.modules.eam.service.IEamEquipmentLeanOutService; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.springframework.beans.factory.annotation.Autowired; @@ -201,7 +202,7 @@ @AutoLog(value = "设å¤ååºå½è¿-å®¡æ¹æµ") @ApiOperation(value = "设å¤ååºå½è¿-å®¡æ¹æµ", notes = "设å¤ååºå½è¿-å®¡æ¹æµ") @RequestMapping(value = "/approval", method = {RequestMethod.PUT, RequestMethod.POST}) public Result<?> approval(@RequestBody EamEquipmentLeanOut request) { public Result<?> approval(@RequestBody EamEquipmentLeanOutRequest request) { if (request == null) { return Result.error("æ·»å ç对象ä¸è½ä¸ºç©ºï¼"); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamEquipmentLeanOutRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,177 @@ package org.jeecg.modules.eam.request; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; /** * @Description: 设å¤ååºå½è¿ * @Author: jeecg-boot * @Date: 2025-05-21 * @Version: V1.0 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class EamEquipmentLeanOutRequest extends FlowTaskVo implements Serializable { /** * ä¸»é® */ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "主é®") private String id; /** * å建人 */ @ApiModelProperty(value = "å建人") private String createBy; /** * å建æ¶é´ */ @ApiModelProperty(value = "å建æ¶é´") private Date createTime; /** * æ´æ°äºº */ @ApiModelProperty(value = "æ´æ°äºº") private String updateBy; /** * æ´æ°æ¶é´ */ @ApiModelProperty(value = "æ´æ°æ¶é´") private Date updateTime; /** * å 餿 è®° */ @ApiModelProperty(value = "å 餿 è®°") private Integer delFlag; /** * 设å¤ID */ @ApiModelProperty(value = "设å¤ID") private String equipmentId; /** * åæ®å· */ @Excel(name = "åæ®å·", width = 15) @ApiModelProperty(value = "åæ®å·") private String code; /** * åå ¥é¨é¨ */ @Excel(name = "åå ¥é¨é¨", width = 15, dictTable = "mdc_production", dicText = "production_name", dicCode = "id") @ApiModelProperty(value = "åå ¥é¨é¨") @Dict(dicCode = "mdc_production, production_name, id") private String leanDepartId; /** * åå ¥è´£ä»»äºº */ @Excel(name = "åå ¥è´£ä»»äºº", width = 15) @ApiModelProperty(value = "åå ¥è´£ä»»äºº") @Dict(dicCode = "sys_user, realname, username") private String leanPerson; /** * åç¨åå */ @ApiModelProperty(value = "åç¨åå ") private String leanReason; /** * 审æ¹ç±»å */ @ApiModelProperty(value = "审æ¹ç±»å") @Dict(dicCode = "approved_rejected") private String approvalDealType; /** * ååºç¶æ */ @Excel(name = "ååºç¶æ", width = 15) @ApiModelProperty(value = "ååºç¶æ") @Dict(dicCode = "equipment_lean_out_status") private String leanStatus; /** * ååºå¼å§æ¶é´ */ @ApiModelProperty(value = "ååºæ¶é´") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date leanStartTime; /** * ååºå½è¿æ¶é´ */ @ApiModelProperty(value = "å½è¿æ¶é´") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date leanEndTime; /** * å®¡æ ¸äºº */ @Excel(name = "å®¡æ ¸äºº", width = 15) @ApiModelProperty(value = "å®¡æ ¸äºº") @Dict(dicCode = "sys_user, realname, username") private String approvalUser; /** * å®¡æ ¸æè§ */ @Excel(name = "å®¡æ ¸æè§", width = 15) @ApiModelProperty(value = "å®¡æ ¸æè§") private String approvalComment; /** * å®¡æ ¸æ¶é´ */ @ApiModelProperty(value = "å®¡æ ¸æ¶é´") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date approvalTime; /** * 确认人 */ @Excel(name = "确认人", width = 15) @ApiModelProperty(value = "确认人") @Dict(dicCode = "sys_user, realname, username") private String confirmUser; /** * 确认æè§ */ @Excel(name = "确认æè§", width = 15) @ApiModelProperty(value = "确认æè§") private String confirmComment; /** * 确认æ¶é´ */ @ApiModelProperty(value = "确认æ¶é´") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date confirmTime; /** * 夿³¨ */ @Excel(name = "夿³¨", width = 15) @ApiModelProperty(value = "夿³¨") private String remark; /** * 夿³¨ */ @Excel(name = "å½è¿å¤æ³¨", width = 15) @ApiModelProperty(value = "å½è¿å¤æ³¨") private String returnComment; //å表å±ç¤º @TableField(exist = false) private String equipmentCode; @TableField(exist = false) private String equipmentName; } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentLeanOutService.java
@@ -5,6 +5,7 @@ import org.jeecg.modules.eam.entity.EamEquipmentLeanOut; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.eam.request.EamEquipmentLeanOutQuery; import org.jeecg.modules.eam.request.EamEquipmentLeanOutRequest; /** * @Description: 设å¤ååºå½è¿ @@ -50,5 +51,5 @@ * @param request * @return */ EamEquipmentLeanOut approval(EamEquipmentLeanOut request); EamEquipmentLeanOut approval(EamEquipmentLeanOutRequest request); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentLeanOutServiceImpl.java
@@ -1,6 +1,7 @@ package org.jeecg.modules.eam.service.impl; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -9,18 +10,19 @@ import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.flowable.engine.TaskService; import org.flowable.task.api.Task; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.DataBaseConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.eam.constant.AssetStatusEnum; import org.jeecg.modules.eam.constant.EquipmentLeanOutStatusEnum; import org.jeecg.modules.eam.constant.*; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamEquipmentLeanOut; import org.jeecg.modules.eam.mapper.EamEquipmentLeanOutMapper; import org.jeecg.modules.eam.request.EamEquipmentLeanOutQuery; import org.jeecg.modules.eam.request.EamEquipmentLeanOutRequest; import org.jeecg.modules.eam.service.IEamEquipmentLeanOutService; import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; @@ -229,6 +231,10 @@ variables.put("NextAssignee", usernames); Result result = flowDefinitionService.startProcessInstanceByKey("equipment_lean_out", variables); if (result != null) { entity.setLeanStartTime(new Date()); entity.setLeanStatus(EquipmentLeanOutStatusEnum.WAIT_APPROVAL.name()); //ä¿åå·¥å equipmentLeanOutMapper.updateById(entity); return result.isSuccess(); } return true; @@ -236,41 +242,112 @@ @Override @Transactional(rollbackFor = Exception.class) public EamEquipmentLeanOut approval(EamEquipmentLeanOut eamEquipmentLeanOut) { try { // æ£æ¥è¯·æ±åæ° if (!isValidRequest(eamEquipmentLeanOut)) { throw new JeecgBootException("鿳忰"); } if (EquipmentLeanOutStatusEnum.WAIT_APPROVAL.name().equals(eamEquipmentLeanOut.getLeanStatus())) { eamEquipmentLeanOut.setLeanStatus(EquipmentLeanOutStatusEnum.WAIT_RETURN.name()); // å¾ å½è¿ } else if (EquipmentLeanOutStatusEnum.WAIT_RETURN.name().equals(eamEquipmentLeanOut.getLeanStatus())) { // å¾ ç¡®è®¤ eamEquipmentLeanOut.setLeanStatus(EquipmentLeanOutStatusEnum.WAIT_CONFIRM.name()); } else if (EquipmentLeanOutStatusEnum.WAIT_CONFIRM.name().equals(eamEquipmentLeanOut.getLeanStatus())) { // 已宿 eamEquipmentLeanOut.setLeanStatus(EquipmentLeanOutStatusEnum.COMPLETE.name()); public EamEquipmentLeanOut approval(EamEquipmentLeanOutRequest request) { EamEquipmentLeanOut entity = equipmentLeanOutMapper.selectById(request.getId()); if (entity == null) { throw new JeecgBootException("审æ¹çæ°æ®å·²å é¤ï¼è¯·å·æ°éè¯ï¼"); } // è·åå½åç»å½ç¨æ· LoginUser sysUser = getCurrentUser(); if (sysUser == null || StrUtil.isBlank(sysUser.getId())) { throw new JeecgBootException("è´¦å·ä¸åå¨"); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (user == null || StrUtil.isBlank(user.getId())) { throw new JeecgBootException("æªè·åå°ç»å½ç¨æ·ï¼è¯·éæ°ç»å½ååè¯ï¼"); } // 审æ¹äºº eamEquipmentLeanOut.setApprovalUser(sysUser.getUsername()); //æ£æ¥è®¾å¤ EamEquipment equipment = eamEquipmentService.getById(eamEquipmentLeanOut.getEquipmentId()); if (equipment == null) { throw new JeecgBootException("设å¤ä¸åå¨ï¼"); } eamEquipmentLeanOut.setLeanPerson(sysUser.getUsername()); this.updateById(eamEquipmentLeanOut); request.setApprovalUser(user.getUsername()); // è·åæµç¨ä¸å¡è®°å½ return eamEquipmentLeanOut; } catch (Exception e) { throw new JeecgBootException("æä½å¤±è´¥ï¼" + e.getMessage()); FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId()); if (flowMyBusiness == null) { throw new JeecgBootException("æµç¨å®ä¾ä¸åå¨ï¼è¯·å·æ°åéè¯ï¼"); } boolean userAuthorized = isUserAuthorized(flowMyBusiness, user); if (!userAuthorized) { throw new JeecgBootException("ç¨æ·æ ææä½æ¤ä»»å¡ï¼è¯·å·æ°åéè¯ï¼"); } // 认é¢ä»»å¡ if (!claimTask(flowMyBusiness.getTaskId(), user)) { throw new JeecgBootException("ä»»å¡ä¸åå¨ã已宿æå·²è¢«ä»äººè®¤é¢ï¼"); } EamEquipment equipment = eamEquipmentService.getById(entity.getEquipmentId()); if (equipment == null) { throw new JeecgBootException("设å¤ä¸åå¨ï¼è¯·æ£æ¥ï¼"); } EquipmentLeanOutStatusEnum status = EquipmentLeanOutStatusEnum.getInstance(entity.getLeanStatus()); if (status == null) { return null; } //æµç¨åé Map<String, Object> values = new HashMap<>(); switch (status) { // å®¡æ¹ case WAIT_APPROVAL: //æ§è¡å®æ values.put("dataId", entity.getId()); values.put("organization", request.getApprovalComment()); values.put("comment", request.getApprovalComment()); values.put("approvalDealType", request.getApprovalDealType()); request.setComment(request.getApprovalComment()); entity.setApprovalUser(user.getUsername());// å®¡æ ¸äºº entity.setApprovalComment(request.getApprovalComment());// å®¡æ ¸æè§ entity.setApprovalTime(new Date());// å®¡æ ¸æ¶é´ entity.setApprovalDealType(request.getApprovalDealType()); // 审æ¹ç±»å // éªè¯éè¿è¿æ¯é©³å if (request.getApprovalDealType().equals("1")) { //设置entity entity.setLeanStatus(EquipmentLeanOutStatusEnum.WAIT_RETURN.name()); List<String> userApprovalList = new ArrayList<>(Collections.singletonList(entity.getLeanPerson())); values.put("NextAssignee", userApprovalList); } else { //设置entity entity.setLeanStatus(EquipmentLeanOutStatusEnum.COMPLETE.name()); } break; // å½è¿ case WAIT_RETURN: if (StringUtils.isBlank(equipment.getEquipmentManager())) { throw new JeecgBootException("è®¾å¤æªåé 设å¤ç®¡çåï¼æ æ³è¿å ¥ä¸çº§å®¡æ¹ï¼"); } List<String> userApprovalList = new ArrayList<>(Collections.singletonList(entity.getLeanPerson())); userApprovalList.add(equipment.getEquipmentManager()); values.put("dataId", entity.getId()); values.put("organization", request.getReturnComment()); values.put("comment", request.getReturnComment()); values.put("NextAssignee", userApprovalList); request.setComment(request.getReturnComment()); entity.setLeanEndTime(new Date()); //å½è¿æ¶é´ //设置entity entity.setLeanStatus(EquipmentLeanOutStatusEnum.WAIT_CONFIRM.name()); entity.setApprovalUser(user.getUsername());// å®¡æ ¸äºº entity.setLeanEndTime(new Date());// å½è¿æ¶é´ entity.setReturnComment(request.getReturnComment());// å½è¿å¤æ³¨ break; // å½è¿ç¡®è®¤ case WAIT_CONFIRM: values.put("dataId", entity.getId()); values.put("organization", request.getConfirmComment()); values.put("comment", request.getConfirmComment()); request.setComment(request.getConfirmComment()); //设置entity entity.setLeanStatus(EquipmentLeanOutStatusEnum.COMPLETE.name()); entity.setConfirmUser(user.getUsername()); entity.setConfirmComment(request.getConfirmComment()); entity.setConfirmTime(new Date()); // ä¿®æ¹è®¾å¤ç¶æ equipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); eamEquipmentService.updateById(equipment); break; } request.setValues(values); // 宿æµç¨ä»»å¡ Result result = flowTaskService.complete(request); if (!result.isSuccess()) { throw new JeecgBootException("审æ¹å¤±è´¥ï¼è¯·å·æ°æ¥çï¼"); } //ä¿åå·¥å equipmentLeanOutMapper.updateById(entity); return entity; } @@ -281,17 +358,28 @@ business.getActStatus(); } private boolean isValidRequest(EamEquipmentLeanOut request) { return StrUtil.isNotBlank(request.getCode()) && StrUtil.isNotBlank(request.getEquipmentId()); private boolean claimTask(String taskId, LoginUser user) { Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task == null) { return false; } if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { return false; } taskService.claim(taskId, user.getUsername()); return true; } private LoginUser getCurrentUser() { try { return (LoginUser) SecurityUtils.getSubject().getPrincipal(); } catch (Exception e) { return null; } /** * å¤æç¨æ·æ¯å¦æ¥ææ¤æé * * @param flowMyBusiness * @param user * @return */ private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) { List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); return todoUsers != null && todoUsers.contains(user.getUsername()); } @Override 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); } }