新增:责任人导入功能
This commit is contained in:
parent
7f252ad4e0
commit
99e94f7d87
@ -5,6 +5,7 @@ import com.definesys.mpaas.query.db.PageQueryResult;
|
||||
import com.xdap.api.moudle.department.pojo.entity.XdapDepartments;
|
||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||
import com.xdap.runtime.service.RuntimeDatasourceService;
|
||||
import com.xdap.self_development.common.MyResponse;
|
||||
import com.xdap.self_development.controller.form.*;
|
||||
import com.xdap.self_development.exception.CommonException;
|
||||
import com.xdap.self_development.pojo.ResponsiblePerson;
|
||||
@ -12,8 +13,10 @@ import com.xdap.self_development.pojo.view.DepartmentUserView;
|
||||
import com.xdap.self_development.service.ResponsiblePersonService;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.ArrayList;
|
||||
@ -28,6 +31,36 @@ public class ResponsiblePersonController {
|
||||
@Resource
|
||||
private ResponsiblePersonService responsiblePersonService;
|
||||
|
||||
// 导入责任人
|
||||
@PostMapping("/import")
|
||||
public Response importPerson(
|
||||
@RequestPart("file") MultipartFile file,
|
||||
@RequestPart("userId") String userId
|
||||
) {
|
||||
MyResponse templateImportView = responsiblePersonService.importPerson(file, userId);
|
||||
if (templateImportView.getFlag()) {
|
||||
return Response.error("导入异常").data(templateImportView);
|
||||
} else {
|
||||
return Response.ok().setMessage("导入成功");
|
||||
}
|
||||
}
|
||||
|
||||
// 导出责任人
|
||||
@GetMapping("/export")
|
||||
public void exportPerson(
|
||||
HttpServletResponse response
|
||||
) {
|
||||
responsiblePersonService.exportPerson(response);
|
||||
}
|
||||
|
||||
// 获取导入模板
|
||||
@GetMapping("/getImportTemplate")
|
||||
public void getImportTemplate(
|
||||
HttpServletResponse response
|
||||
) {
|
||||
responsiblePersonService.exportVoidPerson(response);
|
||||
}
|
||||
|
||||
// 判断是否为责任人
|
||||
@GetMapping("/isResponsiblePerson")
|
||||
public Response isResponsiblePerson(
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
package com.xdap.self_development.listener;
|
||||
|
||||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.read.listener.ReadListener;
|
||||
import com.xdap.self_development.common.MyResponse;
|
||||
import com.xdap.self_development.pojo.ResponsiblePerson;
|
||||
import com.xdap.self_development.pojo.view.XdapUserView;
|
||||
import com.xdap.self_development.service.ResponsiblePersonService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class PersonReadListener implements ReadListener<ResponsiblePerson> {
|
||||
MyResponse problems;
|
||||
private final ResponsiblePersonService responsiblePersonService;
|
||||
private List<ResponsiblePerson> cachedDataList;
|
||||
|
||||
public PersonReadListener(ResponsiblePersonService responsiblePersonService, MyResponse problems) {
|
||||
this.problems = problems;
|
||||
this.responsiblePersonService = responsiblePersonService;
|
||||
this.cachedDataList = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(ResponsiblePerson responsiblePerson, AnalysisContext analysisContext) {
|
||||
XdapUserView user = responsiblePersonService
|
||||
.getUserByDeptAndName(responsiblePerson.getDepartment(), responsiblePerson.getPartsName());
|
||||
if (user == null || user.getUserId() == null) {
|
||||
problems.setFlag(true);
|
||||
problems.getErrors().add("责任人导入失败:" + responsiblePerson.getPartsName() + "无法找到");
|
||||
} else {
|
||||
responsiblePerson.setUserId(user.getUserId());
|
||||
responsiblePerson.setDepartmentId(user.getDepartmentId());
|
||||
cachedDataList.add(responsiblePerson);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||
responsiblePersonService.importAllPerson(cachedDataList, problems);
|
||||
cachedDataList.clear();
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package com.xdap.self_development.pojo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.definesys.mpaas.query.annotation.*;
|
||||
import com.definesys.mpaas.query.model.MpaasBasePojo;
|
||||
import lombok.Data;
|
||||
@ -17,11 +18,14 @@ public class ResponsiblePerson extends MpaasBasePojo {
|
||||
private String id;
|
||||
private String departmentId;
|
||||
private String userId;
|
||||
@ExcelProperty("责任部门")
|
||||
private String department;
|
||||
@ExcelProperty("子系统")
|
||||
private String subsystem;
|
||||
private String partsName;
|
||||
private Integer personLevel;
|
||||
|
||||
@ExcelProperty("责任人")
|
||||
@Column(type = ColumnType.CALCULATE)
|
||||
private String username;
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package com.xdap.self_development.pojo.view;
|
||||
|
||||
import com.definesys.mpaas.query.annotation.SQL;
|
||||
import com.definesys.mpaas.query.annotation.SQLQuery;
|
||||
import lombok.Data;
|
||||
|
||||
@SQLQuery(value = {
|
||||
@SQL(view = "getUserByDeptAndName",
|
||||
sql = "SELECT xu.id AS userId, xd.id AS departmentId FROM xdap_users xu LEFT JOIN xdap_dept_users xdu ON xu.id = xdu.user_id LEFT JOIN xdap_departments xd ON xdu.department_id = xd.id WHERE xu.username = #username AND xd.structure_name = #department")
|
||||
})
|
||||
@Data
|
||||
public class XdapUserView {
|
||||
private String userId;
|
||||
private String departmentId;
|
||||
}
|
||||
@ -2,12 +2,17 @@ package com.xdap.self_development.service;
|
||||
|
||||
import com.definesys.mpaas.query.db.PageQueryResult;
|
||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||
import com.xdap.self_development.common.MyResponse;
|
||||
import com.xdap.self_development.controller.form.*;
|
||||
import com.xdap.self_development.pojo.ResponsiblePerson;
|
||||
import com.xdap.self_development.pojo.view.XdapUserView;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public interface ResponsiblePersonService {
|
||||
@ -29,4 +34,14 @@ public interface ResponsiblePersonService {
|
||||
|
||||
Set<String> getAllSubsystem();
|
||||
ArrayList<XdapUsers> getUserBydepartment(String dept,String subsystem);
|
||||
|
||||
void exportPerson(HttpServletResponse response);
|
||||
|
||||
void exportVoidPerson(HttpServletResponse response);
|
||||
|
||||
MyResponse importPerson(MultipartFile file, String userId);
|
||||
|
||||
XdapUserView getUserByDeptAndName(@NotBlank String dept, @NotBlank String name);
|
||||
|
||||
void importAllPerson(List<ResponsiblePerson> cachedDataList, MyResponse problems);
|
||||
}
|
||||
|
||||
@ -1,19 +1,32 @@
|
||||
package com.xdap.self_development.service.impl;
|
||||
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
||||
import com.definesys.mpaas.query.db.PageQueryResult;
|
||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||
import com.xdap.runtime.service.RuntimeDatasourceService;
|
||||
import com.xdap.self_development.common.MyResponse;
|
||||
import com.xdap.self_development.config.BusinessDatabase;
|
||||
import com.xdap.self_development.controller.form.*;
|
||||
import com.xdap.self_development.exception.CommonException;
|
||||
import com.xdap.self_development.listener.PersonReadListener;
|
||||
import com.xdap.self_development.pojo.Parameter;
|
||||
import com.xdap.self_development.pojo.ResponsiblePerson;
|
||||
import com.xdap.self_development.pojo.view.XdapUserView;
|
||||
import com.xdap.self_development.service.ResponsiblePersonService;
|
||||
import com.xdap.self_development.service.XdapDeptUsersService;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@ -156,4 +169,127 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService {
|
||||
}
|
||||
return xdapUsers1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportPerson(HttpServletResponse response) {
|
||||
String fileName = "部门责任人_" +
|
||||
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"));
|
||||
try {
|
||||
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
|
||||
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||
response.setHeader("Pragma", "no-cache");
|
||||
response.setDateHeader("Expires", 0);
|
||||
|
||||
List<ResponsiblePerson> list = bd.getBusinessDatabase()
|
||||
.viewQueryMode(true).view("getResponsibleAndName")
|
||||
.setVar("level", 1)
|
||||
.doQuery(ResponsiblePerson.class);
|
||||
|
||||
EasyExcel.write(response.getOutputStream(), ResponsiblePerson.class)
|
||||
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
||||
.includeColumnFieldNames(getIncludeColumnFieldNames())
|
||||
.sheet("责任人")
|
||||
.doWrite(list);
|
||||
} catch (Exception e) {
|
||||
throw new CommonException("导出Excel失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportVoidPerson(HttpServletResponse response) {
|
||||
String fileName = "部门责任人导入模板_" +
|
||||
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"));
|
||||
try {
|
||||
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
|
||||
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||
response.setHeader("Pragma", "no-cache");
|
||||
response.setDateHeader("Expires", 0);
|
||||
|
||||
List<ResponsiblePerson> list = new ArrayList<>();
|
||||
list.add(new ResponsiblePerson());
|
||||
|
||||
EasyExcel.write(response.getOutputStream(), ResponsiblePerson.class)
|
||||
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
||||
.includeColumnFieldNames(getIncludeColumnFieldNames())
|
||||
.sheet("责任人")
|
||||
.doWrite(list);
|
||||
} catch (Exception e) {
|
||||
throw new CommonException("导出Excel失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public MyResponse importPerson(MultipartFile file, String userId) {
|
||||
// 验证文件是否为工作表
|
||||
if (file == null || file.isEmpty()) {
|
||||
throw new CommonException("文件不能为空");
|
||||
}
|
||||
|
||||
String filename = file.getOriginalFilename();
|
||||
if (filename == null ||
|
||||
!(filename.toLowerCase().endsWith(".xls") ||
|
||||
filename.toLowerCase().endsWith(".xlsx"))) {
|
||||
throw new CommonException("只支持 .xls 或 .xlsx 格式的文件");
|
||||
}
|
||||
MyResponse problems =
|
||||
new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入:无"));
|
||||
|
||||
try (InputStream inputStream = file.getInputStream()) {
|
||||
EasyExcel.read(
|
||||
inputStream,
|
||||
Parameter.class,
|
||||
new PersonReadListener(this, problems)
|
||||
).doReadAll();
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new CommonException("读取文件失败");
|
||||
}
|
||||
|
||||
return problems;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XdapUserView getUserByDeptAndName(String dept, String name) {
|
||||
return bd.getBusinessDatabase()
|
||||
.viewQueryMode(true)
|
||||
.view("getResponsibleAndName")
|
||||
.setVar("department", dept)
|
||||
.setVar("username", name)
|
||||
.doQueryFirst(XdapUserView.class);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void importAllPerson(List<ResponsiblePerson> cachedDataList, MyResponse problems) {
|
||||
cachedDataList.forEach(item -> {
|
||||
List<ResponsiblePerson> responsiblePeople = bd.getBusinessDatabase()
|
||||
.eq("department_id", item.getDepartmentId())
|
||||
.eq("subsystem", item.getSubsystem())
|
||||
.eq("personLevel", 1)
|
||||
.doQuery(ResponsiblePerson.class);
|
||||
|
||||
if (!responsiblePeople.isEmpty()) {
|
||||
problems.setFlag(false);
|
||||
problems.getErrors().add("部门:" + item.getDepartment() + "子系统:" + item.getSubsystem() + "已存在责任人");
|
||||
} else {
|
||||
bd.getBusinessDatabase().doInsert(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private List<String> getIncludeColumnFieldNames() {
|
||||
List<String> fieldNames = new ArrayList<>();
|
||||
fieldNames.add("department");
|
||||
fieldNames.add("subsystem");
|
||||
fieldNames.add("username");
|
||||
return fieldNames;
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,6 @@ import com.alibaba.excel.write.metadata.WriteSheet;
|
||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
||||
import com.definesys.mpaas.query.db.PageQueryResult;
|
||||
import com.xdap.self_development.common.MyResponse;
|
||||
import com.xdap.self_development.common.UserPermissionGetter;
|
||||
import com.xdap.self_development.config.BusinessDatabase;
|
||||
import com.xdap.self_development.controller.form.*;
|
||||
import com.xdap.self_development.exception.CommonException;
|
||||
@ -39,8 +38,6 @@ import java.util.stream.Collectors;
|
||||
public class TemplateServiceImpl implements TemplateService {
|
||||
@Resource
|
||||
private BusinessDatabase bd;
|
||||
@Resource
|
||||
private UserPermissionGetter permissionGetter;
|
||||
|
||||
@Override
|
||||
public PageQueryResult<Template> getTemplateByCondition(TemplatePageForm form) {
|
||||
@ -187,13 +184,6 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
|
||||
List<Parameter> list;
|
||||
if (form.isTemplateEmpty()) {
|
||||
// list = bd.getBusinessDatabase()
|
||||
// .viewQueryMode(true)
|
||||
// .view("selectParametersByTId")
|
||||
// .setVar("templateId", templateDB.getId())
|
||||
// .select("parameterName", "parameterNumber")
|
||||
// .orderBy("parameterNumber", "asc")
|
||||
// .doQuery(Parameter.class);
|
||||
list = new ArrayList<>();
|
||||
list.add(new Parameter());
|
||||
} else {
|
||||
@ -363,6 +353,7 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
Parameter existingParam = existingParamMap.get(key);
|
||||
if (existingParam != null) {
|
||||
newParam.setId(existingParam.getId());
|
||||
String datils = getParameterChange(existingParam, newParam);
|
||||
bd.getBusinessDatabase()
|
||||
.eq("id", newParam.getId())
|
||||
.doUpdate(newParam);
|
||||
@ -372,7 +363,7 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
targetTemplate.getTemplateName(),
|
||||
targetTemplate.getVersion(),
|
||||
newParam.getParameterNumber(),
|
||||
"更新参数",
|
||||
datils,
|
||||
targetTemplate.getId(),
|
||||
existingParam.getId(),
|
||||
Timestamp.valueOf(LocalDateTime.now()),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user