From df6f3d4ffe6e00ab200f7bd0208fba6dbbbab93c Mon Sep 17 00:00:00 2001 From: 10001195 Date: Thu, 21 Nov 2024 14:07:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E4=B8=AD=E6=96=B0=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=9B=B8=E5=85=B3=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../technology/api/ProcessWorkCenterApi.java | 60 ++++++ .../technology/job/ProcessWorkCenterTask.java | 27 +++ .../master/ProcessWorkCenterMapper.java | 39 ++++ .../pojo/entity/ProcessWorkCenterEntity.java | 122 ++++++++++++ .../technology/pojo/query/BasePageQuery.java | 21 ++ .../pojo/query/ProcessWorkCenterQuery.java | 32 +++ .../pojo/vo/BaseImportExcelDTO.java | 16 ++ .../pojo/vo/ProcessWorkCenterExcelVO.java | 126 ++++++++++++ .../pojo/vo/ProcessWorkCenterVO.java | 101 ++++++++++ .../service/ProcessWorkCenterService.java | 130 ++++++++++++ .../product/technology/util/EecExcelUtil.java | 188 ++++++++++++++++++ .../mapper/master/ProcessWorkCenterDao.xml | 115 +++++++++++ 12 files changed, 977 insertions(+) create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/api/ProcessWorkCenterApi.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/job/ProcessWorkCenterTask.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/mapper/master/ProcessWorkCenterMapper.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/entity/ProcessWorkCenterEntity.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/query/BasePageQuery.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/query/ProcessWorkCenterQuery.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/BaseImportExcelDTO.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/ProcessWorkCenterExcelVO.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/ProcessWorkCenterVO.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/ProcessWorkCenterService.java create mode 100644 nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/util/EecExcelUtil.java create mode 100644 nflg_project_dev/nflg-technology/src/main/resources/mapper/master/ProcessWorkCenterDao.xml diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/api/ProcessWorkCenterApi.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/api/ProcessWorkCenterApi.java new file mode 100644 index 00000000..25e39d27 --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/api/ProcessWorkCenterApi.java @@ -0,0 +1,60 @@ +package com.nflg.product.technology.api; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.product.base.core.api.BaseApi; + +import com.nflg.product.technology.pojo.query.ProcessWorkCenterQuery; +import com.nflg.product.technology.pojo.vo.ProcessWorkCenterExcelVO; +import com.nflg.product.technology.pojo.vo.ProcessWorkCenterVO; +import com.nflg.product.technology.service.ProcessWorkCenterService; +import com.nflg.product.technology.util.EecExcelUtil; +import io.swagger.annotations.ApiOperation; +import nflg.product.common.vo.ResultVO; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +/** + * 工艺管理-工作中心表控制层 + * + * @author makejava + */ +@RestController +@RequestMapping("processWorkCenter") +public class ProcessWorkCenterApi extends BaseApi { + + @Resource + private ProcessWorkCenterService processWorkCenterService; + + /** + * 分页查询所有数据 + * + * @param query Query 查询实体 + * @return 所有数据 + */ + @PostMapping("page") + public ResultVO> selectAll(@RequestBody ProcessWorkCenterQuery query) { + return ResultVO.success(processWorkCenterService.selectPageByCondition(query)); + } + + @PostMapping("export") + @ApiOperation("导出") + public void export(@RequestBody ProcessWorkCenterQuery query, HttpServletResponse response) throws IOException { + List data = processWorkCenterService.selectPageByCondition(query).getRecords(); + EecExcelUtil.export(response, Convert.toList(ProcessWorkCenterExcelVO.class, data), ProcessWorkCenterExcelVO.class, "工作中心"); + } + + /** + * 同步SAP的工作中心数据 + * + */ + @GetMapping("fromSap") + public ResultVO fromSap() { + return processWorkCenterService.fromSap(); + } +} + diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/job/ProcessWorkCenterTask.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/job/ProcessWorkCenterTask.java new file mode 100644 index 00000000..5be507b2 --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/job/ProcessWorkCenterTask.java @@ -0,0 +1,27 @@ +package com.nflg.product.technology.job; + +//import com.nflg.product.bomnew.service.ProcessWorkCenterService; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * @decription 工作中心定时任务 + * @Author ljd + * @Date 2024/11/14 + **/ +@Configuration +@EnableScheduling +public class ProcessWorkCenterTask { +/* @Resource + private ProcessWorkCenterService; + + + *//** + * + * + *//* +// @Scheduled(cron = "0 0/10 * * * ?") + public void plmConvertBom() throws Exception { + processWorkCenterService.fromSap(); + }*/ +} diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/mapper/master/ProcessWorkCenterMapper.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/mapper/master/ProcessWorkCenterMapper.java new file mode 100644 index 00000000..524cbd59 --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/mapper/master/ProcessWorkCenterMapper.java @@ -0,0 +1,39 @@ +package com.nflg.product.technology.mapper.master; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.product.technology.pojo.entity.ProcessWorkCenterEntity; +import com.nflg.product.technology.pojo.query.ProcessWorkCenterQuery; +import com.nflg.product.technology.pojo.vo.ProcessWorkCenterVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 工艺管理-工作中心表数据库访问层 + * + * @author makejava + */ +public interface ProcessWorkCenterMapper extends BaseMapper { + + /** + * 批量新增数据(MyBatis原生foreach方法) + * + * @param entities List 实例对象列表 + * @return 影响行数 + */ + int insertBatch(@Param("entities") List entities); + + /** + * 批量新增或按主键更新数据(MyBatis原生foreach方法) + * + * @param entities List 实例对象列表 + * @return 影响行数 + * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参 + */ + int insertOrUpdateBatch(@Param("entities") List entities); + + IPage selectPageByCondition(Page page, @Param("query") ProcessWorkCenterQuery query); +} + diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/entity/ProcessWorkCenterEntity.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/entity/ProcessWorkCenterEntity.java new file mode 100644 index 00000000..86283cfd --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/entity/ProcessWorkCenterEntity.java @@ -0,0 +1,122 @@ +package com.nflg.product.technology.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 lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 工艺管理-工作中心表实体类 + * + * @author makejava + */ +@Data +@Accessors(chain = true) +@TableName(value = "t_process_workcenter") +public class ProcessWorkCenterEntity implements Serializable { + + @TableId(value = "row_id", type = IdType.ASSIGN_ID) + private Long rowId; + + //工厂 + @TableField(value = "factory") + private String factory; + + //工作中心 + @TableField(value = "work_center") + private String workCenter; + + //名称 + @TableField(value = "name") + private String name; + + //工作中心类别 + @TableField(value = "type") + private String type; + + //描述 + @TableField(value = "description") + private String description; + + //负责人 + @TableField(value = "header") + private String header; + + //负责人描述 + @TableField(value = "header_description") + private String headerDescription; + + //用途 + @TableField(value = "usefulness") + private String usefulness; + + //用途描述 + @TableField(value = "usefulness_description") + private String usefulnessDescription; + + //是否反冲:false = 否、true = 是 + @TableField(value = "recoil") + private Boolean recoil; + + //标准值码 + @TableField(value = "standard_code") + private String standardCode; + + //标准值码描述 + @TableField(value = "standard_code_description") + private String standardCodeDescription; + + //标准文本码 + @TableField(value = "standard_text_code") + private String standardTextCode; + + //标准文本码描述 + @TableField(value = "standard_text_code_description") + private String standardTextCodeDescription; + + //加工公式 + @TableField(value = "processing_formula") + private String processingFormula; + + //加工公式描述 + @TableField(value = "processing_formula_description") + private String processingFormulaDescription; + + //成本控制范围 + @TableField(value = "cost_controlling_area") + private String costControllingArea; + + //成本中心 + @TableField(value = "cost_center") + private String costCenter; + + //成本中心描述 + @TableField(value = "cost_center_description") + private String costCenterDescription; + + //开始日期 + @TableField(value = "start_time") + private Date startTime; + + //结束日期 + @TableField(value = "end_time") + private Date endTime; + + @TableField(value = "created_by") + private String createdBy; + + @TableField(value = "created_time") + private Date createdTime; + + @TableField(value = "updated_by") + private String updatedBy; + + @TableField(value = "updated_time") + private Date updatedTime; +} + diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/query/BasePageQuery.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/query/BasePageQuery.java new file mode 100644 index 00000000..1640bc0d --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/query/BasePageQuery.java @@ -0,0 +1,21 @@ +package com.nflg.product.technology.pojo.query; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** +* +* @author 大米 +* @date 2023/11/9 10:12 +*/ +@Data +@Accessors(chain = true) +public class BasePageQuery { + @ApiModelProperty(value = "设置每页显示条数") + private Long pageSize = 20L; + + @ApiModelProperty(value = "当前页") + private Long page = 1L; +} diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/query/ProcessWorkCenterQuery.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/query/ProcessWorkCenterQuery.java new file mode 100644 index 00000000..aa45d738 --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/query/ProcessWorkCenterQuery.java @@ -0,0 +1,32 @@ +package com.nflg.product.technology.pojo.query; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * + */ +@Data +@Accessors(chain = true) +public class ProcessWorkCenterQuery { + + // 工厂 + private String factory; + + //工作中心 + private String workCenters; + + //工作中心 + private List workCenterList; + + private List rowIdList; + + @ApiModelProperty(value = "设置每页显示条数") + private Long pageSize = 20L; + + @ApiModelProperty(value = "当前页") + private Long page = 1L; +} diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/BaseImportExcelDTO.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/BaseImportExcelDTO.java new file mode 100644 index 00000000..6be2bdfb --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/BaseImportExcelDTO.java @@ -0,0 +1,16 @@ +package com.nflg.product.technology.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @decription + * @Author 大米 + * @Date 2022/8/9 15:43 + **/ +@Data +public class BaseImportExcelDTO { + + @ApiModelProperty("行号") + private int rowNum; +} diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/ProcessWorkCenterExcelVO.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/ProcessWorkCenterExcelVO.java new file mode 100644 index 00000000..368b0bab --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/ProcessWorkCenterExcelVO.java @@ -0,0 +1,126 @@ +package com.nflg.product.technology.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.experimental.Accessors; +import org.ttzero.excel.annotation.ExcelColumn; + +import java.util.Date; + +/** + * 工艺管理-工作中心 + * + * @author makejava + */ +@Data +@Accessors(chain = true) +public class ProcessWorkCenterExcelVO extends BaseImportExcelDTO { + +// private Long rowId; + + //工厂 + @ExcelColumn("工厂") + private String factory; + + //工作中心 + @ExcelColumn("工作中心") + private String workCenter; + + //名称 + @ExcelColumn("名称") + private String name; + + //工作中心类别 + @ExcelColumn("工作中心类别") + private String type; + + //描述 + @ExcelColumn("描述") + private String description; + + //负责人 + @ExcelColumn("负责人") + private String header; + + //负责人描述 + @ExcelColumn("负责人描述") + private String headerDescription; + + //用途 + @ExcelColumn("用途") + private String usefulness; + + //用途描述 + @ExcelColumn("用途描述") + private String usefulnessDescription; + + //是否反冲:false = 否、true = 是 + @ExcelColumn("是否反冲") + private Boolean recoil; + + //标准值码 + @ExcelColumn("标准值码") + private String standardCode; + + //标准值码描述 + @ExcelColumn("标准值码描述") + private String standardCodeDescription; + + //标准文本码 + @ExcelColumn("标准文本码") + private String standardTextCode; + + //标准文本码描述 + @ExcelColumn("标准文本码描述") + private String standardTextCodeDescription; + + //加工公式 + @ExcelColumn("加工公式") + private String processingFormula; + + //加工公式描述 + @ExcelColumn("加工公式描述") + private String processingFormulaDescription; + + //成本控制范围 + @ExcelColumn("成本控制范围") + private String costControllingArea; + + //成本中心 + @ExcelColumn("成本中心") + private String costCenter; + + //成本中心描述 + @ExcelColumn("成本中心描述") + private String costCenterDescription; + + //开始日期 + @ExcelColumn("开始日期") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8") + private Date startTime; + + //结束日期 + @ExcelColumn("结束日期") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8") + private Date endTime; + + //创建人 + @ExcelColumn("创建人") + private String createBy; + + //创建时间 + @ExcelColumn("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8") + private Date createTime; + + //更新人 + @ExcelColumn("更新人") + private String updateBy; + + //更新时间 + @ExcelColumn("更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8") + private Date updateTime; + +} + diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/ProcessWorkCenterVO.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/ProcessWorkCenterVO.java new file mode 100644 index 00000000..2c2b6d91 --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/pojo/vo/ProcessWorkCenterVO.java @@ -0,0 +1,101 @@ +package com.nflg.product.technology.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 工艺管理-工作中心 + * + * @author makejava + */ +@Data +@Accessors(chain = true) +public class ProcessWorkCenterVO implements Serializable { + + private Long rowId; + + //工厂 + private String factory; + + //工作中心 + private String workCenter; + + //名称 + private String name; + + //工作中心类别 + private String type; + + //描述 + private String description; + + //负责人 + private String header; + + //负责人描述 + private String headerDescription; + + //用途 + private String usefulness; + + //用途描述 + private String usefulnessDescription; + + //是否反冲:false = 否、true = 是 + private Boolean recoil; + + //标准值码 + private String standardCode; + + //标准值码描述 + private String standardCodeDescription; + + //标准文本码 + private String standardTextCode; + + //标准文本码描述 + private String standardTextCodeDescription; + + //加工公式 + private String processingFormula; + + //加工公式描述 + private String processingFormulaDescription; + + //成本控制范围 + private String costControllingArea; + + //成本中心 + private String costCenter; + + //成本中心描述 + private String costCenterDescription; + + //开始日期 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8") + private Date startTime; + + //结束日期 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8") + private Date endTime; + + //创建人 + private String createBy; + + //创建时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8") + private Date createTime; + + //更新人 + private String updateBy; + + //更新时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT-8") + private Date updateTime; + +} + diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/ProcessWorkCenterService.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/ProcessWorkCenterService.java new file mode 100644 index 00000000..71efb40d --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/service/ProcessWorkCenterService.java @@ -0,0 +1,130 @@ +package com.nflg.product.technology.service; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.product.base.core.conmon.util.SessionUtil; +import com.nflg.product.base.core.exception.NflgBusinessException; +import com.nflg.product.base.core.vo.PageVO; +import com.nflg.product.technology.mapper.master.ProcessWorkCenterMapper; +import com.nflg.product.technology.pojo.dto.sap.SapReqParams; +import com.nflg.product.technology.pojo.dto.sap.SapResult; +import com.nflg.product.technology.pojo.entity.ProcessWorkCenterEntity; +import com.nflg.product.technology.pojo.query.ProcessWorkCenterQuery; +import com.nflg.product.technology.pojo.vo.ProcessWorkCenterVO; +import nflg.product.common.constant.STATE; +import nflg.product.common.vo.ResultVO; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; + +/** + * 工艺管理-工作中心(BomTechnologyWorkCenter)表服务实现类 + * + * @author makejava + */ +@Service +public class ProcessWorkCenterService extends ServiceImpl { + + @Resource + private ProcessWorkCenterMapper processWorkCenterMapper; + + @Resource + SapService sapService; + + public IPage selectPageByCondition(ProcessWorkCenterQuery query) { + if (StringUtils.isNotEmpty(query.getWorkCenters())) { + List workCenterList = Arrays.asList(query.getWorkCenters().split(",")); + query.setWorkCenterList(workCenterList); + } + + //设置分页 + Page pageCondition = new PageVO<>(query.getPage(), query.getPageSize()); + return processWorkCenterMapper.selectPageByCondition(pageCondition, query); + } + + @Transactional(rollbackFor = Exception.class) + public ResultVO fromSap() { + //List list = new ArrayList<>(); + SapReqParams params = new SapReqParams(); + // 接口名 + params.setFunName("ZRFC_MM_GETDATA"); + Map inputParams = new HashMap<>(1); + inputParams.put("I_ZBZXFLG", "X"); + params.setInputParams(inputParams); + try { + SapResult sapResult = sapService.doSapFun(params); + Map>> outTablesMap = sapResult.getOutTablesMap(); + List> tOut = outTablesMap.get("T_CBZX"); + if (!sapResult.isSuccess()) { + throw new NflgBusinessException(STATE.Error, "接口连接失败"); + } + + if (!CollectionUtils.isEmpty(tOut)) { + + List addList = new ArrayList<>(tOut.size()); + tOut.forEach(out -> { + ProcessWorkCenterEntity add = new ProcessWorkCenterEntity(); + add.setRowId(IdWorker.getId()); + // add.setMaterialNo(out.get("MATNR").toString().replaceAll("^[0]+","")); + add.setWorkCenter(out.get("ARBPL").toString()); + add.setFactory(out.get("WERKS").toString()); + add.setName(out.get("KTEXT1").toString()); + add.setType(out.get("VERWE").toString()); + // workCenter.setDescription();// 描述 + add.setHeader(out.get("VERAN").toString()); + add.setHeaderDescription(out.get("KTEXT").toString()); + add.setUsefulness(out.get("PLANV").toString()); + add.setUsefulnessDescription(out.get("TXT").toString()); + String recoil=out.get("RGEKZ").toString(); + if(StringUtils.isNotBlank(recoil)&&recoil.equals("X")){// 是否反冲SAP的值是:""和X,分别代表 + add.setRecoil(false); + }else{ + add.setRecoil(true); + } + add.setStandardCode(out.get("VGWTS").toString()); + add.setStandardCodeDescription(out.get("TXT1").toString()); + add.setStandardTextCode(out.get("KTSCH").toString()); + add.setStandardTextCodeDescription(out.get("KTEXT2").toString()); + add.setProcessingFormula(out.get("IDENT").toString()); + add.setProcessingFormulaDescription(out.get("TXT2").toString()); + add.setCostControllingArea(out.get("KOKRS").toString()); + add.setCostCenter(out.get("KOSTL").toString()); + add.setCreatedBy(SessionUtil.getUserName()); + add.setCreatedTime(new Date()); + add.setUpdatedBy(SessionUtil.getUserName()); + add.setUpdatedTime(new Date()); + // workCenter.setCostCenterDescription();// 成本中心描述 + // workCenter.setStartTime();//开始日期 + // workCenter.setEndTime();结束日期 + // processWorkCenterMapper.insert(add); + addList.add(add); + }); + // 删除旧数据 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + processWorkCenterMapper.delete(wrapper); + + //全量新增 + processWorkCenterMapper.insertBatch(addList); + /* list = Convert.convert(new TypeReference>() { + }, tOut);*/ + + } + } catch (Exception e) { + throw new RuntimeException(e); + } + + return ResultVO.success(); + } + +} + diff --git a/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/util/EecExcelUtil.java b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/util/EecExcelUtil.java new file mode 100644 index 00000000..3f99e6d7 --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/java/com/nflg/product/technology/util/EecExcelUtil.java @@ -0,0 +1,188 @@ +package com.nflg.product.technology.util; + +import com.nflg.product.base.core.exception.NflgBusinessException; +import com.nflg.product.bomnew.pojo.dto.BaseImportExcelDTO; +import nflg.product.common.constant.STATE; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.ttzero.excel.entity.ListSheet; +import org.ttzero.excel.entity.Workbook; +import org.ttzero.excel.reader.ExcelReader; +import org.ttzero.excel.reader.Row; +import org.ttzero.excel.reader.Sheet; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.util.Iterator; +import java.util.List; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +/** + * eecExcel + * + * @Author 大米 + * @Date 2022-03-23 + */ +public class EecExcelUtil { + + /** + * 下载本地文件 + * + * @param filePath 文件地址 + * @param response 输出流 + * @param fileName 文件名 + * @param format + */ + public static void downLocalFile(String filePath, HttpServletResponse response, String fileName, String format) throws IOException { + response.setHeader("content-Type", "application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); + File file = new File(filePath); + if (file.exists()) { + System.out.println("开始下载文件"); + InputStream inputStream = new FileInputStream(file); + ServletOutputStream ouputStream = response.getOutputStream(); + byte b[] = new byte[1024]; + int n; + while ((n = inputStream.read(b)) != -1) { + ouputStream.write(b, 0, n); + } + ouputStream.close(); + inputStream.close(); + } + + } + + public static void setResponseExcelHeader(HttpServletResponse response, String fileName) throws UnsupportedEncodingException { + response.setHeader("content-Type", "application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "utf-8")); + + } + + public static void eecExcel(String fileName, ListSheet sheet, HttpServletResponse response) throws IOException { + setResponseExcelHeader(response, fileName); + new Workbook().addSheet(sheet + ).writeTo(response.getOutputStream()); + + } + + + public static void eecExcel(String fileName, ListSheet sheet, OutputStream outputStream) throws IOException { + //setResponseExcelHeader(response, fileName); + new Workbook().addSheet(sheet + ).writeTo(outputStream); + + } + + /** + * 行读取excel sheet 0 + * + * @param hanlder + * @param inputStream + */ + public static void iteratorRead(BiConsumer hanlder, InputStream inputStream, Class cls, U u) { + try (ExcelReader reader = ExcelReader.read(inputStream)) { + Sheet sheet = reader.sheet(0); + Iterator ite = sheet.iterator(); + while (ite.hasNext()) { + hanlder.accept(ite.next().to(cls), u); + } + } catch (IOException e) { + throw new NflgBusinessException(STATE.BusinessError, "读取EXCEL 失败:" + e.getMessage()); + } + } + + + /** + * 获取EXCEL 所有内容 + * + * @param inputStream + * @param clc + * @param + * @return + * @throws IOException + */ + public static List getExcelContext(InputStream inputStream, Class clc) throws IOException { + try { + return ExcelReader.read(inputStream) + .sheet(0) + .dataRows() // 所有数据列,会过滤掉表头 + .map(row -> row.to(clc))// 列数据转Stock对象 + .collect(Collectors.toList());// 转为对象数组 + + } catch (Exception e) { + throw new NflgBusinessException(STATE.BusinessError, "读取EXCEL 失败,请检查模板是否正确:" + e.getMessage()); + } + + } + + /** + * 每行excel 做处理 + * + * @param inputStream + * @param clc + * @param handler + * @param + * @param + * @return + */ + public static List handlerExcel(InputStream inputStream, Class clc, Consumer handler) { + + try (ExcelReader reader = ExcelReader.read(inputStream)) { + + reader.sheet(0).dataRows().map(row-> row.to(clc) +// T t= row.too(clc); +// t.setRowNum(row.getRowNum()); +// return t ; + ).forEach(u -> { + if(handler!=null) { + handler.accept(u); + } + }); + } catch (IOException e) { + throw new NflgBusinessException(STATE.ParamErr, "excel 解析失败,请检查模板是否正确"); + } + + return null; + } + + + + + + /** + * 获取sheet名称 + * @param inputStream + * @return + */ + public static String getSheetName(InputStream inputStream){ + try (ExcelReader reader = ExcelReader.read(inputStream)) { + return reader.sheet(0).getName(); + } catch (IOException e) { + throw new NflgBusinessException(STATE.ParamErr, "excel 解析失败,请检查模板是否正确"); + } + } + + /** + * 去除excel单元格中的空格,excel导入时的字符串空格ASCII值为160,而空格(space)的ASCII值是32 + * + * @return + */ + public static String StringTrim(String str) { + return str.replaceAll("[\\s\\u00A0]+", "").trim(); + } + + public static void export(HttpServletResponse response, List data,Class clazz,String name) throws IOException { + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + URLEncoder.encode(name, "utf-8") + ".xlsx\""); + new Workbook().addSheet(new ListSheet() { + @Override + protected Class getTClass() { + return clazz; // 指定类型 + } + }.setData(data)).writeTo(response.getOutputStream()); + } +} diff --git a/nflg_project_dev/nflg-technology/src/main/resources/mapper/master/ProcessWorkCenterDao.xml b/nflg_project_dev/nflg-technology/src/main/resources/mapper/master/ProcessWorkCenterDao.xml new file mode 100644 index 00000000..8c48f17d --- /dev/null +++ b/nflg_project_dev/nflg-technology/src/main/resources/mapper/master/ProcessWorkCenterDao.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into t_process_workcenter(row_id,factory,work_center, `name`, type, `description`, header, + header_description, usefulness, usefulness_description, recoil, standard_code, standard_code_description, + standard_text_code, standard_text_code_description, processing_formula, processing_formula_description, + cost_controlling_area, cost_center, cost_center_description, start_time, end_time, created_by, created_time, + updated_by, updated_time) + values + + (#{entity.rowId},#{entity.factory}, #{entity.workCenter}, #{entity.name}, #{entity.type}, #{entity.description}, #{entity.header}, + #{entity.headerDescription}, #{entity.usefulness}, #{entity.usefulnessDescription}, #{entity.recoil}, + #{entity.standardCode}, #{entity.standardCodeDescription}, #{entity.standardTextCode}, + #{entity.standardTextCodeDescription}, #{entity.processingFormula}, #{entity.processingFormulaDescription}, + #{entity.costControllingArea}, #{entity.costCenter}, #{entity.costCenterDescription}, #{entity.startTime}, + #{entity.endTime}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updatedBy}, #{entity.updatedTime}) + + + + + insert into t_process_workcenter(factory,work_center, `name`, type, `description`, header, + header_description, usefulness, usefulness_description, recoil, standard_code, standard_code_description, + standard_text_code, standard_text_code_description, processing_formula, processing_formula_description, + cost_controlling_area, cost_center, cost_center_description, start_time, end_time, created_by, created_time, + updated_by, updated_time) + values + + (#{entity.factory}, (#{entity.workCenter}, #{entity.name}, #{entity.type}, #{entity.description}, #{entity.header}, + #{entity.headerDescription}, #{entity.usefulness}, #{entity.usefulnessDescription}, #{entity.recoil}, + #{entity.standardCode}, #{entity.standardCodeDescription}, #{entity.standardTextCode}, + #{entity.standardTextCodeDescription}, #{entity.processingFormula}, #{entity.processingFormulaDescription}, + #{entity.costControllingArea}, #{entity.costCenter}, #{entity.costCenterDescription}, #{entity.startTime}, + #{entity.endTime}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updatedBy}, #{entity.updatedTime}) + + on duplicate key update + factory = values(factory) , work_center = values(work_center) , name = values(name) , type = values(type) , description = + values(description) , header = values(header) , header_description = values(header_description) , usefulness = + values(usefulness) , usefulness_description = values(usefulness_description) , recoil = values(recoil) , + standard_code = values(standard_code) , standard_code_description = values(standard_code_description) , + standard_text_code = values(standard_text_code) , standard_text_code_description = + values(standard_text_code_description) , processing_formula = values(processing_formula) , + processing_formula_description = values(processing_formula_description) , cost_controlling_area = + values(cost_controlling_area) , cost_center = values(cost_center) , cost_center_description = + values(cost_center_description) , start_time = values(start_time) , end_time = values(end_time) , created_by = + values(created_by) , created_time = values(created_time) , updated_by = values(updated_by) , updated_time = + values(updated_time) + + + + row_id, factory,work_center, `name`, type, `description`, header, + header_description, usefulness, usefulness_description, recoil, standard_code, standard_code_description, + standard_text_code, standard_text_code_description, processing_formula, processing_formula_description, + cost_controlling_area, cost_center, cost_center_description, start_time, end_time + + + + + + AND factory = #{query.factory} + + + AND work_center IN + + #{item} + + + + AND row_id IN + + #{item} + + + + + + + +