| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 |
- package jnpf.base.controller;
- import cn.dev33.satoken.annotation.SaCheckPermission;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.google.common.collect.Lists;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.Parameter;
- import io.swagger.v3.oas.annotations.Parameters;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import jakarta.validation.Valid;
- import jnpf.base.ActionResult;
- import jnpf.base.entity.DictionaryDataEntity;
- import jnpf.base.entity.PrintDevEntity;
- import jnpf.base.entity.PrintVersionEntity;
- import jnpf.base.entity.SystemEntity;
- import jnpf.base.model.print.*;
- import jnpf.base.model.query.PrintDevDataQuery;
- import jnpf.base.model.query.PrintDevParam;
- import jnpf.base.model.vo.PrintDevListVO;
- import jnpf.base.model.vo.PrintDevVO;
- import jnpf.base.service.DictionaryDataService;
- import jnpf.base.service.PrintDevService;
- import jnpf.base.service.PrintVersionService;
- import jnpf.base.service.SystemService;
- import jnpf.base.vo.DownloadVO;
- import jnpf.base.vo.ListVO;
- import jnpf.base.vo.PageListVO;
- import jnpf.base.vo.PaginationVO;
- import jnpf.config.ConfigValueUtil;
- import jnpf.constant.CodeConst;
- import jnpf.constant.FileTypeConstant;
- import jnpf.constant.MsgCode;
- import jnpf.emnus.ModuleTypeEnum;
- import jnpf.exception.DataException;
- import jnpf.exception.WorkFlowException;
- import jnpf.permission.entity.UserEntity;
- import jnpf.permission.service.CodeNumService;
- import jnpf.permission.service.UserService;
- import jnpf.util.*;
- import jnpf.util.context.RequestContext;
- import jnpf.util.enums.DictionaryDataEnum;
- import org.apache.commons.collections4.CollectionUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.http.MediaType;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * 打印模板 -控制器
- *
- * @author JNPF开发平台组
- * @version V3.2.0
- * @copyright 引迈信息技术有限公司
- * @date 2019年9月30日
- */
- @Tag(name = "打印模板", description = "print")
- @RestController
- @RequestMapping("/api/system/printDev")
- public class PrintDevController {
- @Autowired
- private PrintDevService printDevService;
- @Autowired
- private PrintVersionService versionService;
- @Autowired
- private FileExport fileExport;
- @Autowired
- private ConfigValueUtil configValueUtil;
- @Autowired
- private DictionaryDataService dictionaryDataService;
- @Autowired
- private UserService userService;
- @Autowired
- private CodeNumService codeNumService;
- @Autowired
- private SystemService systemService;
- @Operation(summary = "列表")
- @SaCheckPermission("onlineDev.printDev")
- @GetMapping
- public ActionResult list(PaginationPrint paginationPrint) {
- SystemEntity systemEntity = systemService.getInfoByEnCode(RequestContext.getAppCode());
- paginationPrint.setSystemId(systemEntity.getId());
- List<PrintDevEntity> list = printDevService.getList(paginationPrint);
- List<String> userId = list.stream().map(t -> t.getCreatorUserId()).collect(Collectors.toList());
- List<String> lastUserId = list.stream().map(t -> t.getLastModifyUserId()).collect(Collectors.toList());
- lastUserId.removeAll(Collections.singleton(null));
- List<UserEntity> userEntities = userService.getUserName(userId);
- List<UserEntity> lastUserIdEntities = userService.getUserName(lastUserId);
- List<DictionaryDataEntity> typeList = dictionaryDataService.getListByTypeDataCode(DictionaryDataEnum.SYSTEM_PRINTDEV.getDictionaryTypeId());
- List<PrintDevListVO> listVOS = new ArrayList<>();
- for (PrintDevEntity entity : list) {
- PrintDevListVO vo = JsonUtil.getJsonToBean(entity, PrintDevListVO.class);
- DictionaryDataEntity dataEntity = typeList.stream().filter(t -> t.getId().equals(entity.getCategory())).findFirst().orElse(null);
- if (dataEntity != null) {
- vo.setCategory(dataEntity.getFullName());
- } else {
- vo.setCategory("");
- }
- //创建者
- UserEntity creatorUser = userEntities.stream().filter(t -> t.getId().equals(entity.getCreatorUserId())).findFirst().orElse(null);
- vo.setCreatorUser(creatorUser != null ? creatorUser.getRealName() + "/" + creatorUser.getAccount() : entity.getCreatorUserId());
- //修改人
- UserEntity lastModifyUser = lastUserIdEntities.stream().filter(t -> t.getId().equals(entity.getLastModifyUserId())).findFirst().orElse(null);
- vo.setLastModifyUser(lastModifyUser != null ? lastModifyUser.getRealName() + "/" + lastModifyUser.getAccount() : entity.getLastModifyUserId());
- listVOS.add(vo);
- }
- PaginationVO paginationVO = JsonUtil.getJsonToBean(paginationPrint, PaginationVO.class);
- return ActionResult.page(listVOS, paginationVO);
- }
- /*============模板增删改==============*/
- @Operation(summary = "新增")
- @Parameters({
- @Parameter(name = "printDevForm", description = "打印模板数据传输对象")
- })
- @SaCheckPermission("onlineDev.printDev")
- @PostMapping
- public ActionResult create(@RequestBody @Valid PrintDevFormDTO printDevForm) {
- SystemEntity systemEntity = systemService.getInfoByEnCode(RequestContext.getAppCode());
- printDevForm.setSystemId(systemEntity.getId());
- printDevService.create(printDevForm);
- return ActionResult.success(MsgCode.SU001.get(), printDevForm.getId());
- }
- @Operation(summary = "详情")
- @Parameters({
- @Parameter(name = "id", description = "打印模板id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @GetMapping("/{id}")
- public ActionResult<PrintDevInfoVO> info(@PathVariable("id") String id) {
- PrintDevEntity byId = printDevService.getById(id);
- PrintDevInfoVO vo = JsonUtil.getJsonToBean(byId, PrintDevInfoVO.class);
- return ActionResult.success(vo);
- }
- @Operation(summary = "更新")
- @PutMapping("/{id}")
- @Parameters({
- @Parameter(name = "id", description = "主键", required = true),
- @Parameter(name = "form", description = "流程模型", required = true),
- })
- public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid PrintDevFormDTO printDevForm) throws WorkFlowException {
- PrintDevEntity printDevEntity = JsonUtil.getJsonToBean(printDevForm, PrintDevEntity.class);
- PrintDevEntity originEntity = printDevService.getById(id);
- printDevService.creUpdateCheck(printDevEntity,
- !originEntity.getFullName().equals(printDevForm.getFullName()),
- !originEntity.getEnCode().equals(printDevForm.getEnCode()));
- printDevEntity.setId(id);
- if (StringUtil.isEmpty(printDevEntity.getEnCode())) {
- printDevEntity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.DY), code -> printDevService.isExistByEnCode(code, id)));
- }
- printDevEntity.setLastModifyTime(DateUtil.getNowDate());
- printDevEntity.setLastModifyUserId(UserProvider.getUser().getUserId());
- printDevService.updateById(printDevEntity);
- return ActionResult.success(MsgCode.SU004.get());
- }
- @Operation(summary = "删除")
- @Parameters({
- @Parameter(name = "id", description = "打印模板id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @DeleteMapping("/{id}")
- public ActionResult<PrintDevFormDTO> delete(@PathVariable String id) {
- //对象存在判断
- if (printDevService.getById(id) != null) {
- printDevService.removeById(id);
- versionService.removeByTemplateId(id);
- return ActionResult.success(MsgCode.SU003.get());
- } else {
- return ActionResult.fail(MsgCode.FA003.get());
- }
- }
- /*============版本增删改==============*/
- @Operation(summary = "版本详情")
- @Parameters({
- @Parameter(name = "versionId", description = "打印版本id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @GetMapping("/Info/{versionId}")
- public ActionResult<PrintDevInfoVO> versionInfo(@PathVariable String versionId) {
- PrintDevInfoVO info = printDevService.getVersionInfo(versionId);
- return ActionResult.success(info);
- }
- @Operation(summary = "版本新增")
- @Parameters({
- @Parameter(name = "versionId", description = "打印版本id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @PostMapping("/Info/{versionId}")
- public ActionResult copyVersion(@PathVariable String versionId) {
- String newVersionId = versionService.copyVersion(versionId);
- return ActionResult.success(MsgCode.SU005.get(), newVersionId);
- }
- @Operation(summary = "版本删除")
- @Parameters({
- @Parameter(name = "versionId", description = "打印版本id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @DeleteMapping("/Info/{versionId}")
- public ActionResult deleteVersion(@PathVariable String versionId) {
- PrintVersionEntity byId = versionService.getById(versionId);
- if (byId != null) {
- List<PrintVersionEntity> list = versionService.getList(byId.getTemplateId());
- if (list.size() == 1) {
- return ActionResult.fail(MsgCode.SYS043.get());
- }
- if (Objects.equals(byId.getState(), 1)) {
- return ActionResult.fail(MsgCode.SYS044.get());
- }
- if (Objects.equals(byId.getState(), 2)) {
- return ActionResult.fail(MsgCode.SYS045.get());
- }
- versionService.removeById(versionId);
- }
- return ActionResult.success(MsgCode.SU003.get());
- }
- @Operation(summary = "版本列表")
- @Parameters({
- @Parameter(name = "id", description = "打印模板id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @GetMapping("/Version/{id}")
- public ActionResult<List<PrintVersionListVO>> versionList(@PathVariable String id) {
- List<PrintVersionEntity> list = versionService.getList(id);
- List<PrintVersionListVO> listVO = new ArrayList<>();
- for (PrintVersionEntity jsonEntity : list) {
- PrintVersionListVO vo = JsonUtil.getJsonToBean(jsonEntity, PrintVersionListVO.class);
- vo.setFullName("打印版本V" + vo.getVersion());
- listVO.add(vo);
- }
- return ActionResult.success(listVO);
- }
- //***********************************动作start
- @Operation(summary = "保存或者发布")
- @Parameters({
- @Parameter(name = "printDevForm", description = "打印模板数据传输对象")
- })
- @SaCheckPermission("onlineDev.printDev")
- @PostMapping("/Save")
- public ActionResult saveOrRelease(@RequestBody @Valid PrintDevUpForm form) {
- printDevService.saveOrRelease(form);
- if (Objects.equals(form.getType(), 1)) {
- return ActionResult.success(MsgCode.SU011.get());
- }
- return ActionResult.success(MsgCode.SU002.get());
- }
- @Operation(summary = "复制")
- @Parameters({
- @Parameter(name = "id", description = "打印模板id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @PostMapping("/{id}/Actions/Copy")
- public ActionResult<PageListVO<PrintDevEntity>> copy(@PathVariable String id) {
- printDevService.copyPrintdev(id);
- return ActionResult.success(MsgCode.SU007.get());
- }
- @Operation(summary = "导出")
- @Parameters({
- @Parameter(name = "id", description = "打印模板id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @GetMapping("/{id}/Actions/Export")
- public ActionResult<DownloadVO> export(@PathVariable String id) {
- PrintDevEntity entity = printDevService.getById(id);
- List<PrintVersionEntity> list = versionService.getList(id);
- if (CollectionUtils.isEmpty(list)) {
- return ActionResult.fail(MsgCode.FA001.get());
- }
- PrintDevInfoVO info = printDevService.getVersionInfo(list.get(0).getId());
- info.setSystemId(entity.getSystemId());
- //导出文件
- DownloadVO downloadVO = fileExport.exportFile(info, FileTypeConstant.TEMPORARY, entity.getFullName(), ModuleTypeEnum.SYSTEM_PRINT.getTableName());
- return ActionResult.success(downloadVO);
- }
- @Operation(summary = "导入")
- @SaCheckPermission("onlineDev.printDev")
- @PostMapping(value = "/Actions/Import", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
- public ActionResult<PageListVO<PrintDevEntity>> importData(@RequestPart("file") MultipartFile multipartFile,
- @RequestParam("type") Integer type) throws DataException {
- SystemEntity sysInfo = systemService.getInfoByEnCode(RequestContext.getAppCode());
- if (sysInfo == null) {
- return ActionResult.fail(MsgCode.FA001.get());
- }
- //判断是否为.json结尾
- if (FileUtil.existsSuffix(multipartFile, ModuleTypeEnum.SYSTEM_PRINT.getTableName())) {
- return ActionResult.fail(MsgCode.IMP002.get());
- }
- //读取文件内容
- String fileContent = FileUtil.getFileContent(multipartFile);
- PrintDevInfoVO infVo = JsonUtil.getJsonToBean(fileContent, PrintDevInfoVO.class);
- if (!sysInfo.getId().equals(infVo.getSystemId())) {
- infVo.setId(RandomUtil.uuId());
- infVo.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.DY), code -> printDevService.isExistByEnCode(code, null)));
- infVo.setSystemId(sysInfo.getId());
- }
- String str = printDevService.importData(infVo, type);
- if (StringUtil.isNotEmpty(str)) {
- return ActionResult.fail(str);
- }
- return ActionResult.success(MsgCode.IMP001.get());
- }
- //***********************************动作end
- /**
- * 下拉列表
- *
- * @return 返回列表数据
- */
- @Operation(summary = "下拉列表")
- @GetMapping("/Selector")
- public ActionResult<ListVO<PrintDevVO>> selectorList(String category) throws Exception {
- ListVO<PrintDevVO> vo = new ListVO<>();
- vo.setList(printDevService.getTreeModel(category));
- return ActionResult.success(vo);
- }
- @Operation(summary = "Sql数据获取")
- @PostMapping("/BatchData")
- public ActionResult getBatchData(@RequestBody PrintDevDataQuery query) {
- String id = XSSEscape.escape(query.getId());
- PrintDevEntity entity = printDevService.getById(id);
- if (entity == null) {
- return ActionResult.fail(MsgCode.PRI001.get());
- }
- ArrayList<Object> list = new ArrayList<>();
- if (query.getFormInfo() != null && query.getFormInfo().size() > 0) {
- List<PrintDevParam> flowTaskInfo = query.getFormInfo();
- for (PrintDevParam rid : flowTaskInfo) {
- String oneId = "";
- String flowTaskId = "";
- if (Objects.nonNull(rid.getFormId())) {
- oneId = XSSEscape.escape(rid.getFormId().toString());
- }
- if (Objects.nonNull(rid.getFlowTaskId())) {
- flowTaskId = XSSEscape.escape(rid.getFlowTaskId().toString());
- }
- Map<String, Object> dataMap = printDevService.getDataMap(id, oneId, flowTaskId, query.getMap());
- dataMap.put("fullName", entity.getFullName());
- //打印全局配置
- if (Objects.nonNull(dataMap.get("globalConfig"))) {
- duoLianDaYin(dataMap, list);
- } else {
- list.add(dataMap);
- }
- }
- return ActionResult.success(list);
- }
- return ActionResult.success(list);
- }
- /**
- * 多联打印配置
- *
- * @param dataMap
- * @param list
- */
- private static void duoLianDaYin(Map<String, Object> dataMap, ArrayList<Object> list) {
- Map<String, Object> thisData = new HashMap<>(dataMap);
- Map<String, Object> printData = (Map<String, Object>) thisData.get("printData");
- GlobalConfig globalConfig = JsonUtil.getJsonToBean(dataMap.get("globalConfig").toString(), GlobalConfig.class);
- List<SliceConfig> sliceConfigList = globalConfig.getSliceConfig();
- List<SliceConfig> newSliceConfigList = sliceConfigList.stream().filter(t -> StringUtil.isNotEmpty(t.getDataSet()) && t.getLimit() != null
- && t.getLimit() > 0).collect(Collectors.toList());
- //无效配置不处理
- if (CollectionUtils.isEmpty(newSliceConfigList)) {
- list.add(dataMap);
- return;
- }
- if (newSliceConfigList.size() == 1) {
- SliceConfig sliceConfig = newSliceConfigList.get(0);
- List<Object> listOne = (List<Object>) printData.get(sliceConfig.getDataSet());
- if (CollectionUtils.isNotEmpty(listOne)) {
- oneList(list, listOne, sliceConfig, thisData, printData);
- } else {
- printData.put("systemSlicePageNo", "1-1");
- list.add(dataMap);
- }
- }
- if (newSliceConfigList.size() == 2) {
- SliceConfig sliceConfig1 = newSliceConfigList.get(0);
- SliceConfig sliceConfig2 = newSliceConfigList.get(1);
- List<Object> listOne = (List<Object>) printData.get(sliceConfig1.getDataSet());
- List<Object> listTwo = (List<Object>) printData.get(sliceConfig2.getDataSet());
- if (CollectionUtils.isNotEmpty(listOne) && CollectionUtils.isNotEmpty(listTwo)) {
- twoList(list, listOne, sliceConfig1, listTwo, sliceConfig2, thisData, printData);
- } else if (CollectionUtils.isNotEmpty(listOne)) {
- oneList(list, listOne, sliceConfig1, thisData, printData);
- } else if (CollectionUtils.isNotEmpty(listTwo)) {
- oneList(list, listTwo, sliceConfig2, thisData, printData);
- } else {
- printData.put("systemSlicePageNo", "1-1");
- list.add(dataMap);
- }
- }
- }
- private static void oneList(ArrayList<Object> list, List<Object> listOne, SliceConfig sliceConfig, Map<String, Object> thisData, Map<String, Object> printData) {
- List<List<Object>> lists = Lists.partition(listOne, sliceConfig.getLimit());
- int num = 1;
- for (List<Object> m : lists) {
- Map<String, Object> thisMap = new HashMap<>(thisData);
- Map<String, Object> thisPrintData = new HashMap<>(printData);
- thisPrintData.put(sliceConfig.getDataSet(), m);
- thisPrintData.put("systemSlicePageNo", num + "-1");
- thisMap.put("printData", thisPrintData);
- list.add(thisMap);
- num++;
- }
- }
- private static void twoList(ArrayList<Object> list, List<Object> listOne, SliceConfig sliceConfig1, List<Object> listTwo, SliceConfig sliceConfig2, Map<String, Object> thisData, Map<String, Object> printData) {
- List<List<Object>> lists1 = Lists.partition(listOne, sliceConfig1.getLimit());
- List<List<Object>> lists2 = Lists.partition(listTwo, sliceConfig2.getLimit());
- int l = 1;
- for (List<Object> m : lists1) {
- if (lists2.size() > 0) {
- int num = 1;
- for (int n = 0; n < lists2.size(); n++) {
- List<Object> nObject = lists2.get(n);
- Map<String, Object> thisMap = new HashMap<>(thisData);
- Map<String, Object> thisPrintData = new HashMap<>(printData);
- thisPrintData.put(sliceConfig1.getDataSet(), m);
- thisPrintData.put(sliceConfig2.getDataSet(), nObject);
- thisPrintData.put("systemSlicePageNo", num + "-" + lists2.size());
- thisMap.put("printData", thisPrintData);
- list.add(thisMap);
- num++;
- }
- } else {
- Map<String, Object> thisMap = new HashMap<>(thisData);
- Map<String, Object> thisPrintData = new HashMap<>(printData);
- thisPrintData.put(sliceConfig1.getDataSet(), m);
- thisPrintData.put("systemSlicePageNo", l + "-1");
- thisMap.put("printData", thisPrintData);
- list.add(thisMap);
- l++;
- }
- }
- }
- /**
- * 查询打印列表
- *
- * @param ids
- * @return
- */
- @Operation(summary = "查询打印列表")
- @Parameters({
- @Parameter(name = "ids", description = "主键集合")
- })
- @PostMapping("getListById")
- public List<PrintOption> getListById(@RequestBody List<String> ids) {
- return printDevService.getPrintTemplateOptions(ids);
- }
- @Operation(summary = "查询打印列表")
- @Parameters({
- @Parameter(name = "data", description = "打印模板-数查询对象")
- })
- @PostMapping("getListOptions")
- public ActionResult getListOptions(@RequestBody PrintDevDataQuery data) {
- List<String> ids = data.getIds();
- QueryWrapper<PrintDevEntity> wrapper = new QueryWrapper<>();
- wrapper.lambda().in(PrintDevEntity::getId, ids);
- List<PrintDevEntity> list = printDevService.getBaseMapper().selectList(wrapper);
- List<PrintOption> options = JsonUtil.getJsonToList(list, PrintOption.class);
- return ActionResult.success(options);
- }
- //新增
- @Operation(summary = "列表预览")
- @Parameters({
- @Parameter(name = "id", description = "打印模板id")
- })
- @SaCheckPermission("onlineDev.printDev")
- @GetMapping("/{id}/Actions/Preview")
- public ActionResult<PrintDevInfoVO> previewInfo(@PathVariable("id") String id) {
- List<PrintVersionEntity> list = versionService.getList(id);
- if (CollectionUtils.isEmpty(list)) {
- return ActionResult.fail(MsgCode.FA001.get());
- }
- PrintDevInfoVO info = printDevService.getVersionInfo(list.get(0).getId());
- PrintDevInfoVO vo = JsonUtil.getJsonToBean(info, PrintDevInfoVO.class);
- return ActionResult.success(vo);
- }
- @Operation(summary = "打印模板业务列表")
- @GetMapping("/WorkSelector")
- public ActionResult<PageListVO<PrintDevListVO>> getWorkSelector(PaginationPrint pagination) {
- List<PrintDevEntity> list = printDevService.getWorkSelector(pagination);
- List<String> collect = systemService.getList().stream().map(SystemEntity::getId).collect(Collectors.toList());
- list = list.stream().filter(t -> collect.contains(t.getSystemId())).collect(Collectors.toList());
- List<PrintDevListVO> listVO = JsonUtil.getJsonToList(list, PrintDevListVO.class);
- PaginationVO paginationVO = JsonUtil.getJsonToBean(pagination, PaginationVO.class);
- return ActionResult.page(listVO, paginationVO);
- }
- }
|