diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java index 64ab11e5c..1ff4ec1e7 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java @@ -5890,7 +5890,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl { + @Autowired + private IProjectRxswinEOService projectRxswinEOService; + + /** + * 分页列表查询 + * + * @param projectRxswinEO + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "rxswin表-分页列表查询") + @ApiOperation(value="rxswin表-分页列表查询", notes="rxswin表-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(ProjectRxswinEO projectRxswinEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(projectRxswinEO, req.getParameterMap()); + List projectRxswinEOList = projectRxswinEOService.getPageInfo(projectRxswinEO); + Page pages = PageUtil.getPages(pageNo, pageSize, projectRxswinEOList); + return Result.OK(pages); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "rxswin表-列表查询") + @ApiOperation(value="rxswin表-列表查询", notes="rxswin表-列表查询") + @GetMapping(value = "/list") + public Result> queryList() { + List list = projectRxswinEOService.queryList(); + return Result.OK(list); + } + + /** + * 添加 + * + * @param projectRxswinEO + * @return + */ + @AutoLog(value = "rxswin表-添加") + @ApiOperation(value="rxswin表-添加", notes="rxswin表-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody ProjectRxswinEO projectRxswinEO) { + projectRxswinEOService.add(projectRxswinEO); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param projectRxswinEO + * @return + */ + @AutoLog(value = "rxswin表-编辑") + @ApiOperation(value="rxswin表-编辑", notes="rxswin表-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody ProjectRxswinEO projectRxswinEO) { + projectRxswinEOService.editById(projectRxswinEO); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "rxswin表-通过id删除") + @ApiOperation(value="rxswin表-通过id删除", notes="rxswin表-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + projectRxswinEOService.deleteById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "rxswin表-批量删除") + @ApiOperation(value="rxswin表-批量删除", notes="rxswin表-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.projectRxswinEOService.deleteByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "rxswin表-通过id查询") + @ApiOperation(value="rxswin表-通过id查询", notes="rxswin表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + ProjectRxswinEO projectRxswinEO = projectRxswinEOService.queryById(id); + if(projectRxswinEO==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(projectRxswinEO); + } + + /** + * 导出excel + * + * @param request + * @param projectRxswinEO + */ + @ApiOperation(value="导出", notes="导出") + @RequestMapping(value = "/exportXls",method = RequestMethod.GET) + public ModelAndView exportXls(HttpServletRequest request, ProjectRxswinEO projectRxswinEO) { + return projectRxswinEOService.exportXls(request,projectRxswinEO); + } + + /** + * 通过excel导入数据 + * @param file + * @param cut + * @param version + * @param projectId + * @return + */ + @ApiOperation(value="导入", notes="导入") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(MultipartFile file,String cut,String version,String projectId) { + projectRxswinEOService.importExcel(file,cut,version,projectId); + return Result.OK(""); + } + + /** + * 调取--第一层 + * + * @param projectRxswinEO + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "调取--第一层") + @ApiOperation(value="调取--第一层", notes="调取--第一层") + @GetMapping(value = "/getOnePage") + public Result getOnePage(ProjectRxswinEO projectRxswinEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + + IPage pageList = projectRxswinEOService.getOnePage(pageNo,pageSize,projectRxswinEO); + return Result.OK(pageList); + } + /** + * 调取--第二层 + * + * @param projectRxswinEO + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "调取--第二层") + @ApiOperation(value="调取--第二层", notes="调取--第二层") + @GetMapping(value = "/getTwoPage") + public Result getTwoPage(ProjectRxswinEO projectRxswinEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + IPage pageList = projectRxswinEOService.getTwoPage(pageNo,pageSize,projectRxswinEO); + return Result.OK(pageList); + } + + @AutoLog(value = "提交") + @ApiOperation(value="提交", notes="提交") + @GetMapping(value = "/submitInfo") + public Result submitInfo(@RequestParam(name="projectId",required=true) String projectId, + @RequestParam(name="ids",required=true) String ids) { + projectRxswinEOService.submitInfo(projectId,ids); + return Result.OK("提交成功"); + } + + @AutoLog(value = "覆盖验证") + @ApiOperation(value="覆盖验证", notes="覆盖验证") + @GetMapping(value = "/iSExist") + public Result iSExist(@RequestParam(name="projectId",required=true) String projectId, + @RequestParam(name="ids",required=true) String ids) { + String iSExist = projectRxswinEOService.iSExist(projectId, ids); + return Result.OK(iSExist); + } + + /** + * + * @param projectId + * @param ids + * @param flag flag-->YES覆盖, flag-->NO不覆盖 + * @return + */ + @AutoLog(value = "调取后保存数据") + @ApiOperation(value="调取后保存数据", notes="调取后保存数据") + @GetMapping(value = "/addBatch") + public Result addBatch(@RequestParam(name="projectId",required=true) String projectId, + @RequestParam(name="ids",required=true) String ids, + @RequestParam(name="flag",required=true) String flag) { + projectRxswinEOService.addBatch(projectId, ids,flag); + return Result.OK(""); + } + + /** + * 对应版本下拉 + * + * @return + */ + @AutoLog(value = "对应版本下拉") + @ApiOperation(value="对应版本下拉", notes="对应版本下拉") + @GetMapping(value = "/getVersionList") + public Result> getVersionList(String projectId) { + List list = projectRxswinEOService.getVersionList(projectId); + return Result.OK(list); + } + + @ApiOperation(value = "模板下载") + @GetMapping(value = "/exportTemplate") + public void exportTemplate(@RequestParam Map map, HttpServletResponse response, HttpServletRequest request) throws Exception { + projectRxswinEOService.exportTemplate(map, response, request); + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLibraryBase.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLibraryBase.java index 6f4a91a15..2fdadb87a 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLibraryBase.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLibraryBase.java @@ -112,6 +112,13 @@ public class ProjectLibraryBase implements Comparable { @TableField(exist = false) private java.lang.String targetMarketName; + @TableField(exist = false) + private java.lang.String targetMarketNameCn; + + @TableField(exist = false) + private java.lang.String targetMarketNameEn; + + //主项目id parent_id private String parentId; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectRxswinEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectRxswinEO.java new file mode 100644 index 000000000..f11e37d89 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectRxswinEO.java @@ -0,0 +1,112 @@ +package com.jero.modules.project.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.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + + +/** + * @Description: rxswin表 + * @Author: jero-boot + * @Date: 2023-08-28 + * @Version: V1.0 + */ +@Data +@TableName("project_rxswin") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="project_rxswin对象", description="rxswin表") +public class ProjectRxswinEO implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; + + /**项目id*/ + @ApiModelProperty(value = "项目id") + private java.lang.String projectId; + + /**文档库id(编号)*/ + @ApiModelProperty(value = "文档库id(编号)") + private java.lang.String documentId; + + @TableField(exist = false) + @ApiModelProperty(value = "编号") + @Excel(name = "编号", width = 15) + private String serialNumber; + + /**主题*/ + @Excel(name = "主题", width = 15) + @ApiModelProperty(value = "主题") + private java.lang.String theme; + + /**RXSWIN*/ + @Excel(name = "RXSWIN", width = 15) + @ApiModelProperty(value = "RXSWIN") + private java.lang.String rxswin; + + /**版本*/ + @Excel(name = "版本", width = 15) + @ApiModelProperty(value = "对应版本") + private java.lang.String version; + + /**状态(0->保存,1->提交)*/ + @ApiModelProperty(value = "状态(0->保存,1->提交)") + private java.lang.String state; + + @TableField(exist = false) + @ApiModelProperty(value = "中英文切换") + private String cut; + + + + @TableField(exist = false) + @ApiModelProperty(value = "表头排序字段") + private java.lang.String orderByField; + + @TableField(exist = false) + @ApiModelProperty(value = "排序") + private java.lang.String orderBy; + + @TableField(exist = false) + @ApiModelProperty(value = "行号") + private java.lang.Integer number; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectRxswinEOEn.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectRxswinEOEn.java new file mode 100644 index 000000000..bccd300b3 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectRxswinEOEn.java @@ -0,0 +1,108 @@ +package com.jero.modules.project.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.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + + +/** + * @Description: rxswin表 + * @Author: jero-boot + * @Date: 2023-08-28 + * @Version: V1.0 + */ +@Data +@TableName("project_rxswin") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="project_rxswin对象", description="rxswin表") +public class ProjectRxswinEOEn implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private String sysOrgCode; + + /**项目id*/ + @ApiModelProperty(value = "项目id") + private String projectId; + + /**文档库id(编号)*/ + @ApiModelProperty(value = "文档库id(编号)") + private String documentId; + + @TableField(exist = false) + @ApiModelProperty(value = "编号") + @Excel(name = "No.", width = 15) + private String serialNumber; + + /**主题*/ + @Excel(name = "Theme", width = 15) + @ApiModelProperty(value = "主题") + private String theme; + + /**RXSWIN*/ + @Excel(name = "RXSWIN", width = 15) + @ApiModelProperty(value = "RXSWIN") + private String rxswin; + + /**版本*/ + @Excel(name = "Corresponding version", width = 30) + @ApiModelProperty(value = "版本") + private String version; + + /**状态(0->保存,1->提交)*/ + @ApiModelProperty(value = "状态(0->保存,1->提交)") + private String state; + + @TableField(exist = false) + @ApiModelProperty(value = "中英文切换") + private String cut; + + + + @TableField(exist = false) + @ApiModelProperty(value = "表头排序字段") + private String orderByField; + + @TableField(exist = false) + @ApiModelProperty(value = "排序") + private String orderBy; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/RxswinEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/RxswinEnum.java new file mode 100644 index 000000000..69f744bbb --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/RxswinEnum.java @@ -0,0 +1,38 @@ +package com.jero.modules.project.enums; + +/** + * 当前状态枚举类 + */ +public enum RxswinEnum { + + ONE("编号","No."), + TWO("主题","Theme"), + THREE("RXSWIN","RXSWIN"), + FOUR("对应版本","Corresponding version") + ; + + + String nameCn; + String nameEn; + + private RxswinEnum(String nameCn,String nameEn) { + this.nameCn = nameCn; + this.nameEn = nameEn; + } + + public String getNameCn() { + return nameCn; + } + + public void setNameCn(String nameCn) { + this.nameCn = nameCn; + } + + public String getNameEn() { + return nameEn; + } + + public void setNameEn(String nameEn) { + this.nameEn = nameEn; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/StatusEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/StatusEnum.java new file mode 100644 index 000000000..c28f22ee6 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/StatusEnum.java @@ -0,0 +1,47 @@ +package com.jero.modules.project.enums; + +/** + * 任务状态枚举类 + */ +public enum StatusEnum { + SAVE("保存","0"), + SUBMIT("提交","1"), + COVER_YES("覆盖","YES"), + COVER_NO("不覆盖","NO"), + ; + + + String name; + String value; + + private StatusEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public static String getTextByValue(String value) { + StatusEnum[] values = values(); + for (StatusEnum taskStatusEnum : values) { + if (taskStatusEnum.value.equals(value)) { + return taskStatusEnum.name; + } + } + return null; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectRxswinEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectRxswinEOMapper.java new file mode 100644 index 000000000..714a1bcc0 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectRxswinEOMapper.java @@ -0,0 +1,21 @@ +package com.jero.modules.project.mapper; + +import java.util.List; + +import com.jero.modules.project.entity.ProjectLibraryBase; +import org.apache.ibatis.annotations.Param; +import com.jero.modules.project.entity.ProjectRxswinEO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: rxswin表 + * @Author: jero-boot + * @Date: 2023-08-28 + * @Version: V1.0 + */ +public interface ProjectRxswinEOMapper extends BaseMapper { + + List queryProjectLibraryBaseList(@Param("id") String id, + @Param("parentId") String parentId); + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectRxswinEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectRxswinEOMapper.xml new file mode 100644 index 000000000..ed116b16d --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectRxswinEOMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectRxswinEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectRxswinEOService.java new file mode 100644 index 000000000..9e282e461 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectRxswinEOService.java @@ -0,0 +1,114 @@ +package com.jero.modules.project.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectRxswinEO; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + +/** + * @Description: rxswin表 + * @Author: jero-boot + * @Date: 2023-08-28 + * @Version: V1.0 + */ +public interface IProjectRxswinEOService extends IService { + + /** + * 保存 + * + * @param projectRxswinEO + * @return + */ + void add(ProjectRxswinEO projectRxswinEO); + + /** + * 更新 + * + * @param projectRxswinEO + * @return + */ + void editById(ProjectRxswinEO projectRxswinEO); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + ProjectRxswinEO queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); + + List getPageInfo(ProjectRxswinEO projectRxswinEO); + + /** + * 调取--第一层 + * @param pageNo + * @param pageSize + * @param projectRxswinEO + * @return + */ + Page getOnePage(Integer pageNo,Integer pageSize, ProjectRxswinEO projectRxswinEO); + + /** + * 调取--第二层 + * @param pageNo + * @param pageSize + * @param projectRxswinEO + * @return + */ + Page getTwoPage(Integer pageNo,Integer pageSize,ProjectRxswinEO projectRxswinEO); + + /** + * 提交 + * @param projectId + * @param ids + */ + void submitInfo(String projectId,String ids); + + /** + * 覆盖验证 + * @param projectId + * @param ids + */ + String iSExist(String projectId,String ids); + + + void addBatch(String projectId,String ids,String flag); + + List getVersionList(String projectId); + + ModelAndView exportXls(HttpServletRequest request, ProjectRxswinEO projectRxswinEO); + + void exportTemplate(Map map, HttpServletResponse response, HttpServletRequest request); + + void importExcel(MultipartFile file, String cut, String version, String projectId); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectRxswinEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectRxswinEOServiceImpl.java new file mode 100644 index 000000000..0d27f9d67 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectRxswinEOServiceImpl.java @@ -0,0 +1,838 @@ +package com.jero.modules.project.service.impl; + +import com.aliyuncs.utils.IOUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.constant.enums.CutEnum; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.PageUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; +import com.jero.modules.dummy.enums.OrderEnum; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectRxswinEO; +import com.jero.modules.project.entity.ProjectRxswinEOEn; +import com.jero.modules.project.enums.RxswinEnum; +import com.jero.modules.project.enums.StatusEnum; +import com.jero.modules.project.mapper.ProjectRxswinEOMapper; +import com.jero.modules.project.service.IProjectRxswinEOService; +import lombok.SneakyThrows; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.apache.shiro.SecurityUtils; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.OutputStream; +import java.text.Collator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * @Description: rxswin表 + * @Author: jero-boot + * @Date: 2023-08-28 + * @Version: V1.0 + */ +@Service +public class ProjectRxswinEOServiceImpl extends ServiceImpl implements IProjectRxswinEOService { + + @Autowired + private ProjectRxswinEOMapper projectRxswinEOMapper; + @Autowired + private BussDocumentLibraryEOServiceImpl bussDocumentLibraryEOService; + @Autowired + private ProjectLibraryBaseServiceImpl projectLibraryBaseService; + @Value(value = "${jero.path.upload}") + private String uploadpath; + + /** + * 保存 + * + * @param projectRxswinEO + * @return + */ + @Override + public void add(ProjectRxswinEO projectRxswinEO) { + //判断主题是否已存在 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectRxswinEO::getProjectId, projectRxswinEO.getProjectId()); + wrapper.eq(ProjectRxswinEO::getTheme, projectRxswinEO.getTheme()); + List rxswinEOList = this.list(wrapper); + if (!rxswinEOList.isEmpty()) { + throw new JeroBootException("主题:" + projectRxswinEO.getTheme() + "已存在,请重新添加"); + } + Date now = new Date(); + projectRxswinEO.setCreateTime(now); + projectRxswinEO.setUpdateTime(now); + projectRxswinEO.setState(StatusEnum.SAVE.getValue()); + save(projectRxswinEO); + } + + /** + * 更新 + * + * @param projectRxswinEO + * @return + */ + @Override + public void editById(ProjectRxswinEO projectRxswinEO) { + //判断主题是否存在 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectRxswinEO::getProjectId, projectRxswinEO.getProjectId()); + wrapper.eq(ProjectRxswinEO::getTheme, projectRxswinEO.getTheme()); + wrapper.ne(ProjectRxswinEO::getId, projectRxswinEO.getId()); + List rxswinEOList = this.list(wrapper); + if (!rxswinEOList.isEmpty()) { + throw new JeroBootException("主题:" + projectRxswinEO.getTheme() + "已存在,请重新添加"); + } + Date now = new Date(); + projectRxswinEO.setUpdateTime(now); + projectRxswinEO.setState(StatusEnum.SAVE.getValue()); + saveOrUpdate(projectRxswinEO); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public ProjectRxswinEO queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } + + @Override + public List getPageInfo(ProjectRxswinEO projectRxswinEO) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isBlank(projectRxswinEO.getProjectId())) { + return new ArrayList<>(); + } + wrapper.eq(ProjectRxswinEO::getProjectId, projectRxswinEO.getProjectId()); + + if (StringUtils.isNotBlank(projectRxswinEO.getTheme())) { + wrapper.like(ProjectRxswinEO::getTheme, projectRxswinEO.getTheme()); + } + if (StringUtils.isNotBlank(projectRxswinEO.getVersion())) { + wrapper.eq(ProjectRxswinEO::getVersion, projectRxswinEO.getVersion()); + } + if (StringUtils.isNotBlank(projectRxswinEO.getRxswin())) { + wrapper.like(ProjectRxswinEO::getRxswin, projectRxswinEO.getRxswin()); + } + if (StringUtils.isBlank(projectRxswinEO.getOrderByField())) { + wrapper.orderByDesc(ProjectRxswinEO::getCreateTime); + } + List projectRxswinEOList = this.list(wrapper); + + if (!projectRxswinEOList.isEmpty()) { + List documentIdList = projectRxswinEOList.stream().map(ProjectRxswinEO::getDocumentId).distinct().collect(Collectors.toList()); + List bussDocumentLibraryEOList = getBussDocumentLibraryEOList(documentIdList); + for (ProjectRxswinEO projectRxswinEOTemp : projectRxswinEOList) { + List collect = bussDocumentLibraryEOList.stream() + .filter(e -> e.getId().equals(projectRxswinEOTemp.getDocumentId())).collect(Collectors.toList()); + if (!collect.isEmpty()) { + projectRxswinEOTemp.setSerialNumber(collect.get(0).getSerialNumber()); + } + } + if (StringUtils.isNotBlank(projectRxswinEO.getSerialNumber())) { + projectRxswinEOList = projectRxswinEOList.stream() + .filter(e -> e.getSerialNumber().contains(projectRxswinEO.getSerialNumber())).collect(Collectors.toList()); + } + heartSort(projectRxswinEO, projectRxswinEOList); + } + return projectRxswinEOList; + } + + /** + * 调取--第一层 + * + * @param pageNo + * @param pageSize + * @param projectRxswinEO + * @return + */ + @Override + public Page getOnePage(Integer pageNo, Integer pageSize, ProjectRxswinEO projectRxswinEO) { + ProjectLibraryBase libraryBase = projectLibraryBaseService.getById(projectRxswinEO.getProjectId()); + String id = ""; + String parentId = ""; + if (StringUtils.isBlank(libraryBase.getParentId())) { + id = libraryBase.getId(); + parentId = libraryBase.getId(); + } else { + id = libraryBase.getParentId(); + parentId = libraryBase.getParentId(); + } + List libraryBaseList = projectRxswinEOMapper.queryProjectLibraryBaseList(id, parentId); + for (ProjectLibraryBase projectLibraryBase : libraryBaseList) { + //项目名称 + String projectName = ""; + if (CutEnum.CN.getValue().equals(projectRxswinEO.getCut())) { + projectName = projectLibraryBase.getProjectName() + " " + projectLibraryBase.getYearName() + + "-" + projectLibraryBase.getTargetMarketNameCn() + "-" + projectLibraryBase.getProjectVersion(); + } else { + projectName = projectLibraryBase.getProjectName() + " " + projectLibraryBase.getYearName() + + "-" + projectLibraryBase.getTargetMarketNameEn() + "-" + projectLibraryBase.getProjectVersion(); + } + projectLibraryBase.setProjectName(projectName); + } + Collections.sort(libraryBaseList); + return PageUtil.getPages(pageNo, pageSize, libraryBaseList); + } + + /** + * 调取--第二层 + * + * @param pageNo + * @param pageSize + * @param projectRxswinEO + * @return + */ + @Override + public Page getTwoPage(Integer pageNo, Integer pageSize, ProjectRxswinEO projectRxswinEO) { + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectRxswinEO::getProjectId, projectRxswinEO.getProjectId()); + wrapper.eq(ProjectRxswinEO::getState, StatusEnum.SUBMIT.getValue());//提交的 + + if (StringUtils.isNotBlank(projectRxswinEO.getTheme())) { + wrapper.like(ProjectRxswinEO::getTheme, projectRxswinEO.getTheme()); + } + if (StringUtils.isNotBlank(projectRxswinEO.getVersion())) { + wrapper.eq(ProjectRxswinEO::getVersion, projectRxswinEO.getVersion()); + } + if (StringUtils.isNotBlank(projectRxswinEO.getRxswin())) { + wrapper.like(ProjectRxswinEO::getRxswin, projectRxswinEO.getRxswin()); + } + if (StringUtils.isBlank(projectRxswinEO.getOrderByField())) { + wrapper.orderByDesc(ProjectRxswinEO::getCreateTime); + } + + List projectRxswinEOList = this.list(wrapper); + + if (!projectRxswinEOList.isEmpty()) { + List documentIdList = projectRxswinEOList.stream().map(ProjectRxswinEO::getDocumentId).distinct().collect(Collectors.toList()); + List bussDocumentLibraryEOList = getBussDocumentLibraryEOList(documentIdList); + for (ProjectRxswinEO projectRxswinEOTemp : projectRxswinEOList) { + List collect = bussDocumentLibraryEOList.stream() + .filter(e -> e.getId().equals(projectRxswinEOTemp.getDocumentId())).collect(Collectors.toList()); + if (!collect.isEmpty()) { + projectRxswinEOTemp.setSerialNumber(collect.get(0).getSerialNumber()); + } + } + if (StringUtils.isNotBlank(projectRxswinEO.getSerialNumber())) { + projectRxswinEOList = projectRxswinEOList.stream() + .filter(e -> e.getSerialNumber().contains(projectRxswinEO.getSerialNumber())).collect(Collectors.toList()); + } + heartSort(projectRxswinEO, projectRxswinEOList); + } + return PageUtil.getPages(pageNo, pageSize, projectRxswinEOList); + } + + /** + * 提交 + * + * @param projectId + * @param ids + */ + @Override + public void submitInfo(String projectId, String ids) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(ProjectRxswinEO::getId, Arrays.asList(ids.split(","))); + List rxswinEOList = this.list(wrapper); + for (ProjectRxswinEO projectRxswinEO : rxswinEOList) { + projectRxswinEO.setUpdateBy(user.getUsername()); + projectRxswinEO.setState(StatusEnum.SUBMIT.getValue()); + } + this.updateBatchById(rxswinEOList); + } + + /** + * 覆盖验证 + * + * @param projectId + * @param ids + */ + @Override + public String iSExist(String projectId, String ids) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + //新增的 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// wrapper.eq(ProjectRxswinEO::getProjectId, projectId); + wrapper.in(ProjectRxswinEO::getId, Arrays.asList(ids.split(","))); + List rxswinEOList = this.list(wrapper); + + //已存在的 + LambdaQueryWrapper wrapperTemp = new LambdaQueryWrapper<>(); + wrapperTemp.eq(ProjectRxswinEO::getProjectId, projectId); + List rxswinEOS = this.list(wrapperTemp); + + if (!rxswinEOS.isEmpty()) { + List themeList = rxswinEOS.stream().map(ProjectRxswinEO::getTheme).collect(Collectors.toList()); + List projectRxswinEOS = rxswinEOList.stream().filter(e -> themeList.contains(e.getTheme())).collect(Collectors.toList()); + if (projectRxswinEOS.isEmpty()) { + //直接新增 + saveBatchInfo(projectId, user, rxswinEOList); + } else { + return "YES"; + } + } else { + //直接新增 + saveBatchInfo(projectId, user, rxswinEOList); + } + return "NO"; + } + + private void saveBatchInfo(String projectId, LoginUser user, List rxswinEOList) { + for (ProjectRxswinEO projectRxswinEO : rxswinEOList) { + projectRxswinEO.setId(UUID.randomUUID().toString().replaceAll("-", "")); + projectRxswinEO.setProjectId(projectId); + projectRxswinEO.setCreateTime(new Date()); + projectRxswinEO.setCreateBy(user.getUsername()); + projectRxswinEO.setState(StatusEnum.SAVE.getValue()); + } + this.saveBatch(rxswinEOList); + } + + /** + * 调取后保存数据 + * + * @param projectId + * @param ids + * @param flag + */ + @Override + public void addBatch(String projectId, String ids, String flag) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + //新增的 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(ProjectRxswinEO::getId, Arrays.asList(ids.split(","))); + List rxswinEOList = this.list(wrapper); + + //已存在的 + LambdaQueryWrapper wrapperTemp = new LambdaQueryWrapper<>(); + wrapperTemp.eq(ProjectRxswinEO::getProjectId, projectId); + List rxswinEOS = this.list(wrapperTemp); + + List themeList = rxswinEOS.stream().map(ProjectRxswinEO::getTheme).collect(Collectors.toList()); + List yesList = rxswinEOList.stream().filter(e -> themeList.contains(e.getTheme())).collect(Collectors.toList()); + List noList = rxswinEOList.stream().filter(e -> !themeList.contains(e.getTheme())).collect(Collectors.toList()); + + + if (StatusEnum.COVER_YES.getValue().equals(flag)) { + //未存在的进行新增 + saveBatchInfo(projectId, user, noList); + + for (ProjectRxswinEO projectRxswinEO : yesList) { + List collect = rxswinEOS.stream() + .filter(e -> projectRxswinEO.getTheme().equals(e.getTheme())).collect(Collectors.toList()); + if (!collect.isEmpty()) { + projectRxswinEO.setId(collect.get(0).getId()); + projectRxswinEO.setCreateTime(collect.get(0).getCreateTime()); + } + projectRxswinEO.setUpdateTime(new Date()); + projectRxswinEO.setCreateBy(user.getUsername()); + projectRxswinEO.setState(StatusEnum.SAVE.getValue()); + projectRxswinEO.setProjectId(projectId); + } + //已存在的进行覆盖 + this.updateBatchById(yesList); + + + } else if (StatusEnum.COVER_NO.getValue().equals(flag)) { + saveBatchInfo(projectId, user, noList); + } + } + + @Override + public List getVersionList(String projectId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectRxswinEO::getProjectId, projectId); + List rxswinEOList = this.list(wrapper); + List versionList = rxswinEOList.stream() + .filter(e -> StringUtils.isNotBlank(e.getVersion())) + .map(ProjectRxswinEO::getVersion).distinct().collect(Collectors.toList()); + Collections.sort(versionList, (a, b) -> { + return Integer.parseInt(a) - Integer.parseInt(b); + }); + return versionList; + } + + @Override + public ModelAndView exportXls(HttpServletRequest request, ProjectRxswinEO projectRxswinEO) { + // Step.2 获取导出数据 + List pageList = getPageInfo(projectRxswinEO); + List exportList = null; + + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List selectionList = Arrays.asList(selections.split(",")); + exportList = pageList.stream().filter(e -> selectionList.contains(e.getId())).collect(Collectors.toList()); + } else { + exportList = pageList; + } + + // Step.3 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + if (CutEnum.CN.getValue().equals(projectRxswinEO.getCut())) { + mv.addObject(NormalExcelConstants.CLASS, ProjectRxswinEO.class); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + ExportParams exportParams = new ExportParams(null, null, "RXSWIN"); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + } else { + List dataList = new ArrayList<>(); + for (ProjectRxswinEO projectRxswinEOTemp : exportList) { + ProjectRxswinEOEn projectRxswinEOEn = new ProjectRxswinEOEn(); + BeanUtils.copyProperties(projectRxswinEOTemp, projectRxswinEOEn); + dataList.add(projectRxswinEOEn); + } + mv.addObject(NormalExcelConstants.CLASS, ProjectRxswinEOEn.class); + mv.addObject(NormalExcelConstants.DATA_LIST, dataList); + ExportParams exportParams = new ExportParams(null, null, "RXSWIN"); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + } + return mv; + } + + + public List getBussDocumentLibraryEOList(List documentIdList) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(BussDocumentLibraryEO::getId, documentIdList); + return bussDocumentLibraryEOService.list(wrapper); + } + + private void heartSort(ProjectRxswinEO projectRxswinEO, List projectRxswinEOList) { + Collator comparator = Collator.getInstance(Locale.CHINESE); + // 编号 + if ("serialNumber".equals(projectRxswinEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(projectRxswinEO.getOrderBy())) { + Collections.sort(projectRxswinEOList, (e1, e2) -> { + String e1PlannedBpLaunchBatch = com.jero.modules.system.util.StringUtils.isNotBlank(e1.getSerialNumber()) ? e1.getSerialNumber() : ""; + String e2PlannedBpLaunchBatch = com.jero.modules.system.util.StringUtils.isNotBlank(e2.getSerialNumber()) ? e2.getSerialNumber() : ""; + return comparator.compare(e1PlannedBpLaunchBatch, e2PlannedBpLaunchBatch); + }); + } else if (OrderEnum.REVERSE.getValue().equals(projectRxswinEO.getOrderBy())) { + Collections.sort(projectRxswinEOList, (e1, e2) -> { + String e1PlannedBpLaunchBatch = com.jero.modules.system.util.StringUtils.isNotBlank(e1.getSerialNumber()) ? e1.getSerialNumber() : ""; + String e2PlannedBpLaunchBatch = com.jero.modules.system.util.StringUtils.isNotBlank(e2.getSerialNumber()) ? e2.getSerialNumber() : ""; + return comparator.compare(e2PlannedBpLaunchBatch, e1PlannedBpLaunchBatch); + }); + } + } + // 主题 + if ("theme".equals(projectRxswinEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(projectRxswinEO.getOrderBy())) { + Collections.sort(projectRxswinEOList, (e1, e2) -> { + String e1Market = com.jero.modules.system.util.StringUtils.isNotBlank(e1.getTheme()) ? e1.getTheme() : ""; + String e2Market = com.jero.modules.system.util.StringUtils.isNotBlank(e2.getTheme()) ? e2.getTheme() : ""; + return comparator.compare(e1Market, e2Market); + }); + } else if (OrderEnum.REVERSE.getValue().equals(projectRxswinEO.getOrderBy())) { + Collections.sort(projectRxswinEOList, (e1, e2) -> { + String e1Market = com.jero.modules.system.util.StringUtils.isNotBlank(e1.getTheme()) ? e1.getTheme() : ""; + String e2Market = com.jero.modules.system.util.StringUtils.isNotBlank(e2.getTheme()) ? e2.getTheme() : ""; + return comparator.compare(e2Market, e1Market); + }); + } + } + //RXSWIN + if ("rxswin".equals(projectRxswinEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(projectRxswinEO.getOrderBy())) { + Collections.sort(projectRxswinEOList, (e1, e2) -> { + String e1Market = com.jero.modules.system.util.StringUtils.isNotBlank(e1.getRxswin()) ? e1.getRxswin() : ""; + String e2Market = com.jero.modules.system.util.StringUtils.isNotBlank(e2.getRxswin()) ? e2.getRxswin() : ""; + return comparator.compare(e1Market, e2Market); + }); + } else if (OrderEnum.REVERSE.getValue().equals(projectRxswinEO.getOrderBy())) { + Collections.sort(projectRxswinEOList, (e1, e2) -> { + String e1Market = com.jero.modules.system.util.StringUtils.isNotBlank(e1.getRxswin()) ? e1.getRxswin() : ""; + String e2Market = com.jero.modules.system.util.StringUtils.isNotBlank(e2.getRxswin()) ? e2.getRxswin() : ""; + return comparator.compare(e2Market, e1Market); + }); + } + } + + //对应版本 + if ("version".equals(projectRxswinEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(projectRxswinEO.getOrderBy())) { + Collections.sort(projectRxswinEOList, (e1, e2) -> { + String e1Market = com.jero.modules.system.util.StringUtils.isNotBlank(e1.getVersion()) ? e1.getVersion() : ""; + String e2Market = com.jero.modules.system.util.StringUtils.isNotBlank(e2.getVersion()) ? e2.getVersion() : ""; + return comparator.compare(e1Market, e2Market); + }); + } else if (OrderEnum.REVERSE.getValue().equals(projectRxswinEO.getOrderBy())) { + Collections.sort(projectRxswinEOList, (e1, e2) -> { + String e1Market = com.jero.modules.system.util.StringUtils.isNotBlank(e1.getVersion()) ? e1.getVersion() : ""; + String e2Market = com.jero.modules.system.util.StringUtils.isNotBlank(e2.getVersion()) ? e2.getVersion() : ""; + return comparator.compare(e2Market, e1Market); + }); + } + } + } + + @Override + public void exportTemplate(Map map, HttpServletResponse response, HttpServletRequest request) { + OutputStream os = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + String cut = (String) map.get("cut"); + String sheetName = ""; + if (com.jero.modules.system.util.StringUtils.equals(cut, CutEnum.CN.getValue())) { + sheetName = "RXSWIN"; + } else { + sheetName = "RXSWIN"; + } + String fileOriName = "文档库导入模板.xls"; + String filePath = uploadpath + File.separator + fileOriName; + try { + List list = new ArrayList<>(); + if (CutEnum.CN.getValue().equals((String) map.get("cut"))) { + list.add("编号,主题,RXSWIN,对应版本"); + } else { + list.add("No.,Theme,RXSWIN,Corresponding version"); + } + //创建临时文件夹 + File nowFile = new File(filePath); + if (nowFile.exists()) { + nowFile.delete(); + } + nowFile.mkdirs(); + HSSFSheet sheet = workbook.createSheet(sheetName); + sheet.setDefaultColumnWidth(16);//列宽 + HSSFCellStyle cellStyle = workbook.createCellStyle(); + cellStyle.setWrapText(true);//自动换行 + cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + + for (int i = 0; i < 1; i++) { + //表头 + Row row = sheet.createRow(i);//开始创建标题行 + String exportFieldName = list.get(i); + if (i == 0) { + if (com.jero.modules.system.util.StringUtils.isNotBlank(exportFieldName)) { + String[] headerArr = exportFieldName.split(","); + for (int j = 0; j < headerArr.length; j++) { + row.createCell(j).setCellValue(headerArr[j]); + } + } + } + } + response.setHeader("Content-Disposition", + "attachment; filename=\"" + fileOriName + ".xls"); + response.setContentType("application/force-download"); + response.flushBuffer(); + os = response.getOutputStream(); + workbook.write(os); + } catch (Exception e) { + throw new JeroBootException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + } + + } + + @SneakyThrows + @Override + public void importExcel(MultipartFile file, String cut, String version, String projectId) { + String title = ""; + if (CutEnum.CN.getValue().equals(cut)) { + title = "编号,主题,RXSWIN,对应版本"; + } else { + title = "No.,Theme,RXSWIN,Corresponding version"; + } + // 获取文件名 + String fileName = file.getOriginalFilename(); + // 获取文件后缀 + String prefix = fileName.substring(fileName.lastIndexOf(".")); + if (!(prefix.equals(".xls") || prefix.equals(".xlsx"))) { + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("文件格式错误,请导入.xls或.xlsx格式"); + } else { + throw new JeroBootException("The file format is wrong, please import. xls or. xlsx format."); + } + } + Workbook workbook = null; + try { + File excelFile = File.createTempFile(fileName, prefix); + file.transferTo(excelFile); + workbook = WorkbookFactory.create(excelFile); + } catch (Exception e) { + e.printStackTrace(); + } + List projectRxswinEOList = new ArrayList<>(); + if (workbook != null) { + Sheet sheet = workbook.getSheetAt(0); + if (sheet != null) { + StringBuilder headerSb = new StringBuilder(); + int rowNos = sheet.getLastRowNum();// 得到excel的总记录条数 + for (int i = 0; i <= rowNos; i++) { + Row row = sheet.getRow(i); + Row headerRow = sheet.getRow(0); + boolean isBlank = bussDocumentLibraryEOService.isRowEmpty(row); + ProjectRxswinEO projectRxswinEO = new ProjectRxswinEO(); + if (row != null && !isBlank) { + int columNos = headerRow.getLastCellNum();// 表头总共的列数 + for (int j = 0; j < columNos; j++) { + Cell cell = row.getCell(j); + Cell headerCell = headerRow.getCell(j); + if (cell != null) { + if (i == 0) { + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + headerSb.append(cell.getStringCellValue() + ","); + } else { + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + String stringCellValue = cell.getStringCellValue(); + if (StringUtils.isNotBlank(stringCellValue)) { + String replace = stringCellValue.replace(",", ","); + rxswinEOSet(projectRxswinEO, headerCell, replace); + } else { + rxswinEOSet(projectRxswinEO, headerCell, ""); + } + } + } else { + if (i != 0) { + rxswinEOSet(projectRxswinEO, headerCell, ""); + } + } + } + if (i != 0) { + projectRxswinEOList.add(projectRxswinEO); +// dataList.add(rowList); + } + } + } + String substring = headerSb.toString(); + if (substring.endsWith(",") || substring.endsWith(",")) { + substring = headerSb.substring(0, headerSb.length() - 1); + } + String excelHeader = substring.toString(); + if (!title.equals(excelHeader)) { + workbook.close(); + //删除原上传文件 + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("读取失败,请严格按照模板文件导入数据"); + } else { + throw new JeroBootException("The data fails to be read. Import data strictly according to the template file"); + } + } + } + } + List libraryEOList = bussDocumentLibraryEOService.list(); + List serialNumberList = libraryEOList.stream().map(BussDocumentLibraryEO::getSerialNumber).collect(Collectors.toList()); + + List msgList = new ArrayList<>(); + //数据验证 + dataVerify(cut, projectId, projectRxswinEOList, serialNumberList, msgList); + + if (msgList.size() > 0) { + //返回报错信息 + String html = ""; + for (String s : msgList) { + html += s + "
"; + } + throw new JeroBootException(html); + } else { + for (ProjectRxswinEO projectRxswinEO : projectRxswinEOList) { + projectRxswinEO.setProjectId(projectId); + projectRxswinEO.setState(StatusEnum.SAVE.getValue()); + List collect = libraryEOList.stream() + .filter(e -> e.getSerialNumber().equals(projectRxswinEO.getSerialNumber())) + .collect(Collectors.toList()); + if (!collect.isEmpty()) { + projectRxswinEO.setDocumentId(collect.get(0).getId()); + } + } + this.saveBatch(projectRxswinEOList); + } + + + } + + private void dataVerify(String cut, String projectId, List projectRxswinEOList, List serialNumberList, List msgList) { + List projectRxswinEOListTemp = projectRxswinEOList; + int number = 2; + int numberTemp = 2; + for (ProjectRxswinEO rxswinEO : projectRxswinEOListTemp) { + rxswinEO.setNumber(number); + number++; + } + for (ProjectRxswinEO projectRxswinEO : projectRxswinEOList) { + projectRxswinEO.setNumber(numberTemp); + numberTemp++; + } + int count = 2; + for (ProjectRxswinEO projectRxswinEO : projectRxswinEOList) { + StringBuilder errorMsg = new StringBuilder(); + if (CutEnum.CN.getValue().equals(cut)) { + errorMsg.append("第" + count + "行:"); + } else { + errorMsg.append(count + " line:"); + } + int countError = 0; + List rxswinEOS = projectRxswinEOListTemp.stream() + .filter(e -> !e.getNumber().equals(projectRxswinEO.getNumber()) && e.getTheme().equals(projectRxswinEO.getTheme())) + .collect(Collectors.toList()); + if(!rxswinEOS.isEmpty()){ + List numberList = rxswinEOS.stream().map(ProjectRxswinEO::getNumber).collect(Collectors.toList()); + if(CutEnum.CN.getValue().equals(cut)){ + errorMsg.append(RxswinEnum.TWO.getNameCn()+"与"+StringUtils.join(numberList,",")+"行主题重复,"); + }else{ + errorMsg.append(RxswinEnum.TWO.getNameEn()+" and "+StringUtils.join(numberList,",")+" are duplicated,"); + } + + countError ++; + } + projectRxswinEOListTemp = projectRxswinEOListTemp.stream().filter(e->!e.getTheme().equals(projectRxswinEO.getTheme())).collect(Collectors.toList()); + + String serialNumber = projectRxswinEO.getSerialNumber(); + String theme = projectRxswinEO.getTheme(); + String rxswin = projectRxswinEO.getRxswin(); + String versionTemp = projectRxswinEO.getVersion(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectRxswinEO::getProjectId, projectId); + wrapper.eq(ProjectRxswinEO::getTheme, theme); + List rxswinEOList = this.list(wrapper); + if (CutEnum.CN.getValue().equals(cut)) { + countError = isMust(errorMsg, RxswinEnum.ONE.getNameCn(), serialNumber, "不能为空,", countError); + //验证编号是否存在 + if (StringUtils.isNotBlank(serialNumber) && !serialNumberList.contains(serialNumber)) { + errorMsg.append(RxswinEnum.ONE.getNameCn() + "不存在,"); +// errorMsg += RxswinEnum.ONE.getNameCn()+"不存在,"; + countError++; + } + + countError = isMust(errorMsg, RxswinEnum.TWO.getNameCn(), theme, "不能为空,", countError); + //验证主题是否存在 + if (!rxswinEOList.isEmpty()) { + errorMsg.append(RxswinEnum.TWO.getNameCn() + "已存在,"); +// errorMsg += RxswinEnum.TWO.getNameCn()+"已存在,"; + countError++; + } + + countError = isMust(errorMsg, RxswinEnum.THREE.getNameCn(), rxswin, "不能为空,", countError); + countError = isMust(errorMsg, RxswinEnum.FOUR.getNameCn(), versionTemp, "不能为空,", countError); + } else { + countError = isMust(errorMsg, RxswinEnum.ONE.getNameEn(), serialNumber, " cannot be empty,", countError); + //验证编号是否存在 + if (StringUtils.isNotBlank(serialNumber) && !serialNumberList.contains(serialNumber)) { + errorMsg.append(RxswinEnum.ONE.getNameEn() + " absent,"); +// errorMsg += RxswinEnum.ONE.getNameEn()+" absent,"; + countError++; + } + + countError = isMust(errorMsg, RxswinEnum.TWO.getNameEn(), theme, " cannot be empty,", countError); + //验证主题是否存在 + if (!rxswinEOList.isEmpty()) { + errorMsg.append(RxswinEnum.TWO.getNameEn() + " already exists,"); +// errorMsg += RxswinEnum.TWO.getNameCn()+" already exists,"; + countError++; + } + + countError = isMust(errorMsg, RxswinEnum.THREE.getNameEn(), rxswin, " cannot be empty,", countError); + countError = isMust(errorMsg, RxswinEnum.FOUR.getNameEn(), versionTemp, " cannot be empty,", countError); + } + if (countError > 0) { + if (errorMsg.toString().endsWith(",")) { + String substring = errorMsg.substring(0, errorMsg.length() - 1); + msgList.add(substring); + } else { + msgList.add(errorMsg.toString()); + } + } + count++; + } + } + + private int isMust(StringBuilder errorMsg, String field, String value, String reminder, int countError) { + if (StringUtils.isBlank(value)) { + errorMsg.append(field + reminder); +// errorMsg += field + reminder; + countError++; + } + return countError; + } + + + private void rxswinEOSet(ProjectRxswinEO projectRxswinEO, Cell headerCell, String replace) { + if (RxswinEnum.ONE.getNameCn().equals(headerCell.getStringCellValue()) + || RxswinEnum.ONE.getNameEn().equals(headerCell.getStringCellValue())) { + projectRxswinEO.setSerialNumber(replace); + + } else if (RxswinEnum.TWO.getNameCn().equals(headerCell.getStringCellValue()) + || RxswinEnum.TWO.getNameEn().equals(headerCell.getStringCellValue())) { + projectRxswinEO.setTheme(replace); + + } else if (RxswinEnum.THREE.getNameCn().equals(headerCell.getStringCellValue()) + || RxswinEnum.THREE.getNameEn().equals(headerCell.getStringCellValue())) { + projectRxswinEO.setRxswin(replace); + + } else if (RxswinEnum.FOUR.getNameCn().equals(headerCell.getStringCellValue()) + || RxswinEnum.FOUR.getNameEn().equals(headerCell.getStringCellValue())) { + projectRxswinEO.setVersion(replace); + } + } +} diff --git a/jero-web/src/common/lang/en-us.js b/jero-web/src/common/lang/en-us.js index f46b83a73..709bdd937 100644 --- a/jero-web/src/common/lang/en-us.js +++ b/jero-web/src/common/lang/en-us.js @@ -1929,7 +1929,7 @@ module.exports = { softwareversion:'Software version', softwareplatform:'Software platform', softwarereleasetime:'Software release time', - theme:'theme', + theme:'Theme', influencestatute:'Influence statute', vdrste:'VDR status', impactdescription:'Impact description', @@ -1955,4 +1955,6 @@ module.exports = { Reasonforreturn:'Reason for return', maintenanceTemplate:'Maintenance template', UserFeedback:'User Feedback', + Correspondingversion:'Corresponding version', + Listcreationtime:'List creation time', } \ No newline at end of file diff --git a/jero-web/src/common/lang/zh-cn.js b/jero-web/src/common/lang/zh-cn.js index 0292fa24a..368809127 100644 --- a/jero-web/src/common/lang/zh-cn.js +++ b/jero-web/src/common/lang/zh-cn.js @@ -3911,4 +3911,6 @@ module.exports = { Modifyremarks:'修改备注', Reasonforreturn:'退回原因', UserFeedback:'用户反馈', + Correspondingversion:'对应版本', + Listcreationtime:'清单创建时间', } \ No newline at end of file diff --git a/jero-web/src/components/ImportFile/index.vue b/jero-web/src/components/ImportFile/index.vue index 138fe4892..58390b6dd 100644 --- a/jero-web/src/components/ImportFile/index.vue +++ b/jero-web/src/components/ImportFile/index.vue @@ -50,6 +50,10 @@ type: String, default: '' }, + version: { + type: String, + default: '' + }, paramsTemplateId: { type: String, default: '' @@ -73,6 +77,9 @@ computed: { importUrl() { if (this.projectId) { + if(this.version){ + return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&projectId=' + this.projectId +'&version=' + this.version + } return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&projectId=' + this.projectId } else if (this.dummyInventoryBaseId) { return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&dummyInventoryBaseId=' + this.dummyInventoryBaseId diff --git a/jero-web/src/components/StandardselectionRxswin/index.vue b/jero-web/src/components/StandardselectionRxswin/index.vue new file mode 100644 index 000000000..4d762cc9f --- /dev/null +++ b/jero-web/src/components/StandardselectionRxswin/index.vue @@ -0,0 +1,289 @@ + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/components/ProjectDetails.vue b/jero-web/src/views/projectManagement/components/ProjectDetails.vue index 060322c38..63246a914 100644 --- a/jero-web/src/views/projectManagement/components/ProjectDetails.vue +++ b/jero-web/src/views/projectManagement/components/ProjectDetails.vue @@ -69,13 +69,24 @@ {{queryForm.vehiclePlatform}} +
+ RXSWIN + + + + RXSWIN{{$t('detailedList')}} + + +
+ +
{{$t('softwareVersion')}} {{queryForm.softwareVersion}}
-
-
{{$t('dehicleDevelopmentPlan')}} {{queryForm.attestationPlan}}
+ + + + + + + +
+
{{$t('configurationInformation')}} {{queryForm.ipdInfo}}
-
-
-
+
{{$t('explain')}} {{queryForm.explanation}} @@ -153,6 +171,7 @@ @projectStatusForm="projectStatusForm"/> +
@@ -161,6 +180,7 @@ + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/components/transferListRxswin.vue b/jero-web/src/views/projectManagement/components/transferListRxswin.vue new file mode 100644 index 000000000..06462dac8 --- /dev/null +++ b/jero-web/src/views/projectManagement/components/transferListRxswin.vue @@ -0,0 +1,233 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/components/transferListvirtalRxswin.vue b/jero-web/src/views/projectManagement/components/transferListvirtalRxswin.vue new file mode 100644 index 000000000..f3e961882 --- /dev/null +++ b/jero-web/src/views/projectManagement/components/transferListvirtalRxswin.vue @@ -0,0 +1,370 @@ + + + + + \ No newline at end of file