diff --git a/modules/i3plus-ext-mes-api/pom.xml b/modules/i3plus-ext-mes-api/pom.xml index 7fe786b..4b24fca 100644 --- a/modules/i3plus-ext-mes-api/pom.xml +++ b/modules/i3plus-ext-mes-api/pom.xml @@ -8,13 +8,26 @@ impp.framework impp-framework-boot + + + i3plus-platform-common + i3plus.platform + + i3plus.pojo i3plus-pojo-mes + 1.0.0-yfai + + + + i3plus.platform + i3plus-platform-common + 1.0.0.1-patch + pom - i3plus.ext.mes i3plus-ext-mes-pojo diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IBaseMesService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IBaseMesService.java new file mode 100644 index 0000000..bc9b3be --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IBaseMesService.java @@ -0,0 +1,63 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description: + * @CreateDate 2021/10/20 10:27 + * @Author 尹肖 + */ +public interface IBaseMesService { + + /** + * 获取当前服务Class + * + * @return + */ + Class getMesClass(); + + @ApiOperation(value = "查询列表", notes = "组合查询,外带分页功能") + ListPager queryPager(T bean, Pager pager); + + @ApiOperation(value = "查询列表", notes = "组合查询,外带分页功能") + ListPager queryPagerWhere(Pager pager, DdlPackBean packBean); + + @ApiOperation(value = "查询列表", notes = "查询所有数据") + List findAll(DdlPackBean packBean); + + @ApiOperation(value = "查询数据", notes = "根据ID查询信息") + T get(Long id); + + @ApiOperation(value = "新增信息", notes = "新增信息") + T insert(T bean); + + @ApiOperation(value = "批量新增数据", notes = "批量新增数据") + List insertBatch(List bean); + + @ApiOperation(value = "修改信息", notes = "修改信息") + T update(T bean); + + @ApiOperation(value = "批量修改信息", notes = "批量修改信息") + void updates(Iterable beans); + + @ApiOperation(value = "删除数据", notes = "根据ID软删除信息") + void deleteWeaklyById(Long id, String userName); + + @ApiOperation(value = "删除数据", notes = "根据ID批量删除信息") + void deleteWeaklyByIds(Long[] ids, String userName); + + @ApiOperation(value = "强删除数据", notes = "根据ID强删除") + void deleteById(Long id); + + @ApiOperation(value = "强删除数据", notes = "根据ID批量强删除") + void deleteByIds(Long[] ids); + + @ApiOperation(value = "根据id更新启用或禁用", notes = "根据id更新启用或禁用") + int updateValid(Long id, int status, String userName); +} diff --git a/modules/i3plus-ext-mes-apiservice/pom.xml b/modules/i3plus-ext-mes-apiservice/pom.xml index e1d59e9..8dc6e4c 100644 --- a/modules/i3plus-ext-mes-apiservice/pom.xml +++ b/modules/i3plus-ext-mes-apiservice/pom.xml @@ -73,11 +73,14 @@ i3plus.platform i3plus-platform-common + 1.0.0.1-patch i3plus.platform i3plus-platform-plugin + 1.0.0.1-patch + diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/AuthUtilExt.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/AuthUtilExt.java new file mode 100644 index 0000000..db3148f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/AuthUtilExt.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.apiservice.config; + +import cn.estsh.impp.framework.boot.auth.AuthUtil; + +/** + * @Description: + * @CreateDate: 2022/11/25 13:46 + * @Author: simon.song + */ +public class AuthUtilExt { + + public static String getOrganizeCode() { + return AuthUtil.getOrganize().getOrganizeCode(); +// return "22060"; + } + public static String getUserCode() { + return AuthUtil.getSessionUser().getUserCode(); + } + public static String getUserName() { + return AuthUtil.getSessionUser().getUserName(); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/BaseMesController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/BaseMesController.java new file mode 100644 index 0000000..8382c41 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/BaseMesController.java @@ -0,0 +1,483 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.api.base.IBaseMesService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool; +import cn.estsh.i3plus.icloud.core.sdk.ICoreMessageCloud; +import cn.estsh.i3plus.icloud.core.sdk.ICoreSysFileCloud; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.ExcelTool; +import cn.estsh.i3plus.platform.common.tool.FileTool; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.tool.ZipTool; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.*; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.impp.framework.base.controller.BaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.fileservice.ImppFileService; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.persistence.EntityManager; +import java.io.File; +import java.io.FileInputStream; +import java.lang.reflect.ParameterizedType; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @Description : + * @Reference : + * @Author : yx + * @CreateDate : 2020-05-20 18:16 + * @Modify: + **/ +public abstract class BaseMesController extends BaseController { + /** + * 主数据Service对象 + */ + @Autowired + protected IBaseMesService baseService; + /** + * entityManager 用于导入导出 + */ + @Autowired + protected EntityManager entityManager; + + /** + * fastDfs客户端 + */ + @Autowired + private ImppFileService fileService; + + @Autowired + private ICoreSysFileCloud coreSysFileCloud; + + @Autowired + private ICoreMessageCloud coreMessageCloud; + + /** + * 泛型class对象 + */ + protected final Class mesClass; + + public BaseMesController() { + // 通过反射获取泛型的真实类型 + ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); + mesClass = (Class) pt.getActualTypeArguments()[0]; + } + + //初始化dao + public IBaseMesService getBaseService() { + return baseService; + } + + //插入时验证 + public void validateInsert(T bean) throws NoSuchFieldException { + /* 新增数据校验 */ + ValidatorBean.beginValid(bean); + } + + //插入后执行 + public void afterInsert(T t) { + //子类实现 + } + + //修改时验证 + public void validateUpdate(T bean) throws NoSuchFieldException { + /* 修改数据检查 */ + ValidatorBean.beginValid(bean).checkNotZero("id", bean.getId()); + } + + //修改时验证 + private void validateUpdateValid(Long id) { + if (id == null) throw new ImppBusiException("请选择需要操作的数据"); + } + + //修改后执行 + public void afterUpdate(T t) { + //子类实现 + } + + //导入时验证 + public void validateImport(List beanList) throws NoSuchFieldException { + /* 新增数据校验 */ + ValidatorBean.beginValid(beanList); + } + + //导入时验证 + public void afterImport(List beanList) throws NoSuchFieldException { + } + + //查询后执行 + public void afterGet(T t) { + //子类实现 + } + + //查询后执行 + public void afterList(List l) { + //子类实现 + } + + //查询所有时的默认条件 + private DdlPackBean listAllPackBean = null; + + public void setListAllPackBean(DdlPackBean packBean) { + this.listAllPackBean = packBean; + } + + /** + * 查询信息 分页 + 组合 + * + * @param bean + * @param pager + * @return + */ + @GetMapping(value = "/query") + @ApiOperation(value = "查询信息带分页", notes = "组合查询,外带分页功能") + public ResultBean queryByPager(T bean, Pager pager) { + try { + bean.setOrganizeCode(AuthUtilExt.getOrganizeCode()); + ListPager listPager = getBaseService().queryPager(bean, pager); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setListPager(listPager); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询所有信息", notes = "查询所有数据") + public ResultBean list() { + try { + if (listAllPackBean == null) { + //默认查询所有 + listAllPackBean = DdlPackBean.getDdlPackBean(AuthUtil.getOrganizeCode()); + } + List list = getBaseService().findAll(listAllPackBean); + afterList(list); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据ID查询信息", notes = "根据ID查询信息") + public ResultBean getById(@PathVariable("id") Long id) { + try { + // 参数校验 + ValidatorBean.checkIsNumber(id, ImppExceptionEnum.PARAMETER_EXCEPTION.getDescription()); + T t = (T) getBaseService().get(id); + afterGet(t); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(t); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } + } + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增信息") + public ResultBean insert(@RequestBody T bean) { + try { + validateInsert(bean); + //新增初始化 + bean.setOrganizeCode(AuthUtilExt.getOrganizeCode()); + ConvertBean.serviceModelInitialize(bean, AuthUtil.getSessionUser().getUserName()); + T t = (T) getBaseService().insert(bean); + afterInsert(t); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(t); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + + @PostMapping(value = "/update") + @ApiOperation(value = "修改信息", notes = "修改信息") + public ResultBean update(@RequestBody T bean) { + try { + bean.setOrganizeCode(AuthUtilExt.getOrganizeCode()); + validateUpdate(bean); + T t = getBaseService().update(bean); + afterUpdate(t); + return ResultBean.success("修改成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + + @PostMapping(value = "/update-list") + @ApiOperation(value = "批量修改信息", notes = "批量修改信息") + public ResultBean updateList(List beans) { + try { + String organizeCode = AuthUtilExt.getOrganizeCode(); + for (T bean : beans) { + bean.setOrganizeCode(organizeCode); + validateUpdate(bean); + T t = getBaseService().update(bean); + afterUpdate(t); + } + return ResultBean.success("修改成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + + @DeleteMapping(value = "/delete-weakly-id") + @ApiOperation(value = "软删除信息") + public ResultBean batchDeleteWeaklyByIds(@PathVariable("ids") Long id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "请选择需要删除的信息"); + getBaseService().deleteWeaklyById(id, AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("删除信息成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } + } + + @DeleteMapping(value = "/delete-weakly") + @ApiOperation(value = "批量软删除信息") + public ResultBean batchDeleteWeaklyByIds(@RequestBody Long[] ids) { + try { + // 数据校验 + ValidatorBean.checkNotNull(ids, "请选择需要删除的信息"); + getBaseService().deleteWeaklyByIds(ids, AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("批量删除信息成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } + } + + @DeleteMapping(value = "/delete-id/{ids}") + @ApiOperation(value = "强删除信息") + public ResultBean batchDeleteByIds(@PathVariable("ids") Long id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "请选择需要删除的信息"); + getBaseService().deleteById(id); + return ResultBean.success("删除信息成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } + } + + @DeleteMapping(value = "/delete") + @ApiOperation(value = "批量强删除信息") + public ResultBean batchDeleteByIds(@RequestBody Long[] ids) { + try { + // 数据校验 + ValidatorBean.checkNotNull(ids, "请选择需要删除的信息"); + getBaseService().deleteByIds(ids); + return ResultBean.success("批量删除信息成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } + } + + @PostMapping(value = "/update-valid") + @ApiOperation(value = "根据id更新启用或禁用", notes = "根据id更新启用或禁用") + public ResultBean updateValid(Long id, int status) { + try { + validateUpdateValid(id); + getBaseService().updateValid(id, status, AuthUtilExt.getUserName()); + return ResultBean.success("修改状态成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + + /******************************************* 通用导入导出 *************************************/ + + @GetMapping(value = "/export") + @ApiOperation(value = "导出数据") + public ResultBean exportExcel(T bean, String[] colName, int pageSize, boolean needSendMessage) { + ListPager listPager; + List result = new ArrayList<>(); + File zipFile = null; + File excelDir = null; + File excelFile; + ExcelTool excelTool; + try { + bean.setOrganizeCode(AuthUtilExt.getOrganizeCode()); + Pager pager = new Pager(0); + // 判断是否超过excel最大导出数量设定值 + int maxPageSize = RedisCacheTool.getSysConfigIntVal(PlatformConstWords.EXCEL_EXPORT_MAX_ROW, 20000); + if (pageSize == 0 || pageSize >= maxPageSize) { + pager.setPageSize(maxPageSize); + } else { + pager.setPageSize(pageSize); + } + + // 数据校验 + if (colName == null || colName.length == 0) { + Map colMap = ExcelTool.getColName(mesClass); + colName = new String[colMap.size()]; + int i = 0; + for (String key : colMap.keySet()) { + colName[i++] = key; + } + } + + excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); + excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); + excelDir.mkdir(); + do { + listPager = baseService.queryPager(bean, pager); + pager = listPager.getObjectPager(); + + // 将excel导出至临时文件夹 + excelFile = new File(MessageFormat.format("{0}{1}{2}{3}.xls", excelDir, File.separator, mesClass.getSimpleName(), pager.getCurrentPage())); + excelFile.createNewFile(); + excelTool.exportData(excelFile, listPager.getObjectList(), mesClass, colName); + + pager.setCurrentPage(pager.getCurrentPage() + 1); + } while (pager.getCurrentPage() <= pager.getTotalPages()); + + // 将所有excel文件打包上传 + zipFile = ZipTool.zipFile(null, excelDir); + SysFile sysFile = fileService.upload(new FileInputStream(zipFile), zipFile.getName(), + StringTool.getStringFileSuffix(zipFile.getName(), true), CommonEnumUtil.SOFT_TYPE.MDM.getValue()); + BaseResultBean baseResultBean = coreSysFileCloud.insertFile(sysFile); + if (!baseResultBean.isSuccess()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode()) + .setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode()) + .setErrorDetail(baseResultBean.errorMsg) + .build(); + } else { + sysFile = baseResultBean.getResultObject(); + } + + result.add(sysFile); + + // 是否发送站内信 + if (needSendMessage) { + coreMessageCloud.insertSysMessage(ExcelTool.sendStationLetter(result, getSessionUser().getUser().getId())); + } + + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + // 清理临时文件文件 + if (zipFile != null) { + FileTool.deleteFile(zipFile.getPath()); + } + if (excelDir != null) { + FileTool.deleteFile(excelDir.getPath()); + } + } + } + + @PostMapping(value = "/import") + @ApiOperation(value = "导入数据") + public ResultBean importExcel(@RequestParam("file") MultipartFile file) { + try { + MesExcelTool excelTool = new MesExcelTool(entityManager, RedisCacheTool.getImppRedis()); + List beanList = excelTool.importData(file.getOriginalFilename(), file.getInputStream(), mesClass); + + // 校验导入数据 + validateImport(beanList); + String userName = AuthUtil.getSessionUser().getUserName(); + String organizeCode = AuthUtil.getOrganize().getOrganizeCode(); + // 导入数据初始化 + for (T bean : beanList) { + ConvertBean.serviceModelInitialize(bean, userName); + bean.setOrganizeCode(organizeCode); + } + baseService.insertBatch(beanList); + + // 导入后 + afterImport(beanList); + return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/down-template") + @ApiOperation(value = "下载导入模板") + public ResultBean downExcelTemplate() { + try { + ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis()); + String importTemplateCode = mesClass.getSimpleName() + "ImportTemplate"; + + // 查询服务器中是否存在模板文件 + SysFile sysFile = null; + BaseResultBean baseResultBean = coreSysFileCloud.getSysFileByFileCode(importTemplateCode); + if (!baseResultBean.isSuccess()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode()) + .setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode()) + .setErrorDetail(baseResultBean.errorMsg) + .build(); + } else { + sysFile = baseResultBean.getResultObject(); + } + if (sysFile == null) { + ImppFile fastDFSFile = new ImppFile(mesClass.getSimpleName() + "ImportTemplate.xls", + excelTool.importTemplate(mesClass), ".xls"); + sysFile = fileService.upload(fastDFSFile, CommonEnumUtil.SOFT_TYPE.MES.getValue()); + sysFile.setFileCode(importTemplateCode); + baseResultBean = coreSysFileCloud.insertFile(sysFile); + if (!baseResultBean.isSuccess()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode()) + .setErrorDetail(baseResultBean.errorMsg) + .build(); + } else { + sysFile = baseResultBean.getResultObject(); + } + } + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysFile); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/TestBaseController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/TestBaseController.java index d9f18ff..c3154d5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/TestBaseController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/TestBaseController.java @@ -1,4 +1,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; -public class TestBaseController { +import cn.estsh.i3plus.pojo.mes.bean.MesArea; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TestBaseController extends BaseMesController{ } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestBusiController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestBusiController.java index 22ec7d8..7fd6c59 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestBusiController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestBusiController.java @@ -1,4 +1,10 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; -public class TestBusiController { +import cn.estsh.i3plus.mes.apiservice.controller.CommonController; +import cn.estsh.impp.framework.base.controller.BaseCommonController; +import cn.estsh.impp.framework.base.controller.MesBaseController; + +public class TestBusiController extends MesBaseController { + + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesExcelTool.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesExcelTool.java new file mode 100644 index 0000000..d62e8e4 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesExcelTool.java @@ -0,0 +1,78 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel; + +import cn.estsh.i3plus.mes.apiservice.util.DateUtil; +import cn.estsh.i3plus.platform.common.tool.ExcelTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.util.BaseRedis; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDataFormat; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; + +import javax.persistence.EntityManager; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @Description: + * @CreateDate 2022/6/27 17:28 + * @Author 尹肖 + */ +public class MesExcelTool extends ExcelTool { + public MesExcelTool(EntityManager entityManager, BaseRedis redisRes) { + super(entityManager, redisRes); + } + + @Override + protected Object getCellValue(Cell cell, Class cellClass) { + Object value = ""; + if (cell == null) { + return null; + } else if (cell.getCellTypeEnum().equals(CellType.NUMERIC) && HSSFDateUtil.isCellDateFormatted(cell)) { + value = this.getDateCellValue(cell, cellClass); + return value; + } else { + cell.setCellType(CellType.STRING); + if ("null".equals(cell.getStringCellValue())) { + value = ""; + } else if ((cellClass == Integer.class || cellClass == Long.class || cellClass == Double.class || cellClass == Float.class) && StringUtils.isBlank(cell.getStringCellValue())) { + value = null; + } else if (cellClass == String.class) { + value = cell.getStringCellValue(); + } else if (cellClass == Integer.class) { + value = Integer.parseInt(cell.getStringCellValue()); + } else if (cellClass == Long.class) { + value = Long.parseLong(cell.getStringCellValue()); + } else if (cellClass == Double.class) { + value = Double.parseDouble(cell.getStringCellValue()); + } else if (cellClass == Float.class) { + value = Float.parseFloat(cell.getStringCellValue()); + } + + return value; + } + } + + Object getDateCellValue(Cell cell, Class cellClass) { + Object value = null; + if (cell.getCellTypeEnum().equals(CellType.NUMERIC) && HSSFDateUtil.isCellDateFormatted(cell)) { + if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm:ss")) { + value = TimeTool.pareDateToString("HH:mm:ss", cell.getDateCellValue()); + } else if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")) { + value = TimeTool.pareDateToString("yyyy-MM-dd", cell.getDateCellValue()); + } else if (cell.getCellStyle().getDataFormat() == 58) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + double numericCellValue = cell.getNumericCellValue(); + Date date = HSSFDateUtil.getJavaDate(numericCellValue); + value = sdf.format(date); + } else { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.BASE_FORMAT); + double numericCellValue = cell.getNumericCellValue(); + value = simpleDateFormat.format(HSSFDateUtil.getJavaDate(numericCellValue)); + } + } + + return value; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-test.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-test.properties new file mode 100644 index 0000000..b7930ce --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-test.properties @@ -0,0 +1,22 @@ +#\u5B89\u9053\u62D3\u6570\u636E\u6E90 +impp.yfas.datasource.isopen=true +#WMS\u6570\u636E\u6E90 +impp.mes.datasource.isopen=true +#\u6570\u636E\u6E90\u7684\u522B\u540D +impp.mes.datasource.alias=mesDataSource +impp.mes.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.mes.datasource.jdbc-url=jdbc:mysql://192.168.1.241:3306/impp_i3_mes_yf?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.mes.datasource.jdbc-url=jdbc:sqlserver://139.224.200.147:20037;DatabaseName=impp_i3_mes; +impp.mes.datasource.username=root +#impp.mes.datasource.password=Test123! +impp.mes.datasource.password=estsh123 +#Admin123! + + +#\u6570\u636E\u6E90\u7684\u522B\u540D +impp.yfas.datasource.alias=yfasDataSource +impp.yfas.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.yfas.datasource.jdbc-url=jdbc:mysql://192.168.1.241:3306/impp_i3_mes_yf?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.yfas.datasource.jdbc-url=jdbc:sqlserver://139.224.200.147:20037;DatabaseName=impp_i3_mes; +impp.yfas.datasource.username=root +impp.yfas.datasource.password=estsh123 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-test.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-test.properties index 8de857a..b32c4c6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-test.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-test.properties @@ -148,16 +148,7 @@ spring.data.mongodb.username=sa spring.data.mongodb.password=i3plus spring.data.mongodb.port=27017 ################ \u4E3B\u6570\u636E\u6E90 ################ -# mysql -impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver -impp.write.datasource.jdbc-url=jdbc:mysql://192.168.1.241:3306/impp_i3_mes_pcn?autoReconnect=true&useSSL=false&characterEncoding=utf-8 -impp.write.datasource.username=root -impp.write.datasource.password=estsh123 -impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource -impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver -impp.read.datasource.jdbc-url=jdbc:mysql://192.168.1.241:3306/impp_i3_mes_pcn?autoReconnect=true&useSSL=false&characterEncoding=utf-8 -impp.read.datasource.username=root -impp.read.datasource.password=estsh123 + ##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316############## impp.schedule.open=false impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver @@ -214,44 +205,49 @@ slm.app.id=20190513 ###################\uFFFD\uFFFD\u013F\uFFFD\uFFFD\uFFFD\u077F\uFFFD\u02B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B7\uFFFD\uFFFD################################################## project.entity.path=cn.estsh.i3plus.pojo -#impp.datasource.type=druidDataSource -# -##\u6700\u5927\u7EBF\u7A0B\u6570 -#spring.datasource.maximum-pool-size=200 -# -##\u6700\u5C0F\u8FDE\u63A5\u7EBF\u7A0B\u6570 -#spring.datasource.min-idle=50 -# -##\u521D\u59CB\u5316\u8FDE\u63A5\u6C60\u5927\u5C0F -#spring.datasource.initial-size=50 -# -##\u63A2\u6D3B\u3001\u9A8C\u8BC1\u8FDE\u63A5\u6709\u6548\u6027\u7684\u67E5\u8BE2 -#spring.datasource.validation-query=select 1 -# -##\u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4 -#spring.datasource.max-wait=600000 -# -##\u914D\u7F6E\u4E00\u4E2A\u94FE\u63A5\u5728\u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u751F\u5B58\u65F6\u95F4 -#spring.datasource.minEvictableIdleTimeMillis=600000 -# -##\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u8FDE\u63A5\u6C60\u4E2D\u6700\u5927\u7684\u751F\u5B58\u65F6\u95F4\uFF0C\u8D85\u8FC7\u6700\u5927\u751F\u5B58\u65F6\u95F4\u4F1A\u88AB\u79FB\u9664\uFF0C\u5355\u4F4D\u6BEB\u79D2 -#spring.datasource.maxEvictableIdleTimeMillis=1800000 -# -##\u914D\u7F6E\u95F4\u9694\u591A\u4E45\u83DC\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u6BEB\u79D2\u3002\u592A\u957F\u53EF\u80FD\u5BFC\u81F4\u65E0\u6CD5\u53CA\u65F6\u68C0\u6D4B\u5230\u8FDE\u63A5\u4E2D\u65AD -#spring.datasource.timeBetweenEvictionRunsMillis=30000 -# -##\u914D\u7F6E\u4ECE\u8FDE\u63A5\u6C60\u83B7\u53D6\u8FDE\u63A5\u65F6\uFF0C\u5F53\u8FDE\u63A5\u7A7A\u95F2\u65F6\u95F4\u5927\u4E8EtimeBetweenEvictionRunsMillis\u65F6\uFF0C\u662F\u5426\u68C0\u67E5\u94FE\u63A5\u6709\u6548\u6027\uFF0Ctrue\u6BCF\u6B21\u90FD\u68C0\u67E5\uFF0Cfalse\u4E0D\u68C0\u67E5 -#spring.datasource.testWhileIdle=false -# -##\u914D\u7F6E\u4ECE\u8FDE\u63A5\u6C60\u83B7\u53D6\u8FDE\u63A5\u65F6\u548C\u5411\u8FDE\u63A5\u6C60\u89C4\u8303\u8FDE\u63A5\u65F6\uFF0C\u662F\u5426\u68C0\u67E5\u94FE\u63A5\u6709\u6548\u6027 -##\u6BCF\u6B21\u83B7\u53D6\u6216\u5F52\u8FD8\u8FDE\u63A5\u90FD\u68C0\u6D4B\u592A\u9891\u7E41\uFF0C\u9664\u975E\u7279\u522B\u91CD\u8981\u6216\u7F51\u7EDC\u7279\u522B\u4E0D\u53EF\u9760\u7B49\u60C5\u51B5\uFF0C\u5EFA\u8BAE\u7528testWhileIdle + timeBetweenEvictionRunsMillis\u4EE3\u66FF -#spring.datasource.testOnBorrow=false -#spring.datasource.testOnReturn=false -# -##\u914D\u7F6E\u662F\u5426\u5B9A\u671F\u63A2\u6D3B -#spring.datasource.keepAlive=true -##\u914D\u7F6E\u63A2\u6D3B\u95F4\u9694 -#spring.datasource.keepAliveBetweenTimeMillis=120000 -# -##\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u7684\u6700\u5927\u4F7F\u7528\u6B21\u6570\uFF0C\u907F\u514D\u957F\u65F6\u95F4\u4F7F\u7528\u76F8\u540C\u94FE\u63A5\u9020\u6210\u670D\u52A1\u5668\u7AEF\u8D1F\u8F7D\u4E0D\u5747\u8861 -#spring.datasource.phyMaxUseCount=1000 + +############################????####################################### +###spring.shardingsphere.datasource.names=master,slave +spring.shardingsphere.datasource.names=master,slave +##?? +spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.master.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.master.JdbcUrl=jdbc:mysql://192.168.1.241:3306/impp_i3_mes_yf?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.master.username=root +spring.shardingsphere.datasource.master.password=estsh123 + +spring.shardingsphere.datasource.master.maximum-pool-size=200 +spring.shardingsphere.datasource.master.minimum-idle=200 +spring.shardingsphere.datasource.master.idle-timeout=500000 +spring.shardingsphere.datasource.master.connection-timeout=600000 +spring.shardingsphere.datasource.master.max-lifetime=7000000 +spring.shardingsphere.datasource.master.connection-test-query=select 1 +spring.shardingsphere.datasource.master.keep-alive-time=3500000 + + +##?? +spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.slave.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.slave.JdbcUrl=jdbc:mysql://192.168.1.241:3306/impp_i3_mes_yf?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.slave.username=root +spring.shardingsphere.datasource.slave.password=estsh123 + +spring.shardingsphere.datasource.slave.maximum-pool-size=200 +spring.shardingsphere.datasource.slave.minimum-idle=200 +spring.shardingsphere.datasource.slave.idle-timeout=500000 +spring.shardingsphere.datasource.slave.connection-timeout=600000 +spring.shardingsphere.datasource.slave.max-lifetime=7000000 +spring.shardingsphere.datasource.slave.connection-test-query=select 1 +spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + + +##?????? +spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=master +spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=slave +#??datasource ???????????????? +#??? gg +#spring.shardingsphere.sharding.default-data-source-name=ds0 +#??????????sql?? +spring.shardingsphere.props.sql.show = false + +spring.shardingsphere.props.max.connections.size.per.query = 10 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties index 832381d..c98ff69 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties @@ -1,7 +1,7 @@ #\u9879\u76EE\u540D\u79F0 -spring.application.name=i3mes +spring.application.name=mes-zxw #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=docker,cus-docker +spring.profiles.active=test ######### \u81EA\u5B9A\u4E49\u53C2\u6570 ######### #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C desc.application.name=\u751F\u4EA7\u6267\u884C\u7CFB\u7EDF diff --git a/modules/i3plus-ext-mes-icloud/pom.xml b/modules/i3plus-ext-mes-icloud/pom.xml index 1485500..bb6c818 100644 --- a/modules/i3plus-ext-mes-icloud/pom.xml +++ b/modules/i3plus-ext-mes-icloud/pom.xml @@ -28,6 +28,7 @@ i3plus.platform i3plus-platform-common + diff --git a/modules/i3plus-ext-mes-pojo/pom.xml b/modules/i3plus-ext-mes-pojo/pom.xml index 6bf6f1c..76022ef 100644 --- a/modules/i3plus-ext-mes-pojo/pom.xml +++ b/modules/i3plus-ext-mes-pojo/pom.xml @@ -15,19 +15,13 @@ i3plus.pojo - i3plus-pojo-base - - - - i3plus.pojo i3plus-pojo-mes - + 1.0.0-yfai - - i3plus.pojo - i3plus-pojo-andon + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index d011649..9c8ac47 100644 --- a/pom.xml +++ b/pom.xml @@ -60,9 +60,7 @@ i3plus-icloud ${i3plus.icloud.version} pom - import - i3plus.pojo i3plus-pojo @@ -84,7 +82,6 @@ i3plus-mes ${i3plus.mes.version} pom - import @@ -144,6 +141,39 @@ poi-ooxml-schemas 4.1.2 + + i3plus.pojo + i3plus-pojo-mes + 1.0.0-yfai + + + + i3plus.pojo + i3plus-pojo-andon + 1.0.0-yfai + + + i3plus.platform + i3plus-platform-common + 1.0.0.1-patch + + + i3plus.icloud + i3plus-icloud-core + ${i3plus.icloud.version} + + + + i3plus.icloud + i3plus-icloud-andon + ${i3plus.icloud.version} + + + + i3plus.icloud + i3plus-icloud-softswitch + ${i3plus.icloud.version} +