From 7bd615cbbdc9f417c46a2c71052998c86733e385 Mon Sep 17 00:00:00 2001 From: 10002327 Date: Tue, 5 Nov 2024 18:27:43 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=91=86=E6=BB=9E=E5=BA=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/material/MaterialDeadStockApi.java | 66 ++++++ .../api/user/material/MaterialMainApi.java | 1 + .../material/config/MaterialMesConfig.java | 80 +++++++ .../constant/MaterialDeadStockTypeEnum.java | 16 ++ .../master/MaterialDeadStockMapper.java | 18 ++ .../material/mapper/sop/SopMapper.java | 2 + .../pojo/entity/MaterialDeadStockEntity.java | 130 ++++++++++++ .../product/material/pojo/sop/SopStockVo.java | 49 +++++ .../material/pojo/vo/MaterialDeadStockVo.java | 43 ++++ .../material/pojo/vo/MaterialOrderPlanVo.java | 51 +++++ .../service/MaterialDeadStockService.java | 197 ++++++++++++++++++ .../src/main/resources/bootstrap.properties | 3 + .../mapper/master/MaterialDeadStockMapper.xml | 35 ++++ .../main/resources/mapper/sop/SopMapper.xml | 1 - 14 files changed, 691 insertions(+), 1 deletion(-) create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialDeadStockApi.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/constant/MaterialDeadStockTypeEnum.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialDeadStockMapper.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/sop/SopStockVo.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialDeadStockVo.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialOrderPlanVo.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java create mode 100644 nflg_project_dev/material/src/main/resources/mapper/master/MaterialDeadStockMapper.xml diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialDeadStockApi.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialDeadStockApi.java new file mode 100644 index 00000000..0ac4120c --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialDeadStockApi.java @@ -0,0 +1,66 @@ +package com.nflg.product.material.api.user.material; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.nflg.product.base.core.api.BaseApi; +import com.nflg.product.material.pojo.entity.MaterialDeadStockEntity; +import com.nflg.product.material.pojo.sop.SopStockVo; +import com.nflg.product.material.pojo.vo.MaterialAttrValueVO; +import com.nflg.product.material.pojo.vo.MaterialDeadStockVo; +import com.nflg.product.material.pojo.vo.MaterialOrderPlanVo; +import com.nflg.product.material.service.MaterialDeadStockService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import nflg.product.common.vo.ResultVO; +import org.jetbrains.annotations.NotNull; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.sql.Wrapper; +import java.util.List; +import java.util.Map; + +/** + * packageName com.nflg.product.material.api.user.material + * + * @author luohj + * @className MaterialDeadStockApi + * @date 2024/11/4 0004 + * @description TODO + */ +@Api(tags = "呆滞库存记录") +@RestController +@RequestMapping("materialDeadStock") +public class MaterialDeadStockApi extends BaseApi { + + @Resource + private MaterialDeadStockService materialDeadStockService; + + @GetMapping("listByType") + @ApiOperation("呆滞库存记录集合") + public ResultVO> listByType(@RequestParam("type") Integer type) { + List deadStockEntityList = materialDeadStockService.list(Wrappers.lambdaQuery() + .eq(MaterialDeadStockEntity::getType,type)); + return ResultVO.success(Convert.toList(MaterialDeadStockVo.class,deadStockEntityList)); + } + + @GetMapping("querySopStock") + @ApiOperation("SAP呆滞库存") + public ResultVO>> querySopStock(@RequestParam("type") Integer type + , @RequestParam(value = "orderBy",required = false) Integer orderBy) { + return ResultVO.success(materialDeadStockService.querySopStock(type,orderBy)); + } + + @GetMapping("orderPlanList") + @ApiOperation("MES订单计划接口") + public ResultVO> orderPlanList() { + return ResultVO.success(materialDeadStockService.orderPlanList()); + } + + @PostMapping("saveDeadStock") + @ApiOperation("保存呆滞库存记录") + public ResultVO saveDeadStock(@RequestBody List deadStockList){ + return ResultVO.success(materialDeadStockService.saveDeadStock(deadStockList)); + } + +} \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialMainApi.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialMainApi.java index 3629c974..308d7aaa 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialMainApi.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialMainApi.java @@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.TypeReference; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.fasterxml.jackson.annotation.JsonFormat; import com.google.common.collect.ImmutableMap; import com.nflg.product.base.core.api.BaseApi; import com.nflg.product.base.core.conmon.util.SessionUtil; diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java new file mode 100644 index 00000000..7b025f44 --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java @@ -0,0 +1,80 @@ +package com.nflg.product.material.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * packageName com.nflg.product.material.config + * + * @author luohj + * @className MaterialHomeBiConfig + * @date 2024/8/13 0013 + * @description MES相关配置 + */ + +@Component +@Data +@RefreshScope +@ConfigurationProperties(prefix = "material.mes") +public class MaterialMesConfig { + + /** + * MES服务地址 + */ + private String domain; + + /** + * MES计划订单地址 + */ + private String orderPlanListUrl; + + /** + * 呆滞天数 + */ + private Integer deadDays; + + /** + * 外购件库位 + */ + private String purchaseLgort; + + /** + * 金工件库位 + */ + private String metalLgort; + + /** + * 售后库位 + */ + private String afterSalesLgort; + + /** + * 移动破库位 + */ + private String ydpLgort; + + /** + * 事业部库位 + */ + private String deptLgort; + + /** + * 半成品库位库位 + */ + private String semiFinishedLgort; + + /** + * 成品库位 + */ + private String finishedLgort; + + /** + * 采购组负责人RTX通知 + */ + private List> purchaseNoticeList; +} \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/constant/MaterialDeadStockTypeEnum.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/constant/MaterialDeadStockTypeEnum.java new file mode 100644 index 00000000..1339ab05 --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/constant/MaterialDeadStockTypeEnum.java @@ -0,0 +1,16 @@ +package com.nflg.product.material.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MaterialDeadStockTypeEnum { + STOCK(1,"物料仓库"), + DEPT(2,"事业部/技术研发仓库"), + ALL(3,"全局"), + PRODUCT(4,"半成品库和成品库"); + + private final Integer code; + private final String msg; +} diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialDeadStockMapper.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialDeadStockMapper.java new file mode 100644 index 00000000..f3d96ae4 --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialDeadStockMapper.java @@ -0,0 +1,18 @@ +package com.nflg.product.material.mapper.master; + +import com.nflg.product.material.pojo.entity.MaterialDeadStockEntity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author 10002327 +* @description 针对表【t_material_dead_stock(呆滞库存记录)】的数据库操作Mapper +* @createDate 2024-11-04 16:54:07 +* @Entity com.nflg.product.material.pojo.entity.MaterialDeadStockEntity +*/ +public interface MaterialDeadStockMapper extends BaseMapper { + +} + + + + diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/sop/SopMapper.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/sop/SopMapper.java index 6af29b65..2500bbb9 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/sop/SopMapper.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/sop/SopMapper.java @@ -2,7 +2,9 @@ package com.nflg.product.material.mapper.sop; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.nflg.product.material.pojo.sop.SopMaterialInfo; +import com.nflg.product.material.pojo.sop.SopStockVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java new file mode 100644 index 00000000..84d90b50 --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java @@ -0,0 +1,130 @@ +package com.nflg.product.material.pojo.entity; + +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 java.io.Serializable; +import java.time.LocalDateTime; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 呆滞库存记录 + * @TableName t_material_dead_stock + */ +@TableName(value ="t_material_dead_stock") +@Data +public class MaterialDeadStockEntity implements Serializable { + /** + * 行ID + */ + @TableId(value = "row_id", type = IdType.ASSIGN_ID) + private Long rowId; + + /** + * 工厂 + */ + @TableField(value = "werks") + private String werks; + + /** + * 库存地点 + */ + @TableField(value = "lgort") + private String lgort; + + /** + * 物料号 + */ + @TableField(value = "matnr") + private String matnr; + + /** + * 呆滞原因 + */ + @TableField(value = "dead_reason") + private String deadReason; + + /** + * 呆滞处理情况 + */ + @TableField(value = "handle_result") + private String handleResult; + + /** + * 事业部 + */ + @TableField(value = "dept_name") + private String deptName; + + /** + * 类型:1物料仓库、2事业部/技术研发仓库、3全局、4半成品库和成品库 + */ + @TableField(value = "type") + private Integer type; + + /** + * 客户名称 + */ + @TableField(value = "customer_name") + private String customerName; + + /** + * 工厂 + */ + @TableField(value = "order_plan_id") + private String orderPlanId; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 备注 + */ + @TableField(value = "ekgrp") + private String ekgrp; + + /** + * 采购维护日期 + */ + @TableField(value = "purchase_maintain_date") + private LocalDateTime purchaseMaintainDate; + + /** + * 呆滞处理结果日期 + */ + @TableField(value = "handle_result_date") + private LocalDateTime handleResultDate; + + /** + * 创建人编码 + */ + @TableField(value = "created_by") + private String createdBy; + + /** + * 创建时间 + */ + @TableField(value = "created_time") + private LocalDateTime createdTime; + + /** + * 修改人编码 + */ + @TableField(value = "update_by") + private String updateBy; + + /** + * 修改时间 + */ + @TableField(value = "update_time") + private LocalDateTime updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/sop/SopStockVo.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/sop/SopStockVo.java new file mode 100644 index 00000000..9fac99fc --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/sop/SopStockVo.java @@ -0,0 +1,49 @@ +package com.nflg.product.material.pojo.sop; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * packageName com.nflg.product.material.pojo.sop + * + * @author luohj + * @className SopStockVo + * @date 2024/11/4 0004 + * @description sap呆滞库存信息 + */ +@Data +public class SopStockVo implements Serializable { + + @ApiModelProperty(value = "物料号") + private String matnr; + + @ApiModelProperty(value = "物料描述") + private String txtlg; + + @ApiModelProperty(value = "库存地点") + private String lgort; + + @ApiModelProperty(value = "工厂") + private String werks; + + @ApiModelProperty(value = "单价") + private BigDecimal dj; + + @ApiModelProperty(value = "呆滞数量") + private BigDecimal labst; + + @ApiModelProperty(value = "呆滞金额") + private BigDecimal dzje; + + @ApiModelProperty(value = "呆滞天数") + private BigDecimal dzts; + + @ApiModelProperty(value = "采购组") + private String ekgrp; + + @ApiModelProperty(value = "最后入库日期") + private String zhrkrq; +} \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialDeadStockVo.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialDeadStockVo.java new file mode 100644 index 00000000..446167bd --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialDeadStockVo.java @@ -0,0 +1,43 @@ +package com.nflg.product.material.pojo.vo; + +import com.nflg.product.material.pojo.sop.SopStockVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * packageName com.nflg.product.material.pojo.sop + * + * @author luohj + * @className SopStockVo + * @date 2024/11/4 0004 + * @description sap呆滞库存信息 + */ +@Data +public class MaterialDeadStockVo implements Serializable { + + @ApiModelProperty(value = "rowId") + private Long rowId; + + @ApiModelProperty(value = "事业部") + private String deptName; + + @ApiModelProperty(value = "呆滞原因") + private String deadReason; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "客户名称") + private String customerName; + + @ApiModelProperty(value = "呆滞处理结果") + private String handleResult; + + @ApiModelProperty(value = "呆滞处理日期") + private String handleResultDate; + + @ApiModelProperty(value = "计划订单id") + private String orderPlanId; +} \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialOrderPlanVo.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialOrderPlanVo.java new file mode 100644 index 00000000..b94d4a68 --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialOrderPlanVo.java @@ -0,0 +1,51 @@ +package com.nflg.product.material.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * packageName com.nflg.product.material.pojo.sop + * + * @author luohj + * @className SopStockVo + * @date 2024/11/4 0004 + * @description MES订单计划信息 + */ +@Data +public class MaterialOrderPlanVo implements Serializable { + + @ApiModelProperty(value = "订单计划id") + private String id; + + @ApiModelProperty(value = "事业部") + private String contractNo; + + @ApiModelProperty(value = "SAP订单号") + private String sapOrderNo; + + @ApiModelProperty(value = "机型") + private String machineType; + + @ApiModelProperty(value = "机台编号") + private String machineNo; + + @ApiModelProperty(value = "客户名称简称") + private String customerName; + + @ApiModelProperty(value = "物料号") + private String materialNo; + + @ApiModelProperty(value = "图号") + private String chartNo; + + @ApiModelProperty(value = "品名 产品线/事业部 对应CRM的产品二级目录") + private String typeName; + + @ApiModelProperty(value = "订单编号") + private String orderNo; + + @ApiModelProperty(value = "订单状态") + private String orderStatus; +} \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java new file mode 100644 index 00000000..dfcaefec --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java @@ -0,0 +1,197 @@ +package com.nflg.product.material.service; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.nflg.product.material.config.MaterialMesConfig; +import com.nflg.product.material.mapper.master.MaterialDeadStockMapper; +import com.nflg.product.material.pojo.entity.MaterialDeadStockEntity; +import com.nflg.product.material.pojo.sop.SopStockVo; +import com.nflg.product.material.pojo.vo.MaterialOrderPlanVo; +import com.nflg.product.material.util.HttpUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.*; +import java.time.LocalDateTime; +import java.util.*; +import java.util.Date; +import java.util.stream.Collectors; + +/** +* @author 10002327 +* @description 针对表【t_material_dead_stock(呆滞库存记录)】的数据库操作Service +* @createDate 2024-11-04 16:54:07 +*/ +@Service +@Slf4j +public class MaterialDeadStockService extends ServiceImpl { + + @Resource + @Qualifier("sopConnection") + private Connection sopConnection; + + @Resource + private MaterialMesConfig materialMesConfig; + + @Value("${spring.profiles.active}") + private String profiles; + + @Transactional(rollbackFor = Exception.class) + public Boolean saveDeadStock(@RequestBody List deadStockList){ + //采购组通知rtx + Set purchaseSet = new HashSet<>(); + deadStockList.forEach(deadStock -> { + if(deadStock.getRowId() == null){ + // 如果有填写呆滞处理结果,则记录处理时间 + if(StrUtil.isNotBlank(deadStock.getHandleResult())){ + deadStock.setHandleResultDate(LocalDateTime.now()); + } + if(StrUtil.isNotBlank(deadStock.getEkgrp())){ + purchaseSet.add(deadStock.getEkgrp()); + } + this.save(deadStock); + }else{ + //更新 + // 如果呆滞处理结果日期为空 && 有填写呆滞处理结果,则记录处理时间 + if(deadStock.getHandleResultDate() == null && StrUtil.isNotBlank(deadStock.getHandleResult())){ + deadStock.setHandleResultDate(LocalDateTime.now()); + } + this.updateById(deadStock); + } + }); + //通知rtx + if(!purchaseSet.isEmpty()){ + HttpUtils httpUtils = new HttpUtils(); + String title = "呆滞物料提醒"; + String msg = "有新增呆滞物料,请及时查看!"; + httpUtils.rtxMessage(profiles,title,msg,purchaseSet.stream().collect(Collectors.joining(","))); + } + return true; + } + + public List orderPlanList(){ + HttpUtils httpUtils = new HttpUtils(); + List reList = Lists.newArrayList(); + try { + String res = httpUtils.doGet(String.format("%s%s",materialMesConfig.getDomain(),materialMesConfig.getOrderPlanListUrl())); + reList = JSON.parseArray(res, MaterialOrderPlanVo.class); + } catch (IOException e) { + e.printStackTrace(); + } + return reList; + } + + /** + * SAP呆滞库存 + * @param type 类型 + * @param orderBy 排序:1 DZTS,2 DZJE + * @return + */ + public Map> querySopStock(Integer type,Integer orderBy){ + String order = Objects.equals(orderBy,1)?"DZTS":"DZJE"; + Map> resMap = Maps.newHashMap(); + // 呆滞仓库-列表数据集 + Map> reMap =Maps.newHashMap(); + switch (type){ + case 1: + reMap.put("purchaseLgort", Arrays.asList(materialMesConfig.getPurchaseLgort().split(","))); + reMap.put("metalLgort", Arrays.asList(materialMesConfig.getMetalLgort().split(","))); + reMap.put("afterSalesLgort", Arrays.asList(materialMesConfig.getAfterSalesLgort().split(","))); + reMap.put("ydpLgort", Arrays.asList(materialMesConfig.getYdpLgort().split(","))); + break; + case 2: + reMap.put("deptLgort", Arrays.asList(materialMesConfig.getDeptLgort().split(","))); + break; + case 3: + reMap.put("purchaseLgort", Arrays.asList(materialMesConfig.getPurchaseLgort().split(","))); + reMap.put("metalLgort", Arrays.asList(materialMesConfig.getMetalLgort().split(","))); + reMap.put("afterSalesLgort", Arrays.asList(materialMesConfig.getAfterSalesLgort().split(","))); + reMap.put("ydpLgort", Arrays.asList(materialMesConfig.getYdpLgort().split(","))); + reMap.put("deptLgort", Arrays.asList(materialMesConfig.getDeptLgort().split(","))); + break; + case 4: + reMap.put("semiFinishedLgort", Arrays.asList(materialMesConfig.getSemiFinishedLgort().split(","))); + reMap.put("finishedLgort", Arrays.asList(materialMesConfig.getFinishedLgort().split(","))); + break; + default: + ; + } + String budatDate = DateUtil.format(DateUtil.offsetDay(new Date(),-materialMesConfig.getDeadDays()),"yyyyMMdd"); + reMap.forEach((k,v) -> { + String werks = Objects.equals("afterSalesLgort",k)?"1030":"1010"; + List stockVoList = stockList(werks,v,budatDate,order); + resMap.put(k,stockVoList); + }); + + return resMap; + } + + private List stockList(String werks,List lgortList,String budatDate,String orderBy){ + List rList = Lists.newArrayList(); + String lb = " and t1.lgort in ("; + String we = ""; + for (String str:lgortList) { + we += "'"+str+"',"; + } + we = we.substring(0,we.length() -1 ); + lb = lb + we + ") "; + // 20200414 add 物料号不以71开头,且不为2190000290、2100030260 + String sql = "select t1.werks,t1.lgort,LTRIM(t1.matnr,'0')matnr,t1.labst,t2.txtlg,t3.budat,current_date,days_between(t3.budat,current_date) dzts,\n" + + "(case when peinh <> 0 and vprsv = 'V' then t4.verpr / t4.peinh * t1.labst else t4.stprs / t4.peinh * t1.labst end)dzje," + + "(case when peinh <> 0 and vprsv = 'V' then t4.verpr / t4.peinh else t4.stprs / t4.peinh end)dj,t5.EKGRP,t6.zhrkrq "+ + "from SAPABAP1.\"/BIC/AZMM_T00132\" as t1\n" + + "inner join \"SAPABAP1\".\"/BI0/TMATERIAL\" t2 on t1.matnr = t2.material and t2.langu = '1'\n" + + "inner join (select matnr,max(budat) as budat from SAPABAP1.\"/BIC/AZMM_E00052\" \n" + + "\t\t\twhere matnr != '' and werks = ? " + + "\t\t\tgroup by matnr having max(budat) <= ? ) t3 on t1.matnr = t3.matnr\n" + + "inner join (select distinct bwkey,matnr,verpr,peinh,stprs,vprsv from \"STG_ECC\".\"MBEW\" ) t4 on t1.werks = t4.bwkey and t1.matnr = t4.matnr " + + "left join \"STG_ECC\".\"MARC\" as t5 on t1.werks = t5.werks and t1.matnr = t5.matnr "+ + "left join (select matnr,max( budat ) zhrkrq from SAPABAP1.\"/BIC/AZMM_E00052\" where shkzg = 'S' and BWART in ('101','105') and werks=? group by matnr ) as t6 on t1.matnr = t6.matnr " + + "where t1.labst > 0 and LTRIM(t1.matnr,'0') not like '71%' and LTRIM(t1.matnr,'0') not in ('2190000290','2100030260') and t1.werks = ? " + lb; + if(StrUtil.isNotBlank(orderBy)){ + sql += " order by "+orderBy+" desc "; + } + + try { + PreparedStatement pstmt = sopConnection.prepareStatement(sql); + pstmt.setObject(1,werks); + pstmt.setObject(2,budatDate); + pstmt.setObject(3,werks); + pstmt.setObject(4,werks); + ResultSet resultSet = pstmt.executeQuery(); + List> list = resultSetToList(resultSet); + rList = JSON.parseArray(JSON.toJSONString(list),SopStockVo.class); + //rList = Convert.toList(SopStockVo.class,list); + } catch (Exception e) { + log.error("呆滞库存获取失败:{}",e.getMessage() ); + } + return rList; + } + + /** + * ResultSet转List + */ + public List> resultSetToList(ResultSet resultSet) throws SQLException { + List> list = new ArrayList>(); + ResultSetMetaData md = resultSet.getMetaData(); //获得结果集结构信息,元数据 + int columnCount = md.getColumnCount(); //获得列数 + while (resultSet.next()) { + Map rowData = new HashMap(); + for (int i = 1; i <= columnCount; i++) { + rowData.put(md.getColumnName(i), resultSet.getObject(i)); + } + list.add(rowData); + } + return list; + } +} diff --git a/nflg_project_dev/material/src/main/resources/bootstrap.properties b/nflg_project_dev/material/src/main/resources/bootstrap.properties index b84cb537..c75eb7a7 100644 --- a/nflg_project_dev/material/src/main/resources/bootstrap.properties +++ b/nflg_project_dev/material/src/main/resources/bootstrap.properties @@ -19,6 +19,9 @@ spring.cloud.nacos.config.extension-configs[0].refresh=true spring.cloud.nacos.config.extension-configs[1].data-id=mysql-${spring.profiles.active}.properties spring.cloud.nacos.config.extension-configs[1].group=${spring.profiles.active} spring.cloud.nacos.config.extension-configs[1].refresh=true +spring.cloud.nacos.config.extension-configs[2].data-id=material-conf-${spring.profiles.active}.yaml +spring.cloud.nacos.config.extension-configs[2].group=${spring.profiles.active} +spring.cloud.nacos.config.extension-configs[2].refresh=true #discovery spring.cloud.nacos.discovery.server-addr=${nacos.server-addr} diff --git a/nflg_project_dev/material/src/main/resources/mapper/master/MaterialDeadStockMapper.xml b/nflg_project_dev/material/src/main/resources/mapper/master/MaterialDeadStockMapper.xml new file mode 100644 index 00000000..a9972c7a --- /dev/null +++ b/nflg_project_dev/material/src/main/resources/mapper/master/MaterialDeadStockMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + row_id,werks,lgort, + matnr,dead_reason,handle_result, + dept_name,type,customer_name, + order_plan_id,remark,purchase_maintain_date, + handle_result_date,created_by,created_time, + update_by,update_time + + diff --git a/nflg_project_dev/material/src/main/resources/mapper/sop/SopMapper.xml b/nflg_project_dev/material/src/main/resources/mapper/sop/SopMapper.xml index 3cb08f5d..c9d5be9e 100644 --- a/nflg_project_dev/material/src/main/resources/mapper/sop/SopMapper.xml +++ b/nflg_project_dev/material/src/main/resources/mapper/sop/SopMapper.xml @@ -2,5 +2,4 @@ - From 693a3da6af5c92a497dcd53e4a8442a53ee86637 Mon Sep 17 00:00:00 2001 From: 10002327 Date: Wed, 6 Nov 2024 14:12:46 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=91=86=E6=BB=9E=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=8F=90=E9=86=92rtx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/material/config/MaterialMesConfig.java | 14 +++++++++++++- .../material/service/MaterialDeadStockService.java | 4 +++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java index 7b025f44..5e19705a 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java @@ -1,5 +1,7 @@ package com.nflg.product.material.config; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; @@ -76,5 +78,15 @@ public class MaterialMesConfig { /** * 采购组负责人RTX通知 */ - private List> purchaseNoticeList; + private List purchaseNoticeList = Lists.newArrayList(); + + @Data + public class NoticeRtx{ + + @ApiModelProperty(value = "ekgrp") + private String ekgrp; + + @ApiModelProperty(value = "rtx账号") + private String rtx; + } } \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java index dfcaefec..79b04b24 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java @@ -74,7 +74,9 @@ public class MaterialDeadStockService extends ServiceImpl purchaseSet.contains(pur.getEkgrp())) + .map(MaterialMesConfig.NoticeRtx::getRtx).collect(Collectors.joining(",")); + httpUtils.rtxMessage(profiles,title,msg,receiver); } return true; } From 890c1a83520617c3d66f343594a26306d916a1e2 Mon Sep 17 00:00:00 2001 From: 10002327 Date: Thu, 7 Nov 2024 11:17:37 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E9=87=87=E8=B4=AD=E7=BB=84=E8=B4=9F?= =?UTF-8?q?=E8=B4=A3=E4=BA=BARTX=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../material/config/MaterialMesConfig.java | 12 ++------- .../material/pojo/vo/MaterialNoticeRtx.java | 25 +++++++++++++++++++ .../service/MaterialDeadStockService.java | 3 ++- 3 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialNoticeRtx.java diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java index 5e19705a..a3969780 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/MaterialMesConfig.java @@ -1,6 +1,7 @@ package com.nflg.product.material.config; import com.google.common.collect.Lists; +import com.nflg.product.material.pojo.vo.MaterialNoticeRtx; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -78,15 +79,6 @@ public class MaterialMesConfig { /** * 采购组负责人RTX通知 */ - private List purchaseNoticeList = Lists.newArrayList(); + private List purchaseNoticeList; - @Data - public class NoticeRtx{ - - @ApiModelProperty(value = "ekgrp") - private String ekgrp; - - @ApiModelProperty(value = "rtx账号") - private String rtx; - } } \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialNoticeRtx.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialNoticeRtx.java new file mode 100644 index 00000000..0af48b4a --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialNoticeRtx.java @@ -0,0 +1,25 @@ +package com.nflg.product.material.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * packageName com.nflg.product.material.pojo.vo + * + * @author luohj + * @className MaterialNoticeRtx + * @date 2024/11/7 0007 + * @description TODO + */ +@Data +@Accessors(chain = true) +public class MaterialNoticeRtx { + + @ApiModelProperty(value = "ekgrp") + private String ekgrp; + + @ApiModelProperty(value = "rtx账号") + private String rtx; + +} \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java index 79b04b24..14e73c4d 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java @@ -10,6 +10,7 @@ import com.nflg.product.material.config.MaterialMesConfig; import com.nflg.product.material.mapper.master.MaterialDeadStockMapper; import com.nflg.product.material.pojo.entity.MaterialDeadStockEntity; import com.nflg.product.material.pojo.sop.SopStockVo; +import com.nflg.product.material.pojo.vo.MaterialNoticeRtx; import com.nflg.product.material.pojo.vo.MaterialOrderPlanVo; import com.nflg.product.material.util.HttpUtils; import lombok.extern.slf4j.Slf4j; @@ -75,7 +76,7 @@ public class MaterialDeadStockService extends ServiceImpl purchaseSet.contains(pur.getEkgrp())) - .map(MaterialMesConfig.NoticeRtx::getRtx).collect(Collectors.joining(",")); + .map(MaterialNoticeRtx::getRtx).collect(Collectors.joining(",")); httpUtils.rtxMessage(profiles,title,msg,receiver); } return true; From b50abe81dd3f9f450dbc72aea9bb6446ddb17b9d Mon Sep 17 00:00:00 2001 From: 10002327 Date: Fri, 8 Nov 2024 11:20:57 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=91=86=E6=BB=9E=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/user/material/MaterialDeadStockApi.java | 2 +- .../pojo/entity/MaterialDeadStockEntity.java | 14 ++++++-------- .../material/pojo/vo/MaterialDeadStockVo.java | 12 ++++++++++++ .../material/service/MaterialDeadStockService.java | 4 ++-- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialDeadStockApi.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialDeadStockApi.java index 0ac4120c..41d59089 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialDeadStockApi.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialDeadStockApi.java @@ -59,7 +59,7 @@ public class MaterialDeadStockApi extends BaseApi { @PostMapping("saveDeadStock") @ApiOperation("保存呆滞库存记录") - public ResultVO saveDeadStock(@RequestBody List deadStockList){ + public ResultVO> saveDeadStock(@RequestBody List deadStockList){ return ResultVO.success(materialDeadStockService.saveDeadStock(deadStockList)); } diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java index 84d90b50..615720c3 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java @@ -1,9 +1,7 @@ package com.nflg.product.material.pojo.entity; -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 com.baomidou.mybatisplus.annotation.*; + import java.io.Serializable; import java.time.LocalDateTime; @@ -104,25 +102,25 @@ public class MaterialDeadStockEntity implements Serializable { /** * 创建人编码 */ - @TableField(value = "created_by") + @TableField(value = "created_by",fill = FieldFill.INSERT) private String createdBy; /** * 创建时间 */ - @TableField(value = "created_time") + @TableField(value = "created_time",fill = FieldFill.INSERT) private LocalDateTime createdTime; /** * 修改人编码 */ - @TableField(value = "update_by") + @TableField(value = "update_by",fill = FieldFill.UPDATE) private String updateBy; /** * 修改时间 */ - @TableField(value = "update_time") + @TableField(value = "update_time",fill = FieldFill.UPDATE) private LocalDateTime updateTime; @TableField(exist = false) diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialDeadStockVo.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialDeadStockVo.java index 446167bd..509f3bd3 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialDeadStockVo.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/vo/MaterialDeadStockVo.java @@ -1,5 +1,6 @@ package com.nflg.product.material.pojo.vo; +import com.baomidou.mybatisplus.annotation.TableField; import com.nflg.product.material.pojo.sop.SopStockVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -20,6 +21,15 @@ public class MaterialDeadStockVo implements Serializable { @ApiModelProperty(value = "rowId") private Long rowId; + @ApiModelProperty(value = "werks") + private String werks; + + @ApiModelProperty(value = "lgort") + private String lgort; + + @ApiModelProperty(value = "matnr") + private String matnr; + @ApiModelProperty(value = "事业部") private String deptName; @@ -40,4 +50,6 @@ public class MaterialDeadStockVo implements Serializable { @ApiModelProperty(value = "计划订单id") private String orderPlanId; + + } \ No newline at end of file diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java index 14e73c4d..c74a8947 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialDeadStockService.java @@ -48,7 +48,7 @@ public class MaterialDeadStockService extends ServiceImpl deadStockList){ + public List saveDeadStock(@RequestBody List deadStockList){ //采购组通知rtx Set purchaseSet = new HashSet<>(); deadStockList.forEach(deadStock -> { @@ -79,7 +79,7 @@ public class MaterialDeadStockService extends ServiceImpl orderPlanList(){ From 4382c4bc97decc8d78b947f6e33838e714897228 Mon Sep 17 00:00:00 2001 From: 10002327 Date: Fri, 8 Nov 2024 13:41:53 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../material/pojo/entity/MaterialDeadStockEntity.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java index 615720c3..c82b1120 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java @@ -114,14 +114,14 @@ public class MaterialDeadStockEntity implements Serializable { /** * 修改人编码 */ - @TableField(value = "update_by",fill = FieldFill.UPDATE) - private String updateBy; + @TableField(value = "updated_by",fill = FieldFill.UPDATE) + private String updatedBy; /** * 修改时间 */ - @TableField(value = "update_time",fill = FieldFill.UPDATE) - private LocalDateTime updateTime; + @TableField(value = "updated_time",fill = FieldFill.UPDATE) + private LocalDateTime updatedTime; @TableField(exist = false) private static final long serialVersionUID = 1L; From 7344fc86a43f89c92d12b5ce0d3e476eb1d2b4b7 Mon Sep 17 00:00:00 2001 From: 10002327 Date: Fri, 8 Nov 2024 13:54:05 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=97=B6=E9=97=B42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/material/pojo/entity/MaterialDeadStockEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java index c82b1120..e9952d16 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialDeadStockEntity.java @@ -114,13 +114,13 @@ public class MaterialDeadStockEntity implements Serializable { /** * 修改人编码 */ - @TableField(value = "updated_by",fill = FieldFill.UPDATE) + @TableField(value = "updated_by",fill = FieldFill.INSERT_UPDATE) private String updatedBy; /** * 修改时间 */ - @TableField(value = "updated_time",fill = FieldFill.UPDATE) + @TableField(value = "updated_time",fill = FieldFill.INSERT_UPDATE) private LocalDateTime updatedTime; @TableField(exist = false)