lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java
@@ -1,5 +1,6 @@ package org.jeecg.modules.tms.controller; import com.alibaba.fastjson.JSONObject; import org.jeecg.common.system.query.QueryGenerator; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -72,9 +73,10 @@ @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { QueryWrapper<PreparationOrder> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrder, req.getParameterMap()); Map<String, String[]> parameterMap = req.getParameterMap(); QueryWrapper<PreparationOrder> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrder, parameterMap); Page<PreparationOrder> page = new Page<PreparationOrder>(pageNo, pageSize); IPage<PreparationOrder> pageList = preparationOrderService.page(page, queryWrapper); IPage<PreparationOrder> pageList = preparationOrderService.queryPageList(page, parameterMap); return Result.OK(pageList); } @@ -139,8 +141,17 @@ //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.preparationOrderService.delBatchMain(Arrays.asList(ids.split(","))); preparationOrderService.delBatchMain(Arrays.asList(ids.split(","))); return Result.OK("æ¹éå 餿å!"); } @AutoLog(value = "åå ·åå¤å-转åºåºç³è¯·å") @ApiOperation(value = "åå ·åå¤å-转åºåºç³è¯·å", notes = "åå ·åå¤å-转åºåºç³è¯·å") //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:convert") @PostMapping(value = "/convertToOutboundOrder") public Result<String> convertToOutboundOrder(@RequestBody List<String> preparationOrderIds) { List<String> result = preparationOrderService.convertToOutboundOrder(preparationOrderIds); return Result.OK(JSONObject.toJSONString(result)); } /** @@ -177,9 +188,10 @@ @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper<PreparationOrderDetail> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrderDetail, req.getParameterMap()); Map<String, String[]> parameterMap = req.getParameterMap(); QueryWrapper<PreparationOrderDetail> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrderDetail, parameterMap); Page<PreparationOrderDetail> page = new Page<PreparationOrderDetail>(pageNo, pageSize); IPage<PreparationOrderDetail> pageList = preparationOrderDetailService.page(page, queryWrapper); IPage<PreparationOrderDetail> pageList = preparationOrderDetailService.queryPageList(page, parameterMap); return Result.OK(pageList); } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; @@ -22,6 +23,7 @@ * @Version: V1.0 */ @Data @Accessors(chain = true) @TableName("tms_outbound_detail") @ApiModel(value="tms_outbound_detail对象", description="åºåºç³è¯·åæç»") public class OutboundDetail implements Serializable { lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java
@@ -5,6 +5,8 @@ import java.util.Date; import com.baomidou.mybatisplus.annotation.*; import liquibase.pro.packaged.E; import lombok.experimental.Accessors; import org.jeecgframework.poi.excel.annotation.Excel; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; @@ -20,6 +22,7 @@ * @Version: V1.0 */ @Data @Accessors(chain = true) @TableName("tms_outbound_order") @ApiModel(value="tms_outbound_order对象", description="tms_outbound_order") public class OutboundOrder implements Serializable { @@ -98,6 +101,42 @@ @Excel(name = "夿³¨", width = 15) @ApiModelProperty(value = "夿³¨") private String remark; /**åå¤åç¼å·*/ @Excel(name = "åå¤åç¼å·", width = 15) @ApiModelProperty(value = "åå¤åç¼å·") private String preparationOrderId; /**é¶ä»¶å¾å·*/ @Excel(name = "é¶ä»¶å¾å·", width = 15) @ApiModelProperty(value = "é¶ä»¶å¾å·") private String partDrawingNo; /**é¶ä»¶åç§°*/ @Excel(name = "é¶ä»¶åç§°", width = 15) @ApiModelProperty(value = "é¶ä»¶åç§°") private String partName; /**é¶ä»¶ææ*/ @Excel(name = "é¶ä»¶ææ", width = 15) @ApiModelProperty(value = "é¶ä»¶ææ") private String partMaterial; /**å å·¥æ¹æ¬¡*/ @Excel(name = "å·¥åºï¼å·¥æ¥å·ï¼", width = 15) @ApiModelProperty(value = "å·¥åºï¼å·¥æ¥å·ï¼") private String productionProcessesNo; /**å å·¥æ¹æ¬¡*/ @Excel(name = "å å·¥æ¹æ¬¡", width = 15) @ApiModelProperty(value = "å å·¥æ¹æ¬¡") private String batchCode; /**å å·¥æ°é*/ @Excel(name = "å å·¥æ°é", width = 15) @ApiModelProperty(value = "å å·¥æ°é") private String machiningCount; /**å 工设å¤*/ @Excel(name = "å 工设å¤", width = 15) @ApiModelProperty(value = "å 工设å¤") private String equipmentCode; /**ç¨åºå*/ @Excel(name = "ç¨åºå", width = 15) @ApiModelProperty(value = "ç¨åºå") private String ncName; /**ç§æ·å·*/ @Excel(name = "ç§æ·å·", width = 15) @ApiModelProperty(value = "ç§æ·å·") lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.experimental.Accessors; import org.jeecgframework.poi.excel.annotation.Excel; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; @@ -22,6 +23,7 @@ * @Version: V1.0 */ @Data @Accessors(chain = true) @TableName("tms_preparation_order") @ApiModel(value="tms_preparation_order对象", description="åå ·åå¤å") public class PreparationOrder implements Serializable { @@ -72,6 +74,7 @@ @ApiModelProperty(value = "åå¤ååºåºæ°é") private java.math.BigDecimal outboundQuantity; /**ååç¶æ;1.æªå®¡æ ¸ï¼2.è°æºåå·²å®¡æ ¸ï¼3.已转åºåºç³è¯·*/ @Dict(dicCode = "preparation_order_status") @Excel(name = "ååç¶æ;1.æªå®¡æ ¸ï¼2.è°æºåå·²å®¡æ ¸ï¼3.已转åºåºç³è¯·", width = 15) @ApiModelProperty(value = "ååç¶æ;1.æªå®¡æ ¸ï¼2.è°æºåå·²å®¡æ ¸ï¼3.已转åºåºç³è¯·") private String orderStatus; lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java
@@ -2,10 +2,12 @@ import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.jeecg.common.aspect.annotation.Dict; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import java.util.Date; @@ -33,7 +35,7 @@ private String preparationOrderId; /**åå ·ç¼ç */ @Excel(name = "åå ·ç¼ç ", width = 15) @ApiModelProperty(value = "åå ·ç¼ç ") @ApiModelProperty(value = "åå ·ç¼ç (tms_base_tool表idåæ®µ)") private String toolCode; /**åå ·ç¼å·*/ @Excel(name = "åå ·ç¼å·", width = 15) @@ -63,4 +65,34 @@ @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "æ´æ°æ¶é´") private Date updateTime; /**åå ·ç¼ç (tms_base_tool表tool_codeåæ®µ)*/ @TableField(exist = false) @ApiModelProperty(value = "åå ·ç¼ç (tms_base_tool表tool_codeåæ®µ)") private String toolNum; /**䏿åç§°*/ @TableField(exist = false) @ApiModelProperty(value = "䏿åç§°") private String chineseName; /**åå·/å¾å·*/ @TableField(exist = false) @ApiModelProperty(value = "åå·/å¾å·") private String toolModel; /**å·¥å ·ç±»å*/ @TableField(exist = false) @ApiModelProperty(value = "å·¥å ·ç±»å") @Dict(dicCode = "application_type") private String applicationType; /**åå ·ææ*/ @TableField(exist = false) @ApiModelProperty(value = "åå ·ææ") private String toolMaterial; /**é¶ä»¶ææ*/ @TableField(exist = false) @ApiModelProperty(value = "é¶ä»¶ææ") private String partMaterial; /**åå®¶*/ @TableField(exist = false) @ApiModelProperty(value = "åå®¶") private String supplierId; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java
@@ -8,7 +8,8 @@ TOOL_BORROW("1", "å·¥å ·åç¨"), MAINTENANCE_OUTBOUND("2", "ç»´ä¿®åºåº"), CALIBRATION_OUTBOUND("3", "æ£å®åºåº"), GRINDING_OUTBOUND("4", "å磨åºåº"); GRINDING_OUTBOUND("4", "å磨åºåº"), PREPARATION_OUTBOUND("5", "åå¤ååºåº"); private final String value; private final String description; lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,56 @@ package org.jeecg.modules.tms.enums; import lombok.Getter; import java.util.Objects; /** * åå ·åå¤åç¶ææä¸¾ç±» */ @Getter public enum PreparationOrderStatus { /** * å¾ å®¡æ ¸ç¶æï¼å¼ä¸º1 */ PENDING_AUDIT("1", "æªå®¡æ ¸"), /** * å®¡æ ¸éè¿ç¶æï¼å¼ä¸º2 */ AUDITED("2", "è°æºåå·²å®¡æ ¸"), /** * 转åºåºç³è¯·ç¶æï¼å¼ä¸º3 */ CONVERT("3", "已转åºåºç³è¯·"); private final String value; private final String description; /** * æé æ¹æ³ * * @param value ç¶æå¼ * @param description ç¶ææè¿° */ PreparationOrderStatus(String value, String description) { this.value = value; this.description = description; } /** * æ ¹æ®ç¶æå¼è·å对åºçæä¸¾å®ä¾ * * @param value ç¶æå¼ * @return 对åºçæä¸¾å®ä¾ï¼å¦ææ¾ä¸å°å¹é çå¼åè¿ånull */ public static PreparationOrderStatus fromValue(String value) { for (PreparationOrderStatus status : values()) { if (Objects.equals(status.getValue(), value)) { return status; } } return null; } } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java
@@ -1,6 +1,12 @@ 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.PreparationOrderDetail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; @@ -29,4 +35,6 @@ */ public List<PreparationOrderDetail> selectByMainId(@Param("mainId") String mainId); IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page, @Param(Constants.WRAPPER) Wrapper<PreparationOrderDetail> queryWrapper); } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java
@@ -2,6 +2,11 @@ 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.apache.ibatis.annotations.Param; import org.jeecg.modules.tms.entity.PreparationOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -14,4 +19,6 @@ */ public interface PreparationOrderMapper extends BaseMapper<PreparationOrder> { IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, @Param(Constants.WRAPPER) Wrapper<PreparationOrder> queryWrapper); } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml
@@ -15,4 +15,79 @@ WHERE preparation_order_id = #{mainId} </select> <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.PreparationOrderDetail"> SELECT t1.id id, t1.preparation_order_id preparationOrderId, t1.tool_code toolCode, t1.outbound_quantity outboundQuantity, t1.tenant_id tenantId, t1.create_by createBy, t1.create_time createTime, t1.update_by updateBy, t1.update_time updateTime, t2.tool_code toolNum, t2.chinese_name chineseName, t2.tool_model toolModel, t2.parama_table_name paramaTableName, t3.application_type applicationType, t3.supplier_id supplierId, <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_preparation_order_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 <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/PreparationOrderMapper.xml
@@ -2,4 +2,28 @@ <!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.PreparationOrderMapper"> <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.PreparationOrder"> SELECT t.id AS id, t.preparation_order_num AS preparationOrderNum, t.part_drawing_no AS partDrawingNo, t.part_name AS partName, t.part_material AS partMaterial, t.production_processes_no AS productionProcessesNo, t.batch_code AS batchCode, t.machining_count AS machiningCount, t.equipment_code AS equipmentCode, t.nc_name AS ncName, t.outbound_quantity AS outboundQuantity, t.order_status AS orderStatus, t.outbound_time AS outboundTime, t.remark AS remark, t.tenant_id AS tenantId, t.create_by AS createBy, t.create_time AS createTime, t.update_by AS updateBy, t.update_time AS updateTime FROM tms_preparation_order t ${ew.customSqlSegment} </select> </mapper> lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java
@@ -1,8 +1,11 @@ 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.PreparationOrderDetail; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; import java.util.Map; /** * @Description: åå ·åå¤åæç» @@ -19,4 +22,6 @@ * @return List<PreparationOrderDetail> */ public List<PreparationOrderDetail> selectByMainId(String mainId); IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page, Map<String, String[]> parameterMap); } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java
@@ -1,5 +1,7 @@ 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.PreparationOrderDetail; import org.jeecg.modules.tms.entity.PreparationOrder; import com.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +10,7 @@ import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; /** * @Description: åå ·åå¤å @@ -33,4 +36,8 @@ void editTotal(PreparationOrderAndDetailDto preparationOrderAndDetailDto); List<String> convertToOutboundOrder(List<String> preparationOrderIds); IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, Map<String, String[]> parameterMap); } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java
@@ -175,13 +175,14 @@ if (!Objects.equals(outboundOrder.getOrderStatus(), OutBillStatus.DRAFT.getValue())) { throw new JeecgBootException("æ æ³æäº¤éèç¨¿ç¶æçåºåºç³è¯·åï¼"); } //éå®ç³è¯·åæç»ä¸å·¥å ·åºå if (lockOutboundStock(id)) { //å¯å¨æµç¨ if (triggerProcess(outboundOrder)) { outboundOrder.setOrderStatus(OutBillStatus.SUBMITTED.getValue()); updateById(outboundOrder); } if (!OutStorehouseType.PREPARATION_OUTBOUND.getValue().equals(outboundOrder.getOutStorehouseType())) { //䏿¯ä»åå¤åè½¬å ¥çåºåºç³è¯·ï¼æ§è¡éåº lockOutboundStock(id); } //å¯å¨æµç¨ if (triggerProcess(outboundOrder)) { outboundOrder.setOrderStatus(OutBillStatus.SUBMITTED.getValue()); updateById(outboundOrder); } } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java
@@ -1,10 +1,16 @@ 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.PreparationOrderDetail; import org.jeecg.modules.tms.mapper.PreparationOrderDetailMapper; import org.jeecg.modules.tms.service.IPreparationOrderDetailService; 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; @@ -24,4 +30,14 @@ public List<PreparationOrderDetail> selectByMainId(String mainId) { return preparationOrderDetailMapper.selectByMainId(mainId); } @Override public IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page, Map<String, String[]> parameterMap) { QueryWrapper<PreparationOrderDetail> queryWrapper = Wrappers.query(); String[] preparationOrderIds = parameterMap.get("preparationOrderId"); if (preparationOrderIds != null && preparationOrderIds.length > 0) { queryWrapper.eq("t1.preparation_order_id", preparationOrderIds[0]); } return this.baseMapper.queryPageList(page, queryWrapper); } } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java
@@ -1,22 +1,31 @@ package org.jeecg.modules.tms.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; 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.convert.PreparationOrderConvert; import org.jeecg.modules.tms.entity.PreparationOrder; import org.jeecg.modules.tms.entity.PreparationOrderDetail; import org.jeecg.modules.tms.entity.*; import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto; import org.jeecg.modules.tms.enums.*; import org.jeecg.modules.tms.mapper.PreparationOrderDetailMapper; import org.jeecg.modules.tms.mapper.PreparationOrderMapper; import org.jeecg.modules.tms.service.IPreparationOrderDetailService; import org.jeecg.modules.tms.service.IPreparationOrderService; import org.jeecg.modules.tms.service.*; 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.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * @Description: åå ·åå¤å @@ -33,6 +42,18 @@ private PreparationOrderDetailMapper preparationOrderDetailMapper; @Autowired private IPreparationOrderDetailService preparationOrderDetailService; @Autowired private IToolLedgerService toolLedgerService; @Autowired private IToolLedgerDetailService toolLedgerDetailService; @Autowired private IOutboundOrderService outboundOrderService; @Autowired private IOutboundDetailService outboundDetailService; @Autowired private ISysBusinessCodeRuleService businessCodeRuleService; @Autowired private IBaseToolsService baseToolsService; @Override @Transactional(rollbackFor = Exception.class) @@ -66,4 +87,147 @@ preparationOrderDetailService.saveBatch(detailUpdateList); } @Override @Transactional(rollbackFor = Exception.class) public List<String> convertToOutboundOrder(List<String> preparationOrderIds) { List<String> resultMessage = CollectionUtil.newArrayList(); List<PreparationOrder> preparationOrderList = listByIds(preparationOrderIds); //æ ¡éªåå¤åæç»ä¸çæ°é for (PreparationOrder preparationOrder : preparationOrderList) { if (PreparationOrderStatus.PENDING_AUDIT.getValue().equals(preparationOrder.getOrderStatus())) { resultMessage.add("åå¤åã" + preparationOrder.getPreparationOrderNum() + "ãæªå®¡æ ¸ï¼æ æ³è½¬åºåºç³è¯·ï¼"); continue; } if (PreparationOrderStatus.CONVERT.getValue().equals(preparationOrder.getOrderStatus())) { resultMessage.add("åå¤åã" + preparationOrder.getPreparationOrderNum() + "ãå·²ç»è½¬åºï¼è¯·å¿éå¤æäº¤ï¼"); continue; } List<PreparationOrderDetail> preparationOrderDetailList = preparationOrderDetailService.list(new LambdaQueryWrapper<PreparationOrderDetail>() .eq(PreparationOrderDetail::getPreparationOrderId, preparationOrder.getId())); Map<String, BigDecimal> preparationOrderToolCodeMap = preparationOrderDetailList.stream().collect(Collectors.toMap(PreparationOrderDetail::getToolCode, PreparationOrderDetail::getOutboundQuantity, (k1, k2) -> k1)); List<ToolLedgerDetail> toolLedgerDetailList = toolLedgerDetailService.list(new LambdaQueryWrapper<ToolLedgerDetail>() .in(ToolLedgerDetail::getToolCode, preparationOrderToolCodeMap.keySet()) .eq(ToolLedgerDetail::getQuantity, BigDecimal.ONE) .eq(ToolLedgerDetail::getStatus, ToolCirculationStatus.IN_STOCK.getValue())); Map<String, List<ToolLedgerDetail>> ledgerDetailToolCodeMap = toolLedgerDetailList.stream().collect(Collectors.groupingBy(ToolLedgerDetail::getToolCode)); List<OutboundDetail> outboundDetailList = CollectionUtil.newArrayList(); for (PreparationOrderDetail preparationOrderDetail : preparationOrderDetailList) { String toolCode = preparationOrderDetail.getToolCode(); BigDecimal needQuantity = preparationOrderDetail.getOutboundQuantity(); List<ToolLedgerDetail> toolLedgerDetails = ledgerDetailToolCodeMap.get(toolCode); BigDecimal stockQuantity = Optional.ofNullable(toolLedgerDetails).orElse(Collections.emptyList()).stream() .map(ToolLedgerDetail::getQuantity) .reduce(BigDecimal.ZERO, BigDecimal::add); if (CollectionUtil.isEmpty(toolLedgerDetails) || stockQuantity.compareTo(needQuantity) < 0) { BaseTools tools = baseToolsService.getById(toolCode); resultMessage.add("åå¤åã" + preparationOrder.getPreparationOrderNum() +"ãä¸ï¼ç¼ç 为ã" + tools.getToolCode() + "ãçå·¥å ·ï¼åºåä¸è¶³ï¼è½¬åºåºç³è¯·å失败ï¼"); break; } else { //ä»åºåæç»ä¸ååºéè¦çæ°éï¼æå®å°æ List<ToolLedgerDetail> selectedTools = toolLedgerDetails.subList(0, needQuantity.intValue()); //çæç³è¯·åæç» selectedTools.forEach(item->{ OutboundDetail detail = new OutboundDetail() .setToolCode(item.getToolCode()) .setToolId(item.getToolId()) .setOutboundQuantity(item.getQuantity()) .setStorageLocation(item.getWarehouseId()) .setOutboundLocation(item.getPositionCode()) .setStatus(OutBoundStatusEnum.NOT_OUTBOUND.getValue()) .setCreateBy(Objects.requireNonNull(getCurrentUser()).getUsername()) .setCreateTime(new Date()); outboundDetailList.add(detail); }); } } BigDecimal totalOutboundQuantity = preparationOrderDetailList.stream() .map(detail -> Optional.ofNullable(detail.getOutboundQuantity()).orElse(BigDecimal.ZERO)) .reduce(BigDecimal.ZERO, BigDecimal::add); if (outboundDetailList.size() == totalOutboundQuantity.intValue()) { //æå®å°æçæ°éä¸éæ±æ°éä¸è´ï¼æ»¡è¶³è½¬åºåºç³è¯·åçæ¡ä»¶ï¼çæåºåºç³è¯·å OutboundOrder order = new OutboundOrder() .setOutNum(businessCodeRuleService.generateBusinessCodeSeq("outBoundOrder")) .setOutStorehouseType(OutStorehouseType.PREPARATION_OUTBOUND.getValue()) .setHandler(Objects.requireNonNull(getCurrentUser()).getId()) .setReviewer(Objects.requireNonNull(getCurrentUser()).getUsername()) .setOrderStatus(OutBillStatus.DRAFT.getValue()) .setSubjectMatter("åå ·åå¤åè½¬å ¥") .setPreparationOrderId(preparationOrder.getId()) .setPartDrawingNo(preparationOrder.getPartDrawingNo()) .setPartName(preparationOrder.getPartName()) .setPartMaterial(preparationOrder.getPartMaterial()) .setProductionProcessesNo(preparationOrder.getProductionProcessesNo()) .setBatchCode(preparationOrder.getBatchCode()) .setMachiningCount(preparationOrder.getMachiningCount()) .setEquipmentCode(preparationOrder.getEquipmentCode()) .setNcName(preparationOrder.getNcName()) .setCreateBy(Objects.requireNonNull(getCurrentUser()).getUsername()) .setCreateTime(new Date()); outboundOrderService.save(order); outboundDetailList.forEach(item -> item.setOutStorehouseId(order.getId())); outboundDetailService.saveBatch(outboundDetailList); //éå®åºåå°è´¦æç»åºå LambdaQueryWrapper<ToolLedgerDetail> queryWrapper = new LambdaQueryWrapper<>(); String codeIdString = outboundDetailList.stream() .map(detail -> "'" + detail.getToolCode() + ":" + detail.getToolId() + "'") .collect(Collectors.joining(",")); String sql = "(tool_code + ':' + tool_id) IN (" + codeIdString + ")"; queryWrapper.apply(sql); toolLedgerDetailService.update(new ToolLedgerDetail().setQuantity(BigDecimal.ZERO), queryWrapper); //éå®åºåå°è´¦ä¸»è¡¨ List<ToolLedger> toolLedgerList = toolLedgerService.list(new LambdaQueryWrapper<ToolLedger>() .in(ToolLedger::getToolId, preparationOrderToolCodeMap.keySet())); toolLedgerList.forEach(item -> { BigDecimal outboundQuantity = preparationOrderToolCodeMap.getOrDefault(item.getToolId(), BigDecimal.ZERO); item.setAvailableCount(Optional.ofNullable(item.getAvailableCount()).orElse(BigDecimal.ZERO).subtract(outboundQuantity)); }); toolLedgerService.updateBatchById(toolLedgerList); //æ´æ°åå¤åç¶æ updateById(new PreparationOrder() .setId(preparationOrder.getId()) .setOutboundTime(new Date()) .setOrderStatus(PreparationOrderStatus.CONVERT.getValue()));//3.已转åºåºç³è¯· resultMessage.add("åå¤åã" + preparationOrder.getPreparationOrderNum() + "ã转åºåºç³è¯·åæåï¼"); } } return resultMessage; } @Override public IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, Map<String, String[]> parameterMap) { QueryWrapper<PreparationOrder> queryWrapper = Wrappers.query(); String[] preparationOrderNums = parameterMap.get("preparationOrderNum"); if (preparationOrderNums != null && preparationOrderNums.length > 0) { queryWrapper.like("t.preparation_order_num", preparationOrderNums[0]); } String[] orderStatuses = parameterMap.get("orderStatus"); if (orderStatuses != null && orderStatuses.length > 0) { queryWrapper.eq("t.order_status", orderStatuses[0]); } String[] beginTimes = parameterMap.get("beginTime"); if (beginTimes != null && beginTimes.length > 0) { queryWrapper.ge("t.create_time", beginTimes[0]); } String[] endTimes = parameterMap.get("endTime"); if (endTimes != null && endTimes.length > 0) { queryWrapper.le("t.create_time", endTimes[0]); } queryWrapper.orderByAsc("t.create_time"); return this.baseMapper.queryPageList(page, queryWrapper); } 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; } }