From 666779445f7f3c73adaff5f02eb7adaa49128245 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Mon, 15 Jan 2024 16:17:04 +0800 Subject: [PATCH] =?UTF-8?q?#=E5=B7=A5=E4=BD=9C=E4=BB=BB=E5=8A=A1=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/ticket/repair/entity/WorkTaskEntity.java | 14 +- .../hzims/ticket/repair/vo/WorkTaskContentVO.java | 18 ++ .../hzims/ticket/repair/vo/WorkTaskPreviewVO.java | 83 +++++++ .../service/impl/AlarmTabulateServiceImpl.java | 2 +- .../strategy/serviceimpl/WorkTaskServiceImpl.java | 12 +- .../repair/controller/WorkTaskController.java | 18 +- .../ticket/repair/service/IWorkTaskService.java | 3 + .../repair/service/impl/WorkTaskServiceImpl.java | 268 +++++++++++++++++---- .../template/excel/work_task_template.xlsx | Bin 0 -> 19699 bytes 9 files changed, 352 insertions(+), 66 deletions(-) create mode 100644 hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/vo/WorkTaskContentVO.java create mode 100644 hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/vo/WorkTaskPreviewVO.java create mode 100644 hzims-service/ticket/src/main/resources/template/excel/work_task_template.xlsx diff --git a/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/entity/WorkTaskEntity.java b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/entity/WorkTaskEntity.java index c9dadf1..adf341f 100644 --- a/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/entity/WorkTaskEntity.java +++ b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/entity/WorkTaskEntity.java @@ -30,7 +30,7 @@ public class WorkTaskEntity extends TenantEntity { @ApiModelProperty(value = "工作负责人名称") private String headName; - @ApiModelProperty(value = "工作负责人名称") + @ApiModelProperty(value = "工作负责人处理时间") private Date headHandleTime; @ApiModelProperty(value = "班组ID") @@ -45,12 +45,6 @@ public class WorkTaskEntity extends TenantEntity { @ApiModelProperty(value = "班组成员名称 : 按 “,”分割") private String memberName; - @ApiModelProperty(value = "签名班组人员ID : 按 “,”分割") - private String signatureMember; - - @ApiModelProperty(value = "签名班组成员名称 : 按 “,”分割") - private String signatureMemberName; - @ApiModelProperty(value = "工作计划开始时间") private Date planStartTime; @@ -78,6 +72,12 @@ public class WorkTaskEntity extends TenantEntity { @ApiModelProperty(value = "许可时间") private Date licensorTime; + @ApiModelProperty(value = "工作终结人") + private Long terminator; + + @ApiModelProperty(value = "工作终结人名称") + private String terminatorName; + @ApiModelProperty(value = "工作结束时间") private Date workEndTime; diff --git a/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/vo/WorkTaskContentVO.java b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/vo/WorkTaskContentVO.java new file mode 100644 index 0000000..e2cd03d --- /dev/null +++ b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/vo/WorkTaskContentVO.java @@ -0,0 +1,18 @@ +package com.hnac.hzims.ticket.repair.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author ysj + */ +@Data +public class WorkTaskContentVO { + + @ApiModelProperty(value = "工作地点") + private String location; + + @ApiModelProperty(value = "工作内容") + private Integer content; + +} diff --git a/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/vo/WorkTaskPreviewVO.java b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/vo/WorkTaskPreviewVO.java new file mode 100644 index 0000000..090f28e --- /dev/null +++ b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/repair/vo/WorkTaskPreviewVO.java @@ -0,0 +1,83 @@ +package com.hnac.hzims.ticket.repair.vo; + +import com.hnac.hzims.ticket.repair.entity.WorkTaskEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author ysj + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class WorkTaskPreviewVO extends WorkTaskEntity { + + @ApiModelProperty(value = "机构名称") + private String deptName; + + @ApiModelProperty(value = "班组成员数量") + private Integer groupCount; + + @ApiModelProperty(value = "工作地点") + private String location; + + @ApiModelProperty(value = "工作内容") + private String content; + + @ApiModelProperty(value = "计划工作时间") + private String planTimeInterval; + + @ApiModelProperty(value = "工作派工单签发人") + private String createName; + + @ApiModelProperty(value = "签发时间: 年") + private Integer createYear; + + @ApiModelProperty(value = "签发时间: 月") + private Integer createMon; + + @ApiModelProperty(value = "签发时间: 日") + private Integer createDay; + + @ApiModelProperty(value = "签发时间: 时") + private Integer createHour; + + @ApiModelProperty(value = "签发时间: 分") + private Integer createMin; + + + @ApiModelProperty(value = "开票处理时间: 年") + private Integer headYear; + + @ApiModelProperty(value = "开票处理时间: 月") + private Integer headMon; + + @ApiModelProperty(value = "开票处理时间: 日") + private Integer headDay; + + @ApiModelProperty(value = "开票处理时间: 时") + private Integer headHour; + + @ApiModelProperty(value = "开票处理时间: 分") + private Integer headMin; + + + @ApiModelProperty(value = "结束时间: 年") + private Integer endYear; + + @ApiModelProperty(value = "结束时间: 月") + private Integer endMon; + + @ApiModelProperty(value = "结束时间: 日") + private Integer endDay; + + @ApiModelProperty(value = "结束时间: 时") + private Integer endHour; + + @ApiModelProperty(value = "结束时间: 分") + private Integer endMin; + + @ApiModelProperty(value = "许可时间") + private String licensorExportTime; + +} diff --git a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/tabulate/service/impl/AlarmTabulateServiceImpl.java b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/tabulate/service/impl/AlarmTabulateServiceImpl.java index bafc8de..dba391b 100644 --- a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/tabulate/service/impl/AlarmTabulateServiceImpl.java +++ b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/alarm/tabulate/service/impl/AlarmTabulateServiceImpl.java @@ -38,7 +38,7 @@ public class AlarmTabulateServiceImpl implements AlarmTabulateService { public IPage early(IPage page, TabulateEarlyVo tabulateEarly) { StbAnalysisDTO param = new StbAnalysisDTO(); if(StringUtil.isNotBlank(tabulateEarly.getStartTime())){ - param.setStartTime(LocalDateTime.parse(tabulateEarly.getStartTime())); + param.setStartTime(LocalDateTime.parse(tabulateEarly.getStartTime(),DateUtil.DATETIME_FORMATTER)); } if(StringUtil.isNotBlank(tabulateEarly.getEndTime())){ param.setEndTime(LocalDateTime.parse(tabulateEarly.getEndTime(), DateUtil.DATETIME_FORMATTER)); diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/WorkTaskServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/WorkTaskServiceImpl.java index e9f5d72..dd9d8a6 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/WorkTaskServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/WorkTaskServiceImpl.java @@ -4,9 +4,13 @@ import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; import com.hnac.hzims.middle.processflow.service.ProcessDictService; import com.hnac.hzims.middle.processflow.strategy.abstracts.ProcessAbstractService; import com.hnac.hzims.middle.processflow.strategy.entity.WorkflowQueue; +import com.hnac.hzims.ticket.repair.fegin.IWorkTaskClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.tool.api.R; import org.springframework.stereotype.Service; + import static com.hnac.hzims.middle.process.constant.TicketProcessConstant.WORK_TASK; /** @@ -19,6 +23,8 @@ public class WorkTaskServiceImpl extends ProcessAbstractService { private final ProcessDictService processDictService; + private final IWorkTaskClient workTaskClient; + /** * 消息确认-工作任务单 * @param flowQueue @@ -36,9 +42,9 @@ public class WorkTaskServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { - - /*if (!defect.isSuccess()) { + R workTask = workTaskClient.listener(response); + if (!workTask.isSuccess() || !workTask.getData()) { throw new ServiceException("检修任务业务执行异常!"); - }*/ + } } } diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/controller/WorkTaskController.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/controller/WorkTaskController.java index 27cf9f0..45ba555 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/controller/WorkTaskController.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/controller/WorkTaskController.java @@ -52,20 +52,22 @@ public class WorkTaskController extends BladeController { return R.data(workTaskService.workTaskService(Condition.getPage(query), workTask)); } - @GetMapping("/workTicketList") + @GetMapping("/preview") @ApiOperationSupport(order = 2) - @ApiOperation(value = "分页") + @ApiOperation(value = "工作任务单预览", notes = "工作任务单预览") + public void preview(@RequestParam @ApiParam("工作任务单预览主键ID") @NotNull @Valid Long id) { + workTaskService.preview(id); + } + + @GetMapping("/workTicketList") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "查询工作票") public R> workTicketList(@RequestParam(value = "ticketCode",required = false) String ticketCode) { return R.data(workTaskService.workTicketList(ticketCode)); } - /** - * 工作任务单-开启流程 - * @param workTask - * @return - */ @PostMapping("/startProcess") - @ApiOperationSupport(order = 3) + @ApiOperationSupport(order = 4) @ApiOperation(value = "工作任务单") public R startV4(@RequestBody WorkTaskVO workTask) { return R.status(workTaskService.start(workTask)); diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/service/IWorkTaskService.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/service/IWorkTaskService.java index 9595912..119bdf0 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/service/IWorkTaskService.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/service/IWorkTaskService.java @@ -21,5 +21,8 @@ public interface IWorkTaskService extends BaseService { IPage workTaskService(IPage page, WorkTaskVO workTask); + + void preview(Long id); + List workTicketList(String ticketName); } \ No newline at end of file diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/service/impl/WorkTaskServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/service/impl/WorkTaskServiceImpl.java index 26e35ba..cc05cf4 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/service/impl/WorkTaskServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/service/impl/WorkTaskServiceImpl.java @@ -1,38 +1,45 @@ package com.hnac.hzims.ticket.repair.service.impl; +import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; import com.hnac.hzims.ticket.repair.entity.WorkTaskEntity; import com.hnac.hzims.ticket.repair.mapper.WorkTaskMapper; import com.hnac.hzims.ticket.repair.service.IWorkTaskService; +import com.hnac.hzims.ticket.repair.vo.WorkTaskContentVO; +import com.hnac.hzims.ticket.repair.vo.WorkTaskPreviewVO; import com.hnac.hzims.ticket.repair.vo.WorkTaskVO; +import com.hnac.hzims.ticket.utils.ExcelUtil; +import com.hnac.hzims.ticket.utils.PdfUtils; import com.hnac.hzims.ticket.workTicket.entity.WorkTicketInfoEntity; import com.hnac.hzims.ticket.workTicket.service.IWorkTicketInfoService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; -import org.springblade.core.tool.utils.DateUtil; -import org.springblade.core.tool.utils.ObjectUtil; -import org.springblade.core.tool.utils.StringUtil; +import org.springblade.core.tool.utils.*; import org.springblade.flow.core.entity.BladeFlow; import org.springblade.flow.core.feign.IFlowClient; import org.springblade.flow.core.utils.FlowUtil; import org.springblade.flow.core.utils.TaskUtil; import org.springblade.system.entity.Dept; import org.springblade.system.feign.ISysClient; +import org.springblade.system.user.entity.User; +import org.springblade.system.user.feign.IUserClient; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; -import java.util.Date; -import java.util.List; -import java.util.Map; +import javax.servlet.http.HttpServletResponse; +import java.util.*; /** * @author ysj @@ -48,43 +55,14 @@ public class WorkTaskServiceImpl extends BaseServiceImpl workTaskService(IPage page, WorkTaskVO workTask) { - QueryWrapper wrapper = Condition.getQueryWrapper(workTask); - if(StringUtil.isNotBlank(workTask.getStartTime())){ - wrapper.ge("CREATE_TIME",workTask.getStartTime()); - } - if(StringUtil.isNotBlank(workTask.getEndTime())){ - wrapper.le("CREATE_TIME",workTask.getEndTime()); - } - if(ObjectUtil.isNotEmpty(workTask.getGroupId())){ - wrapper.eq("GROUP_ID",workTask.getGroupId()); - } - if(ObjectUtil.isNotEmpty(workTask.getGroupId())){ - wrapper.eq("CREATE_DEPT",workTask.getDeptId()); - } - return super.page(page, wrapper); - } + private final IUserClient userClient; + + @Value("${hzims.ticket.workTask.saveWrokTask.xlsx}") + private String saveWrokTaskXlsxPath; + + @Value("${hzims.ticket.workTask.saveWrokTask.pdf}") + private String saveWrokTaskPdfPath; - /** - * 查询工作票数据 - * @param ticketCode - * @return - */ - @Override - public List workTicketList(String ticketCode) { - if(StringUtil.isEmpty(ticketCode)){ - return workTicketInfoService.list(); - } - return workTicketInfoService.list(Wrappers.lambdaQuery() - .like(WorkTicketInfoEntity::getCode,ticketCode)); - } /** * 工作任务单-开启流程 @@ -106,8 +84,12 @@ public class WorkTaskServiceImpl extends BaseServiceImpl member.length){ + variables.put("duty" + i, ""); + }else{ + variables.put("duty" + i, TaskUtil.getTaskUser(member[i-1])); + } } R result = flowClient.startProcessInstanceContainNameByKey("work_task", FlowUtil.getBusinessKey("work_task_v4",String.valueOf(workTask.getId())), workTask.getCode(), variables); log.error("work_task_start_process_result :{}",result); @@ -142,14 +124,206 @@ public class WorkTaskServiceImpl extends BaseServiceImpl variables = (Map) processWorkFlowResponse.getVariables(); + log.error("work_task_listener_variables : {}",variables); + Object head = variables.get("head"); + if(ObjectUtil.isNotEmpty(head)){ + variables.put("head",head.toString().replaceAll("taskUser_","")); + } WorkTaskVO entity = JSONObject.parseObject(JSONObject.toJSONString(variables), new TypeReference(){}); // 当前流程名称 entity.setTaskName(processWorkFlowResponse.getTaskName()); // 流程阶段执行人员名称 entity.setNextStepOperator(processWorkFlowResponse.getNextStepOperator()); - + if(ObjectUtil.isNotEmpty(entity.getWorkTicketId())){ + entity.setHeadHandleTime(new Date()); + } + if(ObjectUtil.isNotEmpty(entity.getTerminator())){ + entity.setWorkEndTime(new Date()); + } + if(StringUtil.isNotBlank(entity.getLicensorName())){ + entity.setLicensorTime(new Date()); + } // 更新工作任务单信息 this.updateById(entity); - return false; + return true; + } + + /** + * 工作任务单-分页查询 + * @param page + * @param workTask + * @return + */ + @Override + public IPage workTaskService(IPage page, WorkTaskVO workTask) { + QueryWrapper wrapper = Condition.getQueryWrapper(workTask); + if(StringUtil.isNotBlank(workTask.getStartTime())){ + wrapper.ge("CREATE_TIME",workTask.getStartTime()); + } + if(StringUtil.isNotBlank(workTask.getEndTime())){ + wrapper.le("CREATE_TIME",workTask.getEndTime()); + } + if(ObjectUtil.isNotEmpty(workTask.getGroupId())){ + wrapper.eq("GROUP_ID",workTask.getGroupId()); + } + if(ObjectUtil.isNotEmpty(workTask.getGroupId())){ + wrapper.eq("CREATE_DEPT",workTask.getDeptId()); + } + return super.page(page, wrapper); + } + + /** + * 工作任务单预览 + * @param id + */ + @Override + public void preview(Long id) { + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletResponse response = servletRequestAttributes.getResponse(); + //准备数据 + WorkTaskPreviewVO preview = this.workTaskExport(id); + if(ObjectUtil.isEmpty(preview)){ + throw new ServiceException("查询应急抢修单失败"); + } + Map params = new HashMap<>(); + try { + params = PdfUtils.objectToMap(preview); + }catch (Exception e) { + log.error("转换对象失败!"); + } + TemplateExportParams templateExportParams = new TemplateExportParams("template/excel/work_task_template.xlsx", true); + Workbook workbook = null; + try { + workbook = ExcelUtil.getWorkbook(templateExportParams,params); + } catch (Exception e) { + e.printStackTrace(); + } + //上传xlsx至服务器 + String fileName = preview.getCode() + "_工作任务单" + PdfUtils.XLSX_SUFFIX; + try { + ExcelUtil.upload(workbook,saveWrokTaskXlsxPath,fileName); + } catch (Exception e) { + e.printStackTrace(); + } + //将docx文件转换为pdf并保存 + String pdfFileName = preview.getCode() + "_工作任务单" + PdfUtils.PDF_SUFFIX; + String xlsxFileName = preview.getCode() + "_工作任务单" + PdfUtils.XLSX_SUFFIX; + PdfUtils.convertPdf(saveWrokTaskPdfPath, xlsxFileName, saveWrokTaskPdfPath, pdfFileName); + String savePath = saveWrokTaskPdfPath + pdfFileName; + // 设置response参数,可以打开下载页面 + PdfUtils.readPdf(response,savePath); + } + + /** + * 转换工作任务单预览对象 + * @param id + * @return + */ + private WorkTaskPreviewVO workTaskExport(Long id) { + // 查询工作任务单对象 + WorkTaskEntity workTask = this.getById(id); + if(ObjectUtil.isEmpty(workTask)){ + throw new ServiceException("未查询到工作任务单数据!"); + } + // 对象属性拷贝 + WorkTaskPreviewVO preview = new WorkTaskPreviewVO(); + BeanUtil.copyProperties(preview,workTask); + // 机构名称 + R result = sysClient.getDept(workTask.getCreateDept()); + if(result.isSuccess() && ObjectUtil.isNotEmpty(result.getData())){ + preview.setDeptName(result.getData().getDeptName()); + } + // 班组数量 + if(StringUtil.isNotBlank(workTask.getMember())){ + preview.setGroupCount(workTask.getMember().split(",").length); + } + // 工作地点 、工作内容 + if(StringUtil.isNotBlank(workTask.getWorkTask())){ + List contents = JSONObject.parseObject(workTask.getWorkTask(), new TypeReference>() {}); + if(CollectionUtil.isNotEmpty(contents)){ + StringBuilder location = new StringBuilder(),content = new StringBuilder(); + for(WorkTaskContentVO item : contents){ + location.append(item.getLocation()).append("\n"); + content.append(item.getContent()).append("\n"); + } + preview.setLocation(location.substring(0,location.toString().length() - 1)); + preview.setContent(content.substring(0,location.toString().length() - 1)); + } + } + // 计划工作时间 + if(ObjectUtil.isNotEmpty(workTask.getPlanStartTime()) && ObjectUtil.isNotEmpty(workTask.getPlanEndTime())){ + Calendar start = Calendar.getInstance(); + start.setTime(workTask.getPlanStartTime()); + StringBuilder planTimeInterval = new StringBuilder(); + + planTimeInterval.append(start.get(Calendar.YEAR)).append("年").append(start.get(Calendar.MONTH)).append("月").append(start.get(Calendar.DAY_OF_MONTH)) + .append("日").append(start.get(Calendar.HOUR_OF_DAY)).append("时").append(start.get(Calendar.MINUTE)).append("分").append("至"); + Calendar end = Calendar.getInstance(); + end.setTime(workTask.getPlanStartTime()); + planTimeInterval.append(end.get(Calendar.YEAR)).append("年").append(end.get(Calendar.MONTH)).append("月").append(end.get(Calendar.DAY_OF_MONTH)) + .append("日").append(end.get(Calendar.HOUR_OF_DAY)).append("时").append(end.get(Calendar.MINUTE)).append("分"); + preview.setPlanTimeInterval(planTimeInterval.toString()); + } + // 工作派工单签发人 + R user = userClient.userInfoById(workTask.getCreateUser()); + if(user.isSuccess() && ObjectUtil.isNotEmpty(user.getData())){ + preview.setCreateName(user.getData().getName()); + } + // 工作派工单签发时间 + if(ObjectUtil.isNotEmpty(workTask.getCreateTime())){ + Calendar createTime = Calendar.getInstance(); + createTime.setTime(workTask.getCreateTime()); + preview.setCreateYear(createTime.get(Calendar.YEAR)); + preview.setCreateMon(createTime.get(Calendar.MONTH)); + preview.setCreateDay(createTime.get(Calendar.DAY_OF_MONTH)); + preview.setCreateHour(createTime.get(Calendar.HOUR_OF_DAY)); + preview.setCreateMin(createTime.get(Calendar.MINUTE)); + } + // 开票处理时间 + if(ObjectUtil.isNotEmpty(workTask.getHeadHandleTime())){ + Calendar headTime = Calendar.getInstance(); + headTime.setTime(workTask.getHeadHandleTime()); + preview.setHeadYear(headTime.get(Calendar.YEAR)); + preview.setHeadMon(headTime.get(Calendar.MONTH)); + preview.setHeadDay(headTime.get(Calendar.DAY_OF_MONTH)); + preview.setHeadHour(headTime.get(Calendar.HOUR_OF_DAY)); + preview.setHeadMin(headTime.get(Calendar.MINUTE)); + } + // 工单结束时间 + if(ObjectUtil.isNotEmpty(workTask.getWorkEndTime())){ + Calendar entTime = Calendar.getInstance(); + entTime.setTime(workTask.getWorkEndTime()); + preview.setEndYear(entTime.get(Calendar.YEAR)); + preview.setEndMon(entTime.get(Calendar.MONTH)); + preview.setEndDay(entTime.get(Calendar.DAY_OF_MONTH)); + preview.setEndHour(entTime.get(Calendar.HOUR_OF_DAY)); + preview.setEndMin(entTime.get(Calendar.MINUTE)); + } + // 许可时间 + if(ObjectUtil.isNotEmpty(workTask.getLicensorTime())){ + Calendar licensorTime = Calendar.getInstance(); + licensorTime.setTime(workTask.getLicensorTime()); + String licensorExportTime = licensorTime.get(Calendar.YEAR) + "年" + licensorTime.get(Calendar.MONTH) + "月" + licensorTime.get(Calendar.DAY_OF_MONTH) + + "日" + licensorTime.get(Calendar.HOUR_OF_DAY) + "时" + licensorTime.get(Calendar.MINUTE) + "分"; + preview.setLicensorExportTime(licensorExportTime); + } + return preview; + } + + + /** + * 查询工作票数据 + * @param ticketCode + * @return + */ + @Override + public List workTicketList(String ticketCode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.lambda().orderByDesc(WorkTicketInfoEntity::getCreateTime); + if(StringUtil.isEmpty(ticketCode)){ + return workTicketInfoService.list(queryWrapper); + } + queryWrapper.lambda().like(WorkTicketInfoEntity::getCode,ticketCode); + return workTicketInfoService.list(queryWrapper); } } \ No newline at end of file diff --git a/hzims-service/ticket/src/main/resources/template/excel/work_task_template.xlsx b/hzims-service/ticket/src/main/resources/template/excel/work_task_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bf8b77622277eb088b24413f63a95c8ed1c21ebb GIT binary patch literal 19699 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�)8PaB2D)7o|@rm#ni6V zYN>CHKF)cES3c&Day?XPNRRHI0+O@IZE0hm9^i?JC*@DZTv|_QC0aX&#giZ<v{U%WErWM z&vUV<-B%+$urLW(sZ%v0Hk|MBP@Au%eJwP}8>;rsmEP&;r>8Qnf&@#IS5O3d8}tun zIUD(H|HAB~Bdhprsf17h2w3eaQ)PCvXR!DWXzZC*jHyw5r~Wa$GMP29nt-&UdrkBP z3rMn3RRyzI+pphEQ&M+7=eJxLelVsB-&^*?W7D#s2C@X-N2c?|wi}w~HA<>}h+h%G z_;wi+tyEFa%pY?T4bp#2z$jg~wo3k9As#$oCSPBhDNoIxJoGj^_PO#=q7h@46;{IfsJ7>y3c4t_#BwHFkw^Hf-rdYRBLI%i9V^Zij ztMqviET1n^Pz_NXYWZq?R#}wH(6mTR@Z#@>zC=YhYBw3{$+++pmhQKfa8mReZ};k8 z(|%LBVD9EWF}L{A?@Q2T@c#3L`W;b!$(;rG0Lm34^rM3wcshdjS~R0}F_1IM?lZ?d z%Ne^BN>lmJ2aEUf(m0FM(Y0Z|eAf$%k%P6x13J0g{nnrRY>Sn>~N`WR}4=>uL_v^2q49Ha%+;~A26zA%O zqn=8_8F^QP*dyp3?CJRMtGnbqbP>f3)YD=iAmRqqVO~=aORP3Hjfd7D)?Uya>&*%J zMj}fr?>R~Mbu{jbse6|3Mts#Xh+(8vM6j_tZ8C$Pua_ti1t4rcBUP|IbYDjBzDJ8F znQy^}fmBEsf7y~Gj*g?Hai*Dm>9^aBWO@}-%3EVey$mcMZDK8AoVDRAC$S$m5V4@T zQLM^Jr}q=aSAmG;?uN$?CSOJ)@Bd*z5Fwn6CY40IeV`$k#a+dA4INfI$>rJF$#>Meo$1m@ zf^_N0k)2!ZN;{TtsX)NtB|5U|%b|yzq3}5B<#&R->2lj&va%0{#!flj4kas3U|>F0 zY<7~UZXKNTu>AyBUt3L*>(^_J62@u0E?f$u(lhF(2wWFkaI@LIPeg!+N*__S)_FnM z?mtQgZOJ!N*-@mGOqUm!0U_t(<56%Sr$2fcu`VxAgr5t+P6v{ofo~{AsYB3^_m`pT z&aMFo`J7jLk;rye@QY1;ClAE_%7UE0IX_x#jqEuF-vfHYz$bnTQfXTR&`3Z?Ji@vr zvIHeUb>kl*f)|wSZS(*^4BZ|e4%?jVg;!F8AkEusw)EG*hvLv*MjU1N789ndAup|t zKss2kEuGCekwZGGRFu#&(5WK?F^k-Dcn( zg8s&T93b3qX25KofjpOpMkH6|e@(QXU*#VN{o^$#RL$ACw~vAYEx)l2Tp&%}?&?LX zTZTs_Cn&bv7DhTm&6S#}ul(=LH?phCzA~Sp&ldj>3AB=0o^=s-Rr=f?6K^YUtCJ5S zYPvhlZ%@&>wI!RPYqDZrF6?--uE&47j&_v!9^pDY9$$p@-~-zju9?iMbU`}G`jTye zZq=28s%j$Dcpssiz1ca1%V?eEzh{nm$z6^@xXl8L7-0k(bBY>AbumC3L>-2JrHid; z=jai1HZaOlAuzoQM7xtW6cRn;fS0UiR&L8Rm4p`=FW$QfWA5xfMTi2A2uZcD-(o<6x-H_Wfd@rtre)OD7#6w-%t<_+Sqw(>MBQ z!<}GLijZ%^u!@+DZ?RqLJ=+MT1SKX9Zcr=EZW9k3jUE^Mx%Mt<)bm_}-HG$#j$i^- zU4(~r{AC4YmHOp2_NIo45<8>K?PKjmz!?n~*ZEoeP$2cj^X+c?mSX~UG(8HS&KZC{ zp40mj+cD~Kv;O)}cmwyoKNMYlz>~C=NI{94?&;)mHHE_t>GDB_xYhjedNlyB^f;g~ zgSpkSWuWB3w2j%2m`>%7=CPbr$Lm)lh9iCa@i11hR1>n1J@xjS)on0Uw*xX%;@6r9F1C*Wjm^i?p`Or4PUerjpFkE{ z$nxS*O|8Fq!bMl6%J1?`uf+qUIxL_MG}e>WDLV)G-H2Z`Kl)_g zkC3%s+R%w`!)`K0`raw0$-FV@xk_xDQIF!eVcdA1)c0m+Mv*&qfS9PE8ehY1MY96- z%;QIvgeyTzmG>2!M#KMz3@U~VC?95hdY9kmRga1~z9_6S>@Vi)jT+oI{y2nOw&xY~O0VFh$CN}+P=jCag z+c>)C1WLT`0xGWq`U!OT1FY}gGtc|83tKbw{l7%C4T8zvSDQfjTvJ;;(mDC(a8`gj zo}aVWu$GzLa8_(CpH^<0#<>k2%9z4e3M3S2_cm|7?s~F zxEXhG(l-@YOM~7jze-q9Mtu$6R8|wz!h8gAhty{KC=4f-82o1RXWZZR_HRCQt_r54 z$WMPd12O>cC-v{s5oc?xV`HE%XJ_*#0q3t7jk1{43^#l`!4(d9<|cPq?VbYBK7iMn z_!tNlGrWc#<%;#xk~Ad#D?PmEO09r}Gf4I|Jk=bMOqL0Ths3<3(qheGj`Ssn6M1wJ;J$N!q}$?$8eW?nbNB!nD(laxTLf=^=K+h zW#rcmLHDhP^_xwQ8Sz}qmYl;PX^7#pHU`ai^kNV+equshP3EyPrLi-n@U=DJHE8mC z_`p4hLdNgK^a5dSl&WTg`?Ytc(}-Fg81oL_Xe4bzpdi2Gk>Jk=$4STuJ;U&`r(#7l za{?Rlt0DOHkAKOey3U`-&QEl@DmAGGwmK-6HYT_x)>g*8levjOi*qq_HW+DA;sC>` zzk7Scv&BYgQh*s2r!y;p^8Et)bCF&Fn9ff{nI6SV^?PgWc2mQGXYG8$2dXMyir!WQ zRBO)84jnVfgy_4&FWP-_%d26^2JEYCaM!EYHbuA=FMgT4{osDXA5pwFQJq!Aa^T{1 z>*Vzr?z?+U^Cv2Ae2?Y6r3g2cguW125FC$B@pc{CRJ346!i+#`n zbHvfH`iSp)M2m@zpxnTNgp}P>bAuTC+T1YGX^@V7>VDd-B&#l~MO-FQBgB6Ap3F3? z`w?}Jpw4vmFyDKz;+8$oy!Hibu}JcO6Tkc82wVAV&RNX(7JvF$XfAP+9@U;SbZ)_b zT4axZ0z44Zr464If$yJNfVekfqAxZW0oRxSh#$3Yz*z??UWwSJ1e0@VX^{0_*YhMF zrtwO#X#$4Lc*I zq}{WZR`fj1HRXp4*E~yF8V!0Ew@_HvhBo-vwv1&3cZ}8pTWk;M&3o*bcNdvtHkB zHHEML7D7?5e+mWtOj_gv0RZ6sng66~Wo7nPPVut$9wF{eYQ6766SZ~^FS|6@# z(xPfFhAKHoD5+;;2>cSTy=)t!9xh^>N&1fR(g<3-S|ya_8?B1km10!2 zV#R{}BbP6F0SZy=ET$&hqt_yYQN7p3c0@1sdGTfyTUcSywqL0jsL67n+GbZc=M-2t zo(wU6=p|DNo72Pd@%HSY66YbagZIFqhO#s2>p2+a7kh*j#pB1ta06!{^B}m>-x1#! z<2)w=9y=}L8Am8CQKrb76$d|6+)0x3CGOiGv!3;F=7k$|* z7z&KzA&@w!_QFO7CEDoE`na{D4+N`CI{mUAEb8-w8Cqi~H7TnjN85K6%8Be5ps~N) z-<>#dI#k8A&MR?0%!$2|d%mtqWt@I|9K!wY8FT*#(O4Mho9O&oh^DcEZiL`7_Za(g z`I8a*d1v?=W@4dZWI#h{ZD|CAjj(kdEG;Pn1BLM?1Oy`@%rE=7Zu?wtAwG=~Feq{U z{J8?Qln?qd@RoBK$n^PHAUq&QX|i?(c06 z&lxYv$!$svQ2<-C(LLN$Tyx$&8f`u5UP|0*5p!bFVjuY+k{#xEK1rhDZiKjMV45Ew zfjwU2h-xu3g4&Q_QGQ_+8fOeOY;+u-Pj|aVGe5XQ+Vc{WF zBM1bPC8Ec+CCUGoIpt)G5o4>7c;f1DcGi)k+_inrwNR8L3x2@=@u6&p&EEY)*)mZT zGPK*`Z7mhwJ5b1$D_M3X#O*};VJumH${_$|Mi&~$4)WDh0Pm)N8+}D-rXft~jA=|W zqk|&76)#p@AG7)3twh!}J1^X2U1tG!0(b#`!g)ZEbWu?i}=~Y4DyQpA& zxfX-xd}Tsi2Pfk=!ELqjqt-n17l59)ee1{uI{*+v*!G-#hsc6;rX0qUx%g30no0*6 z=BQ;O>6NPX(d6^IS^aD6;d>vO(t{^uER^+XTkbbk+me+$SX9VY>$hS1-?O6W2tBO_ zlUF)Drbt}V$SsZnAEE-LY-lSFA6tiqR8R)S*Qee5x97<2M*d$y#k=zDr0VVm7iZP> zNb?JGVEP@Q?^bCRXPzIW#O4NULC2~pPD8BX1VVp9j&RD)jD+oJJa9{Fu%@ihl*@)u zit%5lOfik1M^0PhA2aPRlDbJDv)yt+ks8JPdM668=r{keQ}*B^@Re+b9e@- zdYBWM(HPQ#g#l4>>r>T8>Fp#`KZtO%XKzDw4e+)EO^}Jnmny*K^EwDUue1 z2+3$5K`fGc4l6?U?Km#Ivtq7J%LGERVskb5!UV}h{wH3=rlpIbCD%|NO6=dRg|AT0M6)! zO0smv-u8amZ$~3Js6v4-I;vhurr(3Q+~cBm*ITrF-z9X^4h-!e{XyBg!K{DWrv#mm z8ZD;xE`1Vm_=ys|j!pfFsEoLpMT3sW{CQH}q9I$U+_ggA76FutSyY#?A=J=kc3h_i# zz=7qFm{o+(<(KzwdH{%YEOwJS2wt4f04*v0kAd2*LWrz85z*qk$y#!cl7^G{_EBdZ z10JcbJKolp1?_e%l1q~1@50sF7!D_QJ|}P5qH9Xi&>K`}jM9uUb07DU)`^`PoU^tX ztOx{zBoHTG&Ma!h2McF{@3K23>wfR8Apkaghx?``{Y=0RNS!@=nf!W`3Uq<|w%HHp zhP!C*Z(^MJ&<(<90+!ECiMGRK@4AAE!4>ZwLcZ`q;DLx4mz^^IF-t``a}aDd95*OH zz|OmPxjJHK8gdF-bn^vHWorJ?q3_RweuB)gJQNHM-6q*nU*0pA_@_Vmk=D%@B^BK6EGU8Gw%UMI*K2agJU{^bbn8 zT#5ku#u8xeE}M+;QX@eh94Ii!tM_#rV(Lhls_n0 z*TEUd8W1Pe7UQ$R%43N>ui7gJ?6G~g5)6PJu#Ng-`4baz&+<&O3A~GTcnkmXD(7Td zjVfFA9EkxqSslgC-ygLpg>h{M921FVURd$RQzhpNjy-e5i%-$o0SBH)l-L!i;ShTV zB@Py<8(D*2K^1Wz;JG7-)v+UAn?J9(8MBC&SaY3bRjcw}n#`|F>lK@r>+rv65ZX$q z=sLy-h3G{yN#YJJ185m7*tmxGf%G5-0n+!cg|ow=nHHjb>t)B0;Rj#_M`eRPE)!^_ zF7L4=^TgLcPdV0y<*F2=sh@+JRfeHQK1&n;gwVUCf!1lmKx&h6#OcOtEGrrI)4o-} zO#)2V8?(|XJhVD89MyZ=F|(9W=*}3Xtb8-Dq$ir zfDsI3oV(SEs2jqcnUdrZstcgq@{V2iTc~_g@i4}(mOS<;CGd({x~bZNy>Ib@0eZl7 zi_XvqNtv(H8Vi7j>vzMkU_f0YyvAdYk3aAPs#Py=6cJNjDh&qUhJbAC*5N*614XtA z-5J6w_b4mT^CF`SW^0yPrOkIiZ*9u{8IR<*WX+G%SUX5HCD9MDwu+21W%@xwlh1jAk%ozIr)4{zX2ymc2hEkFQZqWJ0$#xX z#f#`C!DV7^w}}r`h(9E5Ag#DCKJmllt4aux=~0DNLWShd-6!BIySxHVDy5_i<}XeQ zwfh6Xlm^HPpaAS_!mhhyoL+En_*W6ybKF@n2s6}6eG)yEk*9HEloSsdfHg!qD(pJV zY|GtY(Sg$kTlp8j&ud4xd*YFWBcdCyu8m48%or&!SVTdmp)TYvNc&BdWryw~)Q$&Y zlm@x>J6sfBQ5*)?MH`TZzbVpj_Z`Mw4MK^S$N8{72n{Wo5m_`E0=WC^JT%MH5n-$# zC~;XvK1!;8_1nl0CLug}h@i#rgHh|U31KA;=<_jO#=nc3IjD6qb2l>L6<*+wE1u6t zBn9FM@x~19!;I_HZlyp#=q9BBqTr7Y8h?TP&~uM@oLi>{X4YA%WnsyzURuz3y4|z6 zt3#mx0r*J=MS(vzZ&b)TN}&L}0IRc^?d&d4b5^0BXSRbU06QiYOa7G%dGD)xGC@In z>2W8Z6;z}LZAG#8T!x{BgwYEDSN+bdrx1c0-^rHz)|{Eyd^E~RN#tcFrCl%@!x;&Z zz?;A;CG6@o$0RaYkuU0CvQ35`;)@?hs;xZML%6AXFEx<%bgd@1HnfB3U7IPW`2$wJ zCX&CVin)bRIKCEkB!q1PRmk=3>H{_?eH4;^RL*NZ_1lA{Be5I@9DvymAB4$+kl7}! zIyd0Xt-6d()u_yvjb#R`pMK`us_u2ksq9zt0q_j_MT)+8x5ItiB9C8G?-r2CDo0I@ zu?4qEg}>>hW86ckI}MWq(LF{#TzPOwTatfC<2qO5{(AYzPb%lzCUp;SCL$jMZec{O z=r9lVSa#{TpJuE8efu4MU1vS!MxJPRUc87Eco+xdzE%@p0P}f;dKWc$G%kSK{M-}| z1R`4^_^?2~?3cl`LpxivtAi+qN^m+mCA0Dj9LA4YeFQzshkWnz$bNj=pFPnva#s{& zE(cO_{f}9DZk{d`kTvLIE!Y5Ual$Zwm(XY0SNgQY-m#oqA5=ckaOX{zgIBfe+T*$W z)w5G=^)zk&fPVNcr6mvNT{se0q_W|VFtWscSxdS||Bv@|G_3xD}gL0(a>cm9$Buxxbh>UWkbBu}a7Jy3yfcZLyhW zG>nI2e4;JOs#yB5uzUN;2EB>ZW23=E8jRZC?Jl7vi0%ZSQ8|VjeU$nlh|VJ%^a{GQ zSzfG+I`Gq3_Wmd_A`Fw%c*=US;C4toVq($Hq%BVALD3#$vQ&6Ms0UV$O*Fpz=MNxm z_@@r#sfWqS$2b!%7Djggb_Y2}QRVTi3EkGFAIRU~K#ic#>Vm0(=1H#e*GSq(piffn zuS2Yh)_cPG?LlaGk~rkJ0f_>+4dsUtMXGfIGL+!~-I!p2kwSK%agly0hnaB@v7Ey% zs~KTRSdLaVY3e8-HRu`eew?u()Z^B)uVeZC&Ais&IX027XKplN%=p9F@y@WD z0%hjv$jso(3idPDt+A5W!8kLi8J=a%V$!L?75ln*Rn$;3p;e!FTlftgFEe< z2eif1*4Xu=a>avf;|q`v?Y``fjCpX^i*H!#cGj$iZi(w%M_E0ou#(_^3oZ+MXL$bd z7rf&jo2;R8PW3W>dN=?g0+Rd{yxKnhyX)mM`xT&NV_^R8MT)M>4y_-b+crM^Ctv>? zL-_|;9y1}@OAX(D;d24M-!9>ZjId-!g?}oc@9vc({xSLETa3zCdmE1o`D`V}(s%l9>0O`3v;Rv&vAA8xBbhjy7uHz(yaAK|jLIbdgb>u!*i<7?d)Ki_@!xMfPh zXbm^nN!ma*l30_eBYA1=Og09ALKZGP0$;{9OKHpDYr+0ZY-tJhzIDJ!U zR#qh^GtMP$YH*2xr-g}cLHEwEE6{NoFf;GqJd@Qh7>RY>i$V` zA**}p9lywv2h=5TLWr`)p15ab4!XOdr_^dkgjxNFa!x)7X$N|D6P!62w1jQ0DM}sx zcPdHVEE{dd*yf8v#j{ARH66G!-2K|t^y@&8&u{1@N;kvyirG|&PM{_9=FT4n{I z(!)-_NxaR)YydiD>;-yDi;}{YT6|0}NX@e!uMd;89eolSO|wzGokif%zz+_ zPR_sz--B~0Aip=-`oF!t(z{;^mPa0A*eImq&vh=VdI*&{>)S@bO4Ftk=pV9QGfjpf8T%N2lw$D{pFLF+0SSY#^3z>4f|7L@n7!bzi4TT9Wm|s zQ(xi#?wjOJv0}mp8C^r-Z@zL1?8o5&uST14)Z@9)71|iEX(`U=lg#swF(vTQBehUM z1wHFzgd40YeQ2XaUqO5M%f;OZOu$@2N9|&=(+ec<^xg6!pxmH|-+m?*5m^Y#bl;

SmR^*7!NM%_1Xno&EEn9NOskBE6X3#L@SQ!msK=7L?ZcnKUJN|bQ{73NYUkXzG6UoSx zCG7Q|)L#{#l3o4ZXSG`*YFXTTZ*cM;B=FUy|MdCFsBSS|I+uDzvhq z^zqrWFiLzgELi3$lvyRY-b@dWMZq0Jw*p@7gP{2GtS%~ByT76`~o4^@0k~lvADVI0=ow&Fl-ce&3PEyhJ27ydXnMvJH?B;p%)fz=TxyFZw9Eb6XMruB!YfBuySaqAp? z=;tX9e0F+&e93BjR+e@KmUde5&ejID8h-*6b@4-%-PA||5An}%(GAEn(#0jDUqWF= zP>OGX)n9nXw|P7apIpufXt4gl*KctfGM)(pA~82 z_$Kyqj8H?B^6!x&nF9^FteupOYi|M3$*Penqvv{VVj4gSYM-+!r=T}$^XCmvZ)*-# zqXAhlr8=s!e(&lR6vr-GarVhhlBaRan7NGUT|pSZPCSv7@2VAfrXP1C{UYB;gs`rp z8Y1kvBUf7Ah(T767I%k1UN`Xl%LftOm^tkmwDQq<(P$R3zB|HpDK-CieC*pMyNzn* zh2xUH~WtO(Gk4(JZ=Vd72Y6>_Rs$v5JTO(y|fn+aktq9$)zhavb0d1XA}yU zAgl06nmP$RNu6H;Ase_Wtu8ej?vn+PzM#pwtf89%hldjLGA?oJd4U&Fm$&}qwS3EM zlQ)6m3S!_35*=kklZFbA5V-;b5E4qm0k{JaC6shjoPdS{&>{{% zm$T3zQGv(Kd$XRmtl|PuWX7M}w_eF>FDF}5uLj2;7+pPEz;4p*+26a1>RJXty(t7~ zF9b7X?oXHmvr=t9sj&sfQTkdqpg+BGlr%{|QABC?tbmPD zMoT?LeuTi@=dgE3sgy-qbII~<-sPY;i#O_S&hliRdWFTCL$8XSt Mtb4Qn=9kd^2Xw!!*Z=?k literal 0 HcmV?d00001