Browse Source

Merge remote-tracking branch 'origin/master'

zhongwei
liwen 11 months ago
parent
commit
aaabfadc6e
  1. 12
      hzims-service-api/basic-api/src/main/java/com/hnac/hzims/basic/entity/CertificatetEntity.java
  2. 44
      hzims-service-api/basic-api/src/main/java/com/hnac/hzims/basic/entity/CertificatetNoticeEntity.java
  3. 5
      hzims-service-api/basic-api/src/main/java/com/hnac/hzims/basic/vo/PersonManagemetVo.java
  4. 3
      hzims-service-api/common-api/src/main/java/com/hnac/hzims/vo/VoteChartVo.java
  5. 1
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/constant/MainConstants.java
  6. 1
      hzims-service-api/message-api/src/main/java/com/hnac/hzims/message/MessageConstants.java
  7. 5
      hzims-service-api/middle-api/src/main/java/com/hnac/hzims/middle/process/constant/TicketProcessConstant.java
  8. 24
      hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/ticketprocess/feign/IOfflineTicketProcessClient.java
  9. 15
      hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/ticketprocess/feign/OfflineTicketProcessClientFallback.java
  10. 63
      hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/controller/CertificatetNoticeController.java
  11. 15
      hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/mapper/CertificatetNoticeMapper.java
  12. 6
      hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/mapper/CertificatetNoticeMapper.xml
  13. 7
      hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/mapper/PersonManagemetMapper.xml
  14. 13
      hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/service/IImsCertificatetNoticeService.java
  15. 20
      hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/service/impl/CertificatetNoticeServiceImpl.java
  16. 41
      hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OfflineTicketProcessImpl.java
  17. 1
      hzims-service/hzims-middle/src/main/resources/db/1.0.2.sql
  18. 4
      hzims-service/hzims-scheduled/pom.xml
  19. 15
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/CertificatetMapper.java
  20. 6
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/CertificatetMapper.xml
  21. 15
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/CertificatetNoticeMapper.java
  22. 6
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/CertificatetNoticeMapper.xml
  23. 29
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/PersonManagemetMapper.java
  24. 97
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/PersonManagemetMapper.xml
  25. 141
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/basicScheduledTask.java
  26. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/basic/IImsCertificatetNoticeService.java
  27. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/basic/IImsCertificatetService.java
  28. 21
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/basic/impl/CertificatetNoticeServiceImpl.java
  29. 21
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/basic/impl/CertificatetServiceImpl.java
  30. 5
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/service/impl/EventServiceImpl.java
  31. 9
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/service/impl/TaskServiceImpl.java
  32. 1
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/service/impl/OperDefectServiceImpl.java
  33. 26
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/redisConsume/feign/OfflineTicketProcessClient.java
  34. 5
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/controller/TicketProcessController.java
  35. 8
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/TicketProcessService.java
  36. 100
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java
  37. 119
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java
  38. 129
      hzims-service/ticket/src/main/resources/file/线下工作票审批流程.bpmn20.xml

12
hzims-service-api/basic-api/src/main/java/com/hnac/hzims/basic/entity/CertificatetEntity.java

@ -1,6 +1,7 @@
package com.hnac.hzims.basic.entity; package com.hnac.hzims.basic.entity;
import com.baomidou.mybatisplus.annotation.SqlCondition; import com.baomidou.mybatisplus.annotation.SqlCondition;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
@ -21,7 +22,7 @@ import java.util.Date;
@Data @Data
@TableName("hzims_certificatet") @TableName("hzims_certificatet")
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value = "档案管理表", description = "档案管理表") @ApiModel(value = "证书管理表", description = "证书管理表")
public class CertificatetEntity extends TenantEntity { public class CertificatetEntity extends TenantEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -35,7 +36,7 @@ public class CertificatetEntity extends TenantEntity {
/** /**
* 档案类型 * 档案类型
*/ */
@ApiModelProperty(value = "档案类型") @ApiModelProperty(value = "证书类型")
@QueryField(condition = SqlCondition.LIKE) @QueryField(condition = SqlCondition.LIKE)
private String type; private String type;
/** /**
@ -54,6 +55,11 @@ public class CertificatetEntity extends TenantEntity {
*/ */
@ApiModelProperty(value = "图片地址") @ApiModelProperty(value = "图片地址")
private String pic; private String pic;
/**
* 是否过期
*/
@TableField(exist = false)
@ApiModelProperty(value = "是否过期")
private String isDead;
} }

44
hzims-service-api/basic-api/src/main/java/com/hnac/hzims/basic/entity/CertificatetNoticeEntity.java

@ -0,0 +1,44 @@
package com.hnac.hzims.basic.entity;
import com.baomidou.mybatisplus.annotation.SqlCondition;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.support.QueryField;
import org.springblade.core.tenant.mp.TenantEntity;
/**
* 实体类
* @author Chill
*/
@Data
@TableName("hzims_certificatet_notice")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "证书通知配置表", description = "证书通知配置表")
public class CertificatetNoticeEntity extends TenantEntity {
private static final long serialVersionUID = 1L;
/**
* 通知类型
*/
@ApiModelProperty(value = "通知类型")
@QueryField(condition = SqlCondition.EQUAL)
private String sendType;
/**
* 距离过期前几天通知
*/
@ApiModelProperty(value = "距离过期前几天通知")
@QueryField(condition = SqlCondition.EQUAL)
private Integer safeTime;
/**
* 通知用户
*/
@ApiModelProperty(value = "通知用户")
@QueryField(condition = SqlCondition.LIKE)
private String noticeUsers;
}

5
hzims-service-api/basic-api/src/main/java/com/hnac/hzims/basic/vo/PersonManagemetVo.java

@ -62,11 +62,6 @@ public class PersonManagemetVo extends PersonManagemetEntity {
) )
@ApiModelProperty(value = "到期时间") @ApiModelProperty(value = "到期时间")
private Date deadTime; private Date deadTime;
/**
* 图片地址
*/
@ApiModelProperty(value = "图片地址")
private String pic;
/** /**
* 档案编号 * 档案编号

3
hzims-service-api/common-api/src/main/java/com/hnac/hzims/vo/VoteChartVo.java

@ -36,4 +36,7 @@ public class VoteChartVo {
@ApiModelProperty(value = "完成id") @ApiModelProperty(value = "完成id")
@ExcelIgnore @ExcelIgnore
private List<Long> finishIds; private List<Long> finishIds;
@ApiModelProperty(value = "完成率")
@ExcelProperty(value = "完成率", index = 3)
private Double finishRate;
} }

1
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/constant/MainConstants.java

@ -87,6 +87,7 @@ public interface MainConstants {
String LOAD_PHOTOVOLTAIC_REAL = "loadPhotovoltaicReal"; String LOAD_PHOTOVOLTAIC_REAL = "loadPhotovoltaicReal";
String DUTY_NOTICE = "dutyNotice"; String DUTY_NOTICE = "dutyNotice";
String CERTIFICATET_DEAD_LINE_NOTICE = "certificatetDeadLineNotice";
String PROJECT_MANAGER = "projectManager"; String PROJECT_MANAGER = "projectManager";

1
hzims-service-api/message-api/src/main/java/com/hnac/hzims/message/MessageConstants.java

@ -60,6 +60,7 @@ public class MessageConstants {
OPERATIONTICKETMESSAGE("operation-ticket-message","操作票消息"), OPERATIONTICKETMESSAGE("operation-ticket-message","操作票消息"),
ROUTINEMAINTENANCE("operation-maintenance-message","日常维护消息"), ROUTINEMAINTENANCE("operation-maintenance-message","日常维护消息"),
OPERATIONDEFECTMESSAGE("operation-defect-message","消缺消息"), OPERATIONDEFECTMESSAGE("operation-defect-message","消缺消息"),
CERTIFICATETNOTICE("certificatet-notice-message","证书消息"),
OVERHAUL_PLAN("overhaul-plan","检修计划"), OVERHAUL_PLAN("overhaul-plan","检修计划"),

5
hzims-service-api/middle-api/src/main/java/com/hnac/hzims/middle/process/constant/TicketProcessConstant.java

@ -52,4 +52,9 @@ public class TicketProcessConstant {
* 值班计划 * 值班计划
*/ */
public static final String DUTY_REC = "duty_rec"; public static final String DUTY_REC = "duty_rec";
/**
* 线下工作票
*/
public static final String OFFLINE_WORK_TICKET = "offlineWorkTicket";
} }

24
hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/ticketprocess/feign/IOfflineTicketProcessClient.java

@ -0,0 +1,24 @@
package com.hnac.hzims.ticket.ticketprocess.feign;
import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse;
import com.hnac.hzims.ticket.constants.TicketConstants;
import org.springblade.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = TicketConstants.APP_NAME,fallback = OfflineTicketProcessClientFallback.class)
public interface IOfflineTicketProcessClient {
String API = "/offlineTicket";
String FIND_PENDING = API + "/findPending";
/**
* 线下工作票处理
* @param response 流程信息
* @return 处理结果
*/
@PostMapping(FIND_PENDING)
R findPending(@RequestBody ProcessWorkFlowResponse response);
}

15
hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/ticketprocess/feign/OfflineTicketProcessClientFallback.java

@ -0,0 +1,15 @@
package com.hnac.hzims.ticket.ticketprocess.feign;
import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Component;
@Component
public class OfflineTicketProcessClientFallback implements IOfflineTicketProcessClient {
@Override
public R findPending(ProcessWorkFlowResponse response) {
return R.fail("工作票处理流程失败!");
}
}

63
hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/controller/CertificatetNoticeController.java

@ -0,0 +1,63 @@
package com.hnac.hzims.basic.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.hnac.hzims.basic.entity.CertificatetNoticeEntity;
import com.hnac.hzims.basic.service.IImsCertificatetNoticeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springframework.web.bind.annotation.*;
/**
* 控制器
*
* @author Chill
*/
@RestController
@AllArgsConstructor
@RequestMapping("/certificatetNotice")
@Api(value = "档案通知配置页面", tags = "档案通知配置页面")
public class CertificatetNoticeController extends BladeController {
private final IImsCertificatetNoticeService iImsCertificatetNoticeService;
/**
* 新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "增加", notes = "传入imsDutyClass")
public R submit(@RequestBody CertificatetNoticeEntity certificatetNoticeEntity) {
Boolean submit = iImsCertificatetNoticeService.saveOrUpdate(certificatetNoticeEntity);
if (submit) {
return R.success("保存成功");
}
return R.fail("保存失败");
}
/**
* 新增或修改
*/
@PostMapping("/getCertificatetNotice")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "增加", notes = "传入imsDutyClass")
public R getCertificatetNotice() {
CertificatetNoticeEntity res = iImsCertificatetNoticeService.getOne(Wrappers.<CertificatetNoticeEntity>lambdaQuery()
.eq(CertificatetNoticeEntity::getIsDeleted, 0)
.last("limit 1;"));
if (ObjectUtil.isNotEmpty(res)) {
return R.data(res);
}
return R.data("");
}
}

15
hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/mapper/CertificatetNoticeMapper.java

@ -0,0 +1,15 @@
package com.hnac.hzims.basic.mapper;
import com.hnac.hzims.basic.entity.CertificatetNoticeEntity;
import org.apache.ibatis.annotations.Mapper;
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper;
/**
* Mapper 接口
*
* @author Chill
*/
@Mapper
public interface CertificatetNoticeMapper extends UserDataScopeBaseMapper<CertificatetNoticeEntity> {
}

6
hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/mapper/CertificatetNoticeMapper.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hnac.hzims.basic.mapper.CertificatetNoticeMapper">
</mapper>

7
hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/mapper/PersonManagemetMapper.xml

@ -20,13 +20,15 @@
<result property="pic" column="pic" /> <result property="pic" column="pic" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="createTime" column="CREATE_TIME" /> <result property="createTime" column="CREATE_TIME" />
<result property="isDead" column="isDead" />
</collection> </collection>
</resultMap> </resultMap>
<!--嵌套查询--> <!--嵌套查询-->
<select id="getPersonManagemetEntity" resultMap="PersonManagemetMap"> <select id="getPersonManagemetEntity" resultMap="PersonManagemetMap">
select a.id ,a.name,a.unit_name ,a.sex,a.job ,a.academic_title,a.phone ,a.CREATE_TIME, select a.id ,a.name,a.unit_name ,a.sex,a.job ,a.academic_title,a.phone ,a.CREATE_TIME,
b.id as certificatetId,b.person_id,b.type,b.dead_time,b.pic,b.CREATE_TIME,b.status,b.create_dept b.id as certificatetId,b.person_id,b.type,b.dead_time,b.pic,b.CREATE_TIME,b.status,b.create_dept,
case when b.dead_time &lt; NOW() then "过期" else "未过期" end as isDead
from hzims_person_managemet as a from hzims_person_managemet as a
left join hzims_certificatet as b left join hzims_certificatet as b
on a.id=b.person_id on a.id=b.person_id
@ -55,9 +57,6 @@
<if test="academicTitle != null and academicTitle != ''"> <if test="academicTitle != null and academicTitle != ''">
and a.academic_title like CONCAT('%',#{academic_title},'%') and a.academic_title like CONCAT('%',#{academic_title},'%')
</if> </if>
<if test="status != null and status != ''">
and b.status =#{status}
</if>
LIMIT #{current}, #{size} LIMIT #{current}, #{size}
</select> </select>
<!--嵌套查询--> <!--嵌套查询-->

13
hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/service/IImsCertificatetNoticeService.java

@ -0,0 +1,13 @@
package com.hnac.hzims.basic.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hnac.hzims.basic.entity.CertificatetNoticeEntity;
/**
* 服务类
*
* @author Chill
*/
public interface IImsCertificatetNoticeService extends IService<CertificatetNoticeEntity> {
}

20
hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/service/impl/CertificatetNoticeServiceImpl.java

@ -0,0 +1,20 @@
package com.hnac.hzims.basic.service.impl;
import com.hnac.hzims.basic.entity.CertificatetNoticeEntity;
import com.hnac.hzims.basic.mapper.CertificatetNoticeMapper;
import com.hnac.hzims.basic.service.IImsCertificatetNoticeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
* 证书实现类
* @author ty
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class CertificatetNoticeServiceImpl extends BaseServiceImpl<CertificatetNoticeMapper, CertificatetNoticeEntity> implements IImsCertificatetNoticeService {
}

41
hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OfflineTicketProcessImpl.java

@ -0,0 +1,41 @@
package com.hnac.hzims.middle.processflow.strategy.serviceimpl;
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.ticketprocess.feign.IOfflineTicketProcessClient;
import lombok.AllArgsConstructor;
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 org.springframework.util.Assert;
import static com.hnac.hzims.middle.process.constant.TicketProcessConstant.OFFLINE_WORK_TICKET;
@Slf4j
@Service
@AllArgsConstructor
public class OfflineTicketProcessImpl extends ProcessAbstractService {
private final ProcessDictService processDictService;
private final IOfflineTicketProcessClient offlineTicketProcessClient;
@Override
public Boolean isWorkflowProcess(WorkflowQueue flowQueue) {
String dictValue = processDictService.selectDictValueByKey(OFFLINE_WORK_TICKET);
return dictValue.equals(flowQueue.getProcessDefinitionKey());
}
@Override
public void calculate(ProcessWorkFlowResponse response) {
log.info("线下工作票调用fein接口消费开始---param",response);
R result = offlineTicketProcessClient.findPending(response);
Assert.isTrue(result.isSuccess(),() -> {
throw new ServiceException("线下工作票处理失败!");
});
log.info("线下工作票调用fein接口消费结束---");
}
}

1
hzims-service/hzims-middle/src/main/resources/db/1.0.2.sql

@ -0,0 +1 @@
INSERT INTO `process_dict` (`dict_code`, `dict_sort`, `dict_key`, `dict_value`, `dict_label`, `dict_type`, `is_default`, `status`, `create_dept`, `create_time`, `update_time`, `remark`) VALUES (9, 9, 'offlineWorkTicket', 'offlineWorkTicket', '线下工作票', '线下工作票', 'Y', 0, NULL, '2023-12-28 16:35:10', '2023-12-28 16:35:14', '线下工作票流程');

4
hzims-service/hzims-scheduled/pom.xml

@ -167,6 +167,10 @@
<artifactId>weather-api</artifactId> <artifactId>weather-api</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.hnac.hzims</groupId>
<artifactId>basic-api</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <artifactId>fastjson</artifactId>
</dependency> </dependency>

15
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/CertificatetMapper.java

@ -0,0 +1,15 @@
package com.hnac.hzims.scheduled.mapper.basic;
import com.hnac.hzims.basic.entity.CertificatetEntity;
import org.apache.ibatis.annotations.Mapper;
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper;
/**
* Mapper 接口
*
* @author Chill
*/
@Mapper
public interface CertificatetMapper extends UserDataScopeBaseMapper<CertificatetEntity> {
}

6
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/CertificatetMapper.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hnac.hzims.scheduled.mapper.basic.CertificatetMapper">
</mapper>

15
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/CertificatetNoticeMapper.java

@ -0,0 +1,15 @@
package com.hnac.hzims.scheduled.mapper.basic;
import com.hnac.hzims.basic.entity.CertificatetNoticeEntity;
import org.apache.ibatis.annotations.Mapper;
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper;
/**
* Mapper 接口
*
* @author Chill
*/
@Mapper
public interface CertificatetNoticeMapper extends UserDataScopeBaseMapper<CertificatetNoticeEntity> {
}

6
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/CertificatetNoticeMapper.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hnac.hzims.scheduled.mapper.basic.CertificatetNoticeMapper">
</mapper>

29
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/PersonManagemetMapper.java

@ -0,0 +1,29 @@
package com.hnac.hzims.scheduled.mapper.basic;
import com.hnac.hzims.basic.entity.PersonManagemetEntity;
import com.hnac.hzims.basic.vo.PersonManagemetVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper;
import java.util.Date;
import java.util.List;
/**
* Mapper 接口
*
* @author Chill
*/
@Mapper
public interface PersonManagemetMapper extends UserDataScopeBaseMapper<PersonManagemetEntity> {
List<PersonManagemetVo> getPersonManagemetEntity(
@Param(value = "type")String type, @Param(value = "deadStartTime") Date deadStartTime, @Param(value = "deadTime")Date deadTime,
@Param(value = "name")String name, @Param(value = "unitName")String unitName, @Param(value = "sex")String sex, @Param(value = "job")String job,
@Param(value = "academicTitle")String academicTitle, @Param(value = "status")Integer status, @Param(value = "current")Integer current, @Param(value = "size")Integer size) ;
Integer getCountByPersonManagemetEntity(
@Param(value = "type")String type, @Param(value = "deadStartTime") Date deadStartTime, @Param(value = "deadTime")Date deadTime,
@Param(value = "name")String name, @Param(value = "unitName")String unitName, @Param(value = "sex")String sex, @Param(value = "job")String job,
@Param(value = "academicTitle")String academicTitle, @Param(value = "status")Integer status, @Param(value = "current")Integer current, @Param(value = "size")Integer size) ;
}

97
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/basic/PersonManagemetMapper.xml

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hnac.hzims.scheduled.mapper.basic.PersonManagemetMapper">
<!--嵌套结果的 resultMap-->
<resultMap id="PersonManagemetMap" type="com.hnac.hzims.basic.vo.PersonManagemetVo">
<id property="id" column="id" jdbcType="VARCHAR" />
<result property="name" column="name" jdbcType="VARCHAR" />
<result property="unitName" column="unitName" jdbcType="VARCHAR" />
<result property="sex" column="sex" jdbcType="VARCHAR" />
<result property="job" column="job" jdbcType="VARCHAR" />
<result property="academicTitle" column="academic_title" jdbcType="VARCHAR"/>
<result property="phone" column="phone" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<collection property="certificatetEntityList" ofType="com.hnac.hzims.basic.entity.CertificatetEntity">
<id property="id" column="certificatetId" />
<result property="personId" column="person_id" />
<result property="type" column="type" />
<result property="deadTime" column="dead_time" />
<result property="pic" column="pic" />
<result property="status" column="status" />
<result property="isDead" column="isDead" />
</collection>
</resultMap>
<!--嵌套查询-->
<select id="getPersonManagemetEntity" resultMap="PersonManagemetMap">
select a.id ,a.name,a.unit_name ,a.sex,a.job ,a.academic_title,a.phone ,a.CREATE_TIME,
b.id as certificatetId,b.person_id,b.type,b.dead_time,b.pic,b.CREATE_TIME,b.status,b.create_dept,
case when b.dead_time &lt; NOW() then "过期" else "未过期" end as isDead
from hzims_person_managemet as a
left join hzims_certificatet as b
on a.id=b.person_id
where a.is_deleted = 0 and b.is_deleted = 0
<if test="type != null and type != ''">
and b.type = #{type}
</if>
<if test="deadStartTime != null and type != ''">
and b.dead_time &gt;= #{deadStartTime}
</if>
<if test="deadTime != null and type != ''">
and b.dead_time &lt;= #{deadTime}
</if>
<if test="name != null and name != ''">
and a.name like CONCAT('%',#{name},'%')
</if>
<if test="unitName != null and unitName != ''">
and a.unit_name like CONCAT('%',#{unitName},'%')
</if>
<if test="sex != null and sex != ''">
and a.sex = #{sex}
</if>
<if test="job != null and job != ''">
and a.job like CONCAT('%',#{job},'%')
</if>
<if test="academicTitle != null and academicTitle != ''">
and a.academic_title like CONCAT('%',#{academic_title},'%')
</if>
LIMIT #{current}, #{size}
</select>
<!--嵌套查询-->
<select id="getCountByPersonManagemetEntity" resultType="Integer">
select count(*)
from hzims_person_managemet as a
left join hzims_certificatet as b
on a.id=b.person_id
where a.is_deleted = 0 and b.is_deleted = 0
<if test="type != null and type != ''">
and b.type = #{type}
</if>
<if test="deadStartTime != null and type != ''">
and b.dead_time &gt;= #{deadStartTime}
</if>
<if test="deadTime != null and type != ''">
and b.dead_time &lt;= #{deadTime}
</if>
<if test="name != null and name != ''">
and a.name like CONCAT('%',#{name},'%')
</if>
<if test="unitName != null and unitName != ''">
and a.unit_name like CONCAT('%',#{unitName},'%')
</if>
<if test="sex != null and sex != ''">
and a.sex = #{sex}
</if>
<if test="job != null and job != ''">
and a.job like CONCAT('%',#{job},'%')
</if>
<if test="academicTitle != null and academicTitle != ''">
and a.academic_title like CONCAT('%',#{academic_title},'%')
</if>
<if test="status != null and status != ''">
and b.status =#{status}
</if>
</select>
</mapper>

141
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/basicScheduledTask.java

@ -0,0 +1,141 @@
package com.hnac.hzims.scheduled.scheduled;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hnac.hzims.basic.entity.CertificatetEntity;
import com.hnac.hzims.basic.entity.CertificatetNoticeEntity;
import com.hnac.hzims.basic.entity.PersonManagemetEntity;
import com.hnac.hzims.message.MessageConstants;
import com.hnac.hzims.message.dto.BusinessMessageDTO;
import com.hnac.hzims.message.entity.config.SmsConfigEntity;
import com.hnac.hzims.message.fegin.IMessageClient;
import com.hnac.hzims.message.fegin.IMessageConfigClient;
import com.hnac.hzims.scheduled.mapper.basic.PersonManagemetMapper;
import com.hnac.hzims.scheduled.service.basic.IImsCertificatetNoticeService;
import com.hnac.hzims.scheduled.service.basic.IImsCertificatetService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.cache.UserCache;
import org.springblade.system.user.entity.User;
import org.springblade.system.user.feign.IUserClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static com.hnac.hzims.operational.main.constant.MainConstants.*;
/**
* 排班到期定时任务通知
*
* @author ty
*/
@Slf4j
@Component
public class basicScheduledTask {
@Autowired
private IImsCertificatetService iImsCertificatetService;
@Autowired
private IImsCertificatetNoticeService iImsCertificatetNoticeService;
@Autowired
private ISysClient sysClient;
@Autowired
private IUserClient userClient;
@Autowired
private IMessageClient messageClient;
@Autowired
private PersonManagemetMapper personManagemetMapper;
@Autowired
private IMessageConfigClient messageConfigClient;
/**
* realId刷新
*/
@XxlJob(CERTIFICATET_DEAD_LINE_NOTICE)
// @Scheduled(cron = "0 */1 * * * ? ")
public ReturnT<String> certificatetDeadLineNotice(String param) throws ParseException {
Date endTime = new Date();
if (Func.isBlank(param)) {
endTime = new SimpleDateFormat("yyyy-MM-dd").parse(param);
}
CertificatetNoticeEntity noticeEntity = iImsCertificatetNoticeService.getOne(Wrappers.<CertificatetNoticeEntity>lambdaQuery()
.eq(CertificatetNoticeEntity::getIsDeleted, 0)
.last("limit 1;"));
//用户档案过期截止时间
Date date = DateUtil.plusDays(endTime, noticeEntity.getSafeTime());
List<CertificatetEntity> list = iImsCertificatetService.list(Wrappers.<CertificatetEntity>lambdaQuery()
.le(CertificatetEntity::getDeadTime, date));
String noticeUsers = noticeEntity.getNoticeUsers();
List<String> userList = Arrays.asList(noticeUsers.split(","));
if (CollectionUtil.isNotEmpty(userList) && CollectionUtil.isNotEmpty(list)) {
List<String> personIds = list.stream().map(CertificatetEntity::getPersonId).collect(Collectors.toList());
List<PersonManagemetEntity> personManagemetEntities = personManagemetMapper.selectList(Wrappers.<PersonManagemetEntity>query().lambda().in(PersonManagemetEntity::getId, personIds));
String personNotice="";
if (CollectionUtil.isNotEmpty(personManagemetEntities)) {
personNotice = personManagemetEntities.stream().map(PersonManagemetEntity::getName).collect(Collectors.joining(","));
}
if ("1".equals(noticeEntity.getSendType())) {
sendSmsByUserList(userList, date,personNotice);
}
sendMessage(list.get(0), noticeEntity.getSafeTime(), noticeEntity.getNoticeUsers(),personNotice);
}
return new ReturnT<>("SUCCESS");
}
private void sendSmsByUserList(List<String> userList, Date date,String personNotice) {
//区分用户
for (String s : userList) {
User user = UserCache.getUser(Long.valueOf(s));
String phone = "";
if (ObjectUtil.isNotEmpty(user)) {
phone = user.getPhone();
}
//短信推送
String code = "certificatetNotice";
SmsConfigEntity smsConfigEntity = messageConfigClient.getSmsConfigByBusinessKey(code);
Map<String, String> contentParams = new HashMap<>(2);
contentParams.put("one", personNotice);
String deadLine = DateUtil.format(date, "yyyy-MM-dd");
contentParams.put("two", deadLine);
smsConfigEntity.setTemplateParam(JSONObject.toJSONString(contentParams));
smsConfigEntity.setPhones(phone);
messageConfigClient.pushSmsMessageByConfig(smsConfigEntity);
}
}
private void sendMessage(CertificatetEntity certificatetEntity, Integer date, String users,String personNotice) {
// //注意:通知人是创建人所在机构
BusinessMessageDTO message = new BusinessMessageDTO();
message.setBusinessClassify("system");
message.setBusinessKey(MessageConstants.BusinessClassifyEnum.CERTIFICATETNOTICE.getKey());
message.setSubject(MessageConstants.BusinessClassifyEnum.CERTIFICATETNOTICE.getDescription());
message.setTaskId(System.currentTimeMillis());
message.setTenantId("200000");
String countent =
personNotice + "的证书即将到期,请提交新的证书资料";
message.setContent(countent);
message.setDeptId(certificatetEntity.getCreateDept());
R<String> deptName = sysClient.getDeptName(certificatetEntity.getCreateDept());
if (deptName.isSuccess()) {
message.setDeptName(deptName.getData());
}
message.setUserIds(users);
User admin = userClient.userByAccount("200000", "admin").getData();
message.setCreateUser(admin.getId());
messageClient.sendAppAndWsMsgByUsers(message);
}
}

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/basic/IImsCertificatetNoticeService.java

@ -0,0 +1,13 @@
package com.hnac.hzims.scheduled.service.basic;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hnac.hzims.basic.entity.CertificatetNoticeEntity;
/**
* 服务类
*
* @author Chill
*/
public interface IImsCertificatetNoticeService extends IService<CertificatetNoticeEntity> {
}

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/basic/IImsCertificatetService.java

@ -0,0 +1,13 @@
package com.hnac.hzims.scheduled.service.basic;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hnac.hzims.basic.entity.CertificatetEntity;
/**
* 服务类
*
* @author Chill
*/
public interface IImsCertificatetService extends IService<CertificatetEntity> {
}

21
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/basic/impl/CertificatetNoticeServiceImpl.java

@ -0,0 +1,21 @@
package com.hnac.hzims.scheduled.service.basic.impl;
import com.hnac.hzims.basic.entity.CertificatetNoticeEntity;
import com.hnac.hzims.scheduled.mapper.basic.CertificatetNoticeMapper;
import com.hnac.hzims.scheduled.service.basic.IImsCertificatetNoticeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
* 证书实现类
* @author ty
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class CertificatetNoticeServiceImpl extends BaseServiceImpl<CertificatetNoticeMapper, CertificatetNoticeEntity> implements IImsCertificatetNoticeService {
}

21
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/basic/impl/CertificatetServiceImpl.java

@ -0,0 +1,21 @@
package com.hnac.hzims.scheduled.service.basic.impl;
import com.hnac.hzims.basic.entity.CertificatetEntity;
import com.hnac.hzims.scheduled.mapper.basic.CertificatetMapper;
import com.hnac.hzims.scheduled.service.basic.IImsCertificatetService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
* 证书实现类
* @author ty
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class CertificatetServiceImpl extends BaseServiceImpl<CertificatetMapper, CertificatetEntity> implements IImsCertificatetService {
}

5
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/service/impl/EventServiceImpl.java

@ -1,5 +1,6 @@
package com.hnac.hzinfo.inspect.task.service.impl; package com.hnac.hzinfo.inspect.task.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.hnac.hzims.operational.defect.constants.DefectConstant; import com.hnac.hzims.operational.defect.constants.DefectConstant;
@ -15,6 +16,7 @@ import com.hnac.hzinfo.inspect.task.mapper.TaskEventMapper;
import com.hnac.hzinfo.inspect.task.service.*; import com.hnac.hzinfo.inspect.task.service.*;
import com.hnac.hzinfo.inspect.task.vo.EventAddVO; import com.hnac.hzinfo.inspect.task.vo.EventAddVO;
import com.hnac.hzinfo.inspect.task.vo.EventRecordAddVO; import com.hnac.hzinfo.inspect.task.vo.EventRecordAddVO;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.log.exception.ServiceException; import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.log.logger.BladeLogger; import org.springblade.core.log.logger.BladeLogger;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
@ -43,6 +45,7 @@ import java.util.List;
* @author Chill * @author Chill
*/ */
@Service @Service
@Slf4j
public class EventServiceImpl extends BaseServiceImpl<TaskEventMapper, EventEntity> implements IEventService { public class EventServiceImpl extends BaseServiceImpl<TaskEventMapper, EventEntity> implements IEventService {
@Autowired @Autowired
@ -187,7 +190,9 @@ public class EventServiceImpl extends BaseServiceImpl<TaskEventMapper, EventEnti
if(!AuthUtil.isAdministrator()){ if(!AuthUtil.isAdministrator()){
ITaskService taskService = SpringUtil.getBean(ITaskService.class); ITaskService taskService = SpringUtil.getBean(ITaskService.class);
TaskEntity taskEntity = taskService.getById(eventVO.getTaskId()); TaskEntity taskEntity = taskService.getById(eventVO.getTaskId());
log.info("userId:"+ (user == null ? eventVO.getUserId() : user.getUserId()) + ";taskId:" + eventVO.getTaskId() );
TaskUserEntity taskUserEntity = taskUserService.getOne(Wrappers.<TaskUserEntity>lambdaQuery().eq(TaskUserEntity::getTaskId,eventVO.getTaskId()).eq(TaskUserEntity::getUserId,user == null ? eventVO.getUserId() : user.getUserId())); TaskUserEntity taskUserEntity = taskUserService.getOne(Wrappers.<TaskUserEntity>lambdaQuery().eq(TaskUserEntity::getTaskId,eventVO.getTaskId()).eq(TaskUserEntity::getUserId,user == null ? eventVO.getUserId() : user.getUserId()));
log.info("taskUserEntity:"+JSON.toJSONString(taskUserEntity));
if(taskUserEntity==null){ if(taskUserEntity==null){
throw new ServiceException("该任务已被别人领取"); throw new ServiceException("该任务已被别人领取");
} }

9
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/service/impl/TaskServiceImpl.java

@ -54,6 +54,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@ -282,7 +283,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, TaskEntity> imp
taskUserService.update(Wrappers.<TaskUserEntity>lambdaUpdate().set(TaskUserEntity::getClaimStatus, ClaimStatusEnum.COLLECT.getStatus()).set(TaskUserEntity::getClaimTime, LocalDateTime.now()).eq(TaskUserEntity::getTaskId, task.getId()).eq(TaskUserEntity::getUserId, userId)); taskUserService.update(Wrappers.<TaskUserEntity>lambdaUpdate().set(TaskUserEntity::getClaimStatus, ClaimStatusEnum.COLLECT.getStatus()).set(TaskUserEntity::getClaimTime, LocalDateTime.now()).eq(TaskUserEntity::getTaskId, task.getId()).eq(TaskUserEntity::getUserId, userId));
//如果是抢占任务,删除能够抢占此任务的其他人 //如果是抢占任务,删除能够抢占此任务的其他人
if (PlanContants.PlanMethodEnum.SEIZE.getMethod().equals(task.getMethod())) { if (PlanContants.PlanMethodEnum.SEIZE.getMethod().equals(task.getMethod())) {
taskUserService.remove(Wrappers.<TaskUserEntity>lambdaQuery().eq(TaskUserEntity::getTaskId, task.getId()).ne(TaskUserEntity::getId, userId)); taskUserService.remove(Wrappers.<TaskUserEntity>lambdaQuery().eq(TaskUserEntity::getTaskId, task.getId()).ne(TaskUserEntity::getUserId, userId));
} }
task.setStatus(Integer.valueOf(TaskStatusEnum.UNDERWAY_STATUS.getStatus())); task.setStatus(Integer.valueOf(TaskStatusEnum.UNDERWAY_STATUS.getStatus()));
task.setStartTime(LocalDateTime.now()); task.setStartTime(LocalDateTime.now());
@ -1162,6 +1163,12 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, TaskEntity> imp
voteChartVo.setFinishIds(finishIds); voteChartVo.setFinishIds(finishIds);
voteChartVo.setUndoneNum(undoneIds.size()); voteChartVo.setUndoneNum(undoneIds.size());
voteChartVo.setUndoneIds(undoneIds); voteChartVo.setUndoneIds(undoneIds);
if (CollectionUtil.isEmpty(list)||CollectionUtil.isEmpty(undoneIds)){
voteChartVo.setFinishRate(0.00d);
}else {
BigDecimal divide = new BigDecimal(list.size()).divide(new BigDecimal(list.size()),2,BigDecimal.ROUND_UP);
voteChartVo.setFinishRate( divide.doubleValue());
}
return voteChartVo; return voteChartVo;
} }

1
hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/service/impl/OperDefectServiceImpl.java

@ -799,6 +799,7 @@ public class OperDefectServiceImpl extends BaseServiceImpl<OperDefectMapper, Ope
if (res.isSuccess() && CollectionUtil.isNotEmpty(res.getData())) { if (res.isSuccess() && CollectionUtil.isNotEmpty(res.getData())) {
deptList = res.getData().stream().map(Dept::getId).map(s -> s.toString()).collect(Collectors.toList()); deptList = res.getData().stream().map(Dept::getId).map(s -> s.toString()).collect(Collectors.toList());
} else { } else {
log.error("getCurrentMonthStatic"+"用户权限问题");
throw new WebServiceException("该用户没有此权限"); throw new WebServiceException("该用户没有此权限");
} }
if (StringUtil.isNotBlank(deptId)) { if (StringUtil.isNotBlank(deptId)) {

26
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/redisConsume/feign/OfflineTicketProcessClient.java

@ -0,0 +1,26 @@
package com.hnac.hzims.ticket.redisConsume.feign;
import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse;
import com.hnac.hzims.ticket.ticketprocess.feign.IOfflineTicketProcessClient;
import com.hnac.hzims.ticket.twoTicket.service.TicketProcessService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@AllArgsConstructor
@Slf4j
public class OfflineTicketProcessClient implements IOfflineTicketProcessClient {
private final TicketProcessService processService;
@Override
@PostMapping(FIND_PENDING)
public R findPending(@RequestBody ProcessWorkFlowResponse response) {
return R.status(processService.offlineTicketFindPending(response));
}
}

5
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/controller/TicketProcessController.java

@ -45,6 +45,11 @@ public class TicketProcessController {
return R.data(ticketId); return R.data(ticketId);
} }
@ApiOperation("开启工作票线下流程")
@PostMapping("/startUpOfflineTicket")
public R<Long> startUpOfflineTicket(@RequestBody WorkTicketVo workTicketVo) {
return R.data(ticketProcessService.startUpOfflineTicket(workTicketVo));
}
/** /**
* 工作票待处理 * 工作票待处理

8
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/TicketProcessService.java

@ -27,6 +27,12 @@ public interface TicketProcessService {
*/ */
void findPending(ProcessWorkFlowResponse response); void findPending(ProcessWorkFlowResponse response);
/**
* 线下工作票流程处理
* @param response 流程信息
* @return 处理结果
*/
Boolean offlineTicketFindPending(ProcessWorkFlowResponse response);
/** /**
@ -46,4 +52,6 @@ public interface TicketProcessService {
* @param value * @param value
*/ */
public void getDataConversion(Map<String, Object> dataConversion, String key, Object value); public void getDataConversion(Map<String, Object> dataConversion, String key, Object value);
Long startUpOfflineTicket(WorkTicketVo workTicketVo);
} }

100
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java

@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.hnac.hzims.message.entity.config.PushConfigEntity; import com.hnac.hzims.message.entity.config.PushConfigEntity;
import com.hnac.hzims.message.fegin.IMessageConfigClient; import com.hnac.hzims.message.fegin.IMessageConfigClient;
import com.hnac.hzims.operational.access.dto.OperAccessTaskDTO; import com.hnac.hzims.operational.access.dto.OperAccessTaskDTO;
@ -21,13 +22,11 @@ import com.hnac.hzims.ticket.allTicket.service.TicketInfoEvaluateService;
import com.hnac.hzims.ticket.allTicket.vo.TicketInfoStatisticVO; import com.hnac.hzims.ticket.allTicket.vo.TicketInfoStatisticVO;
import com.hnac.hzims.ticket.constants.TicketConstants; import com.hnac.hzims.ticket.constants.TicketConstants;
import com.hnac.hzims.ticket.constants.WorkTicketConstants; import com.hnac.hzims.ticket.constants.WorkTicketConstants;
import com.hnac.hzims.ticket.twoTicket.constant.TicketConstant;
import com.hnac.hzims.ticket.twoTicket.entity.WorkTicketFinish; import com.hnac.hzims.ticket.twoTicket.entity.WorkTicketFinish;
import com.hnac.hzims.ticket.twoTicket.service.IFirstWorkTicketService; import com.hnac.hzims.ticket.twoTicket.service.IFirstWorkTicketService;
import com.hnac.hzims.ticket.twoTicket.service.IWorkTicketFinishService; import com.hnac.hzims.ticket.twoTicket.service.IWorkTicketFinishService;
import com.hnac.hzims.ticket.utils.AsposeUtil; import com.hnac.hzims.ticket.utils.*;
import com.hnac.hzims.ticket.utils.ExcelUtil;
import com.hnac.hzims.ticket.utils.ObjectUtils;
import com.hnac.hzims.ticket.utils.PdfUtils;
import com.hnac.hzims.ticket.workTicket.dto.*; import com.hnac.hzims.ticket.workTicket.dto.*;
import com.hnac.hzims.ticket.workTicket.entity.*; import com.hnac.hzims.ticket.workTicket.entity.*;
import com.hnac.hzims.ticket.workTicket.mapper.WorkDelayNoScopeMapper; import com.hnac.hzims.ticket.workTicket.mapper.WorkDelayNoScopeMapper;
@ -39,7 +38,7 @@ import com.hnac.hzims.ticket.workTicket.wrapper.WorkTicketInfoWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.*;
import org.springblade.core.log.exception.ServiceException; import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.secure.utils.AuthUtil;
@ -54,14 +53,19 @@ import org.springblade.system.user.feign.IUserClient;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.ResourceUtils;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@ -69,6 +73,8 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import static org.aspectj.weaver.tools.cache.SimpleCacheFactory.path;
/** /**
* @author hx * @author hx
*/ */
@ -280,13 +286,23 @@ public class FirstWorkTicketServiceImpl extends BaseServiceImpl<WorkTicketInfoMa
@Override @Override
public void preview(HttpServletResponse response,Long ticketId) { public void preview(HttpServletResponse response,Long ticketId) {
WorkTicketInfoEntity workTicketInfoEntity = this.getById(ticketId); WorkTicketInfoEntity workTicketInfoEntity = this.getById(ticketId);
Map params = this.getTicketParamById(ticketId,workTicketInfoEntity); Map<String,Object> params = this.getTicketParamById(ticketId,workTicketInfoEntity);
String tempFileName = WorkTicketConstants.TicketSignageEnum.getTempFileNameByType(workTicketInfoEntity.getType()); String tempFileName = WorkTicketConstants.TicketSignageEnum.getTempFileNameByType(workTicketInfoEntity.getType());
Assert.isTrue(StringUtil.isNotBlank(tempFileName),() -> { Assert.isTrue(StringUtil.isNotBlank(tempFileName),() -> {
throw new ServiceException("未找到模板文件,预览失败!"); throw new ServiceException("未找到模板文件,预览失败!");
}); });
String wordPath = this.getFileSavePath() + params.get("code") + "_" + params.get("addressEquName") +".docx"; String wordPath = this.getFileSavePath() + params.get("code") + "_" + params.get("addressEquName") +".docx";
this.exportTicketWord("template/"+tempFileName, wordPath, params); List<XWPFDocument> documents;
try {
documents = this.getDocuments(workTicketInfoEntity, params);
} catch (Exception e) {
throw new RuntimeException(e);
}
try {
this.exportTicketWord(documents,wordPath);
} catch (IOException e) {
throw new RuntimeException(e);
}
String pdfPath = this.getFileSavePath() + params.get("code") + "_" + params.get("addressEquName") +".pdf"; String pdfPath = this.getFileSavePath() + params.get("code") + "_" + params.get("addressEquName") +".pdf";
AsposeUtil.wordToPdf(wordPath,pdfPath); AsposeUtil.wordToPdf(wordPath,pdfPath);
PdfUtils.readPdf(response,pdfPath); PdfUtils.readPdf(response,pdfPath);
@ -371,38 +387,60 @@ public class FirstWorkTicketServiceImpl extends BaseServiceImpl<WorkTicketInfoMa
} }
return params; return params;
} }
/**
* word模板填充内容并将结果导出 private List<XWPFDocument> getDocuments(WorkTicketInfoEntity workTicketInfo,Map<String,Object> params) {
* @param templatePath 模板路径 List<XWPFDocument> result = Lists.newArrayList();
* @param savePath 结果导出路径 XWPFDocument document = this.fillDocument("template/" + WorkTicketConstants.TicketSignageEnum.getTempFileNameByType(workTicketInfo.getType()), params);
* @param params 填充对象 result.add(document);
*/ //安全隔离措施附页 (true,展示附件,false,不展示附件)
private void exportTicketWord(String templatePath, String savePath, Map params) { if (workTicketInfo.getIsSafety()) {
XWPFDocument xwpfDocument = this.fillDocument("template/" + TicketConstant.SECURE_PAGE, params);
result.add(xwpfDocument);
}
//危险点分析与预控措施票 (true,展示附件,false,不展示附件)
if (workTicketInfo.getIsHazard()) {
XWPFDocument xwpfDocument = this.fillDocument("template/" + TicketConstant.SAFETY_PAGE, params);
result.add(xwpfDocument);
}
//动火工作票 (true,展示附件,false,不展示附件)
if (workTicketInfo.getIsRailway()) {
XWPFDocument xwpfDocument = this.fillDocument("template/" + TicketConstant.FLIGHT_PAGE, params);
result.add(xwpfDocument);
}
//有限空间监测记录单(true,展示附件,false,不展示附件)
if (workTicketInfo.getIsLimited()) {
XWPFDocument xwpfDocument = this.fillDocument("template/" + TicketConstant.SPACE_PAGE, params);
result.add(xwpfDocument);
}
//每日开工和收工时间附页
if (workTicketInfo.getIsStart()) {
XWPFDocument xwpfDocument = this.fillDocument("template/" + TicketConstant.START_PAGE, params);
result.add(xwpfDocument);
}
return result;
}
private XWPFDocument fillDocument(String templatePath, Map params) {
XWPFDocument xwpfDocument = null; XWPFDocument xwpfDocument = null;
try { try {
xwpfDocument = WordExportUtil.exportWord07(templatePath, params); xwpfDocument = WordExportUtil.exportWord07(templatePath, params);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
FileOutputStream outputStream = null; return xwpfDocument;
try { }
outputStream = new FileOutputStream(savePath);
} catch (FileNotFoundException e) { private void exportTicketWord(List<XWPFDocument> documents, String savePath) throws IOException {
throw new RuntimeException(e); FileOutputStream out = new FileOutputStream(savePath, true);
} Path file = Paths.get(path);
try { if(Files.exists(file)) {
xwpfDocument.write(outputStream); Files.delete(file);
}
catch(Exception e) {
e.printStackTrace();
} }
finally { new File(savePath).createNewFile();
try { for (XWPFDocument document : documents) {
outputStream.close(); document.write(out);
} catch (IOException e) {
throw new RuntimeException(e);
}
} }
out.close();
} }
@Override @Override

119
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java

@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hnac.hzims.common.logs.utils.StringUtils; import com.hnac.hzims.common.logs.utils.StringUtils;
import com.hnac.hzims.message.MessageConstants; import com.hnac.hzims.message.MessageConstants;
import com.hnac.hzims.message.dto.BusinessMessageDTO; import com.hnac.hzims.message.dto.BusinessMessageDTO;
@ -61,6 +62,7 @@ import org.springblade.system.user.feign.IUserClient;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -488,6 +490,64 @@ public class TicketProcessServiceImpl implements TicketProcessService {
} }
@Override
public Boolean offlineTicketFindPending(ProcessWorkFlowResponse response) {
log.info("线下工作票接收到的工作票数据为:{}",JSON.toJSONString(response));
FristWorkTicketVo ticketResponse = JSONObject.parseObject(JSON.toJSONString(response.getVariables()),FristWorkTicketVo.class);
Assert.isTrue(ObjectUtil.isNotEmpty(ticketResponse),() -> {
log.error("接收到的数据为:{}",JSON.toJSONString(response.getVariables()));
throw new ServiceException("线下工作票处理流程环节接收数据失败,请联系管理员");
});
WorkTicketVo workTicketVo = ticketResponse.getWorkTicketVo();
WorkTicketInfoEntity workTicket = workTicketVo.getWorkTicket();
WorkTicketInfoEntity info = firstWorkTicketService.getById(workTicket.getId());
if(ObjectUtil.isEmpty(info)) {
return true;
}
workTicket.setProcessInstanceId(response.getProcessInstanceId());
this.saveWorkTicket(workTicket,response);
List<WorkTicketSafetyMeasureEntity> safetyMeasuresList = workTicketVo.getSafetyMeasuresList();
if(CollectionUtil.isNotEmpty(safetyMeasuresList)) {
workTicketSafetyMeasureService.saveOrUpdateBatch(safetyMeasuresList);
}
List<WorkTicketContentEntity> workTicketContentDtoList = workTicketVo.getWorkTicketContentDtoList();
if(CollectionUtil.isNotEmpty(workTicketContentDtoList)) {
contentService.saveOrUpdateBatch(workTicketContentDtoList);
}
WorkTicketFinish workTicketFinish = workTicketVo.getWorkTicketFinish();
if(CollectionUtil.isNotEmpty(workTicketContentDtoList)) {
workTicketFinishService.saveOrUpdate(workTicketFinish);
}
// 推送消息
new Thread(() -> this.sendMessage(workTicket,response.getUserId())).start();
return true;
}
/**
* 推送消息
* @param ticketInfo 票据信息
*/
private void sendMessage(WorkTicketInfoEntity ticketInfo,String userIds) {
BusinessMessageDTO businessMessageDTO = new BusinessMessageDTO();
businessMessageDTO.setBusinessClassify("business");
businessMessageDTO.setBusinessKey(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getKey());
businessMessageDTO.setSubject(MessageConstants.BusinessClassifyEnum.TICKETMESSAGE.getDescription());
businessMessageDTO.setTaskId(ticketInfo.getId());
businessMessageDTO.setTenantId(ticketInfo.getTenantId());
String content = "您有一张线下工作票待审批,工作内容: ".concat(ticketInfo.getWorkContent()).concat(",审批环节: ").concat(ticketInfo.getTaskName());
businessMessageDTO.setContent(content);
businessMessageDTO.setDeptId(ticketInfo.getCreateDept());
R<String> deptName = sysClient.getDeptName(ticketInfo.getCreateDept());
if (deptName.isSuccess()) {
businessMessageDTO.setDeptName(deptName.getData());
}
businessMessageDTO.setUserIds(userIds);
businessMessageDTO.setCreateUser(ticketInfo.getCreateUser());
R booleanR = messageClient.sendAppAndWsMsgByUsers(businessMessageDTO);
if (!booleanR.isSuccess()) {
throw new ServiceException("消息推送失败");
}
}
/** /**
* 保存流程描述 * 保存流程描述
@ -1298,6 +1358,65 @@ public class TicketProcessServiceImpl implements TicketProcessService {
} }
} }
@Override
@Transactional
public Long startUpOfflineTicket(WorkTicketVo workTicketVo) {
WorkTicketInfoEntity workTicket = workTicketVo.getWorkTicket();
this.saveOfflineTicket(workTicket);
this.saveSafetyMeasures(workTicketVo.getSafetyMeasuresList(), workTicketVo.getWorkTicket());
this.saveWorkTicketContentDto(workTicketVo.getWorkTicketContentDtoList(), workTicketVo.getWorkTicket());
// 开启工作流
String processInstanceId = this.startOfflineTicketProcess(workTicketVo);
return workTicket.getId();
}
/**
* 开启线下工作票流程
* @param workTicketVo 工作票
* @return 工作流实例ID
*/
private String startOfflineTicketProcess(WorkTicketVo workTicketVo) {
WorkTicketInfoEntity workTicket = workTicketVo.getWorkTicket();
Map<String, Object> params = new HashMap<>();
workTicketVo.setWorkTicket(workTicket);
params.put("workTicketVo",workTicketVo);
R<BladeFlow> flowR =
flowClient.startProcessInstanceContainNameByKey("offlineWorkTicket",String.valueOf(workTicket.getId()),workTicket.getWorkContent(), params);
Assert.isTrue(flowR.isSuccess(),() -> {
throw new ServiceException("开启工作流失败,请联系管理员");
});
return flowR.getData().getProcessInstanceId();
}
/**
* 保存线下工作票
* @param workTicket 工作票信息
*/
private void saveOfflineTicket(WorkTicketInfoEntity workTicket) {
StationEntity stationEntity = new StationEntity();
stationEntity.setCode(workTicket.getSignageCode());
R<StationEntity> stationR = stationClient.getOne(stationEntity);
Assert.isTrue(stationR.isSuccess() && Func.isNotEmpty(stationR.getData().getSignage()),() -> {
throw new ServiceException("获取站点两票抬头失败");
});
workTicket.setSignage(stationR.getData().getSignage());
workTicket.setSignageCode(stationR.getData().getCode());
String code = processDictFeignService.getTicketByCode(workTicket.getSignage(), this.getTicketWichCode(workTicket.getType()));
workTicket.setCode(code);
Assert.isTrue(StringUtils.isNotBlank(code),() -> {
throw new ServiceException("生成两票编号失败,请联系管理员!");
});
workTicket.setStepOperator(AuthUtil.getUserName());
workTicket.setIsSafety(false);
workTicket.setIsHazard(false);
workTicket.setIsRailway(false);
workTicket.setIsLimited(false);
Assert.isTrue(firstWorkTicketService.save(workTicket),()-> {
throw new ServiceException("工作票保存失败");
});
}
/** /**
* 工作类型生成工作票类型 * 工作类型生成工作票类型
*/ */

129
hzims-service/ticket/src/main/resources/file/线下工作票审批流程.bpmn20.xml

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
<process id="offlineWorkTicket" name="线下工作票审批流程" isExecutable="true">
<startEvent id="startEvent1"></startEvent>
<userTask id="sid-194BD702-29AE-4DA6-A343-05464D12BB83" name="签发人签发" flowable:candidateGroups="signer">
<extensionElements>
<flowable:taskListener event="create" class="org.springblade.flow.engine.listener.DynamicTaskUserListener"></flowable:taskListener>
</extensionElements>
</userTask>
<sequenceFlow id="sid-EB9D9A51-ACB2-47FA-98CF-042CF7AF19FA" sourceRef="startEvent1" targetRef="sid-194BD702-29AE-4DA6-A343-05464D12BB83"></sequenceFlow>
<exclusiveGateway id="sid-C055B0CF-183B-4BFF-B9CA-D5C420311421"></exclusiveGateway>
<userTask id="sid-2CCB5862-1AB2-4327-9FBE-A11DC613B258" name="运行人员接收" flowable:candidateGroups="operatingCrew">
<extensionElements>
<flowable:taskListener event="create" class="org.springblade.flow.engine.listener.DynamicTaskUserListener"></flowable:taskListener>
</extensionElements>
</userTask>
<exclusiveGateway id="sid-24261C82-08E4-4F0A-B069-5F2BB1E1ECEF"></exclusiveGateway>
<sequenceFlow id="sid-2BD654BF-BFE4-481D-A710-185D10F7C413" sourceRef="sid-2CCB5862-1AB2-4327-9FBE-A11DC613B258" targetRef="sid-24261C82-08E4-4F0A-B069-5F2BB1E1ECEF"></sequenceFlow>
<userTask id="sid-33C2D3CB-1B69-4234-9AE9-3747F37BE8C5" name="许可人许可" flowable:candidateGroups="licensor">
<extensionElements>
<flowable:taskListener event="create" class="org.springblade.flow.engine.listener.DynamicTaskUserListener"></flowable:taskListener>
</extensionElements>
</userTask>
<userTask id="sid-1D70C4B2-A79B-4C02-AA30-9D755484C4B6" name="工作结束">
<extensionElements>
<flowable:taskListener event="create" class="org.springblade.flow.engine.listener.DynamicTaskUserListener"></flowable:taskListener>
</extensionElements>
</userTask>
<sequenceFlow id="sid-9FDA7FDD-A163-4496-B850-77C7A44C3F1F" sourceRef="sid-33C2D3CB-1B69-4234-9AE9-3747F37BE8C5" targetRef="sid-1D70C4B2-A79B-4C02-AA30-9D755484C4B6"></sequenceFlow>
<userTask id="sid-7A6326EA-6129-47EF-88D1-0FC14033B25A" name="工作票终结">
<extensionElements>
<flowable:taskListener event="create" class="org.springblade.flow.engine.listener.DynamicTaskUserListener"></flowable:taskListener>
</extensionElements>
</userTask>
<sequenceFlow id="sid-BE7A2AB4-4D34-43F6-BDDC-C2CB53F964B7" sourceRef="sid-1D70C4B2-A79B-4C02-AA30-9D755484C4B6" targetRef="sid-7A6326EA-6129-47EF-88D1-0FC14033B25A"></sequenceFlow>
<endEvent id="sid-6C4B76B7-BADC-4BE8-B1D2-2AF12FF547EC"></endEvent>
<sequenceFlow id="sid-EF45DC9B-AEAF-4609-8367-E8522F3CCA1C" sourceRef="sid-7A6326EA-6129-47EF-88D1-0FC14033B25A" targetRef="sid-6C4B76B7-BADC-4BE8-B1D2-2AF12FF547EC"></sequenceFlow>
<endEvent id="sid-766AC388-0E41-4887-A1D7-6146841CAACC"></endEvent>
<sequenceFlow id="sid-E08A5631-D8B8-4B09-85F0-4BF865E4C2A8" sourceRef="sid-194BD702-29AE-4DA6-A343-05464D12BB83" targetRef="sid-C055B0CF-183B-4BFF-B9CA-D5C420311421"></sequenceFlow>
<sequenceFlow id="sid-734786FF-1E1B-41E0-BACC-C2D3AF52082A" sourceRef="sid-24261C82-08E4-4F0A-B069-5F2BB1E1ECEF" targetRef="sid-33C2D3CB-1B69-4234-9AE9-3747F37BE8C5">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${recieveFlag==true}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-6B609D97-1BF7-44BC-9B53-898C6D2762EE" name="作废" sourceRef="sid-24261C82-08E4-4F0A-B069-5F2BB1E1ECEF" targetRef="sid-766AC388-0E41-4887-A1D7-6146841CAACC">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${recieveFlag==false}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-44C46EFD-79F0-499E-AF70-9346E510A717" name="作废" sourceRef="sid-C055B0CF-183B-4BFF-B9CA-D5C420311421" targetRef="sid-766AC388-0E41-4887-A1D7-6146841CAACC">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${signFlag==false}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-34DE7872-57AB-43B6-8166-09D1FA2D5ADF" sourceRef="sid-C055B0CF-183B-4BFF-B9CA-D5C420311421" targetRef="sid-2CCB5862-1AB2-4327-9FBE-A11DC613B258">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${signFlag==true}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_offlineWorkTicket">
<bpmndi:BPMNPlane bpmnElement="offlineWorkTicket" id="BPMNPlane_offlineWorkTicket">
<bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
<omgdc:Bounds height="30.0" width="30.0" x="74.99999888241292" y="359.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-194BD702-29AE-4DA6-A343-05464D12BB83" id="BPMNShape_sid-194BD702-29AE-4DA6-A343-05464D12BB83">
<omgdc:Bounds height="80.0" width="100.0" x="149.9999988824129" y="334.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-C055B0CF-183B-4BFF-B9CA-D5C420311421" id="BPMNShape_sid-C055B0CF-183B-4BFF-B9CA-D5C420311421">
<omgdc:Bounds height="40.0" width="40.0" x="294.9999988824129" y="354.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-2CCB5862-1AB2-4327-9FBE-A11DC613B258" id="BPMNShape_sid-2CCB5862-1AB2-4327-9FBE-A11DC613B258">
<omgdc:Bounds height="80.0" width="100.0" x="379.9999988824129" y="334.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-24261C82-08E4-4F0A-B069-5F2BB1E1ECEF" id="BPMNShape_sid-24261C82-08E4-4F0A-B069-5F2BB1E1ECEF">
<omgdc:Bounds height="40.0" width="40.0" x="524.9999988824129" y="354.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-33C2D3CB-1B69-4234-9AE9-3747F37BE8C5" id="BPMNShape_sid-33C2D3CB-1B69-4234-9AE9-3747F37BE8C5">
<omgdc:Bounds height="80.0" width="100.0" x="609.9999988824129" y="334.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-1D70C4B2-A79B-4C02-AA30-9D755484C4B6" id="BPMNShape_sid-1D70C4B2-A79B-4C02-AA30-9D755484C4B6">
<omgdc:Bounds height="80.0" width="100.0" x="754.9999988824129" y="334.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-7A6326EA-6129-47EF-88D1-0FC14033B25A" id="BPMNShape_sid-7A6326EA-6129-47EF-88D1-0FC14033B25A">
<omgdc:Bounds height="80.0" width="100.0" x="899.9999988824129" y="334.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-6C4B76B7-BADC-4BE8-B1D2-2AF12FF547EC" id="BPMNShape_sid-6C4B76B7-BADC-4BE8-B1D2-2AF12FF547EC">
<omgdc:Bounds height="28.0" width="28.0" x="1044.999998882413" y="360.999994635582"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-766AC388-0E41-4887-A1D7-6146841CAACC" id="BPMNShape_sid-766AC388-0E41-4887-A1D7-6146841CAACC">
<omgdc:Bounds height="28.0" width="28.0" x="415.99999268352997" y="284.9999957531691"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-E08A5631-D8B8-4B09-85F0-4BF865E4C2A8" id="BPMNEdge_sid-E08A5631-D8B8-4B09-85F0-4BF865E4C2A8">
<omgdi:waypoint x="249.9499988823975" y="375.2162284018157"></omgdi:waypoint>
<omgdi:waypoint x="295.4130423606618" y="375.41303811384284"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-44C46EFD-79F0-499E-AF70-9346E510A717" id="BPMNEdge_sid-44C46EFD-79F0-499E-AF70-9346E510A717">
<omgdi:waypoint x="315.4999988824129" y="355.499994635582"></omgdi:waypoint>
<omgdi:waypoint x="315.4999988824129" y="298.9999957531691"></omgdi:waypoint>
<omgdi:waypoint x="415.99999268352997" y="298.9999957531691"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-BE7A2AB4-4D34-43F6-BDDC-C2CB53F964B7" id="BPMNEdge_sid-BE7A2AB4-4D34-43F6-BDDC-C2CB53F964B7">
<omgdi:waypoint x="854.9499988824128" y="374.999994635582"></omgdi:waypoint>
<omgdi:waypoint x="899.9999988823936" y="374.999994635582"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-2BD654BF-BFE4-481D-A710-185D10F7C413" id="BPMNEdge_sid-2BD654BF-BFE4-481D-A710-185D10F7C413">
<omgdi:waypoint x="479.9499988824106" y="375.2162284018158"></omgdi:waypoint>
<omgdi:waypoint x="525.4130423606738" y="375.4130381138429"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-6B609D97-1BF7-44BC-9B53-898C6D2762EE" id="BPMNEdge_sid-6B609D97-1BF7-44BC-9B53-898C6D2762EE">
<omgdi:waypoint x="545.4999988824129" y="355.499994635582"></omgdi:waypoint>
<omgdi:waypoint x="545.4999988824129" y="298.9999957531691"></omgdi:waypoint>
<omgdi:waypoint x="443.9499235883342" y="298.9999957531691"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-9FDA7FDD-A163-4496-B850-77C7A44C3F1F" id="BPMNEdge_sid-9FDA7FDD-A163-4496-B850-77C7A44C3F1F">
<omgdi:waypoint x="709.9499988824128" y="374.999994635582"></omgdi:waypoint>
<omgdi:waypoint x="754.9999988823936" y="374.999994635582"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-EF45DC9B-AEAF-4609-8367-E8522F3CCA1C" id="BPMNEdge_sid-EF45DC9B-AEAF-4609-8367-E8522F3CCA1C">
<omgdi:waypoint x="999.9499988823469" y="374.999994635582"></omgdi:waypoint>
<omgdi:waypoint x="1044.999998882413" y="374.999994635582"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-EB9D9A51-ACB2-47FA-98CF-042CF7AF19FA" id="BPMNEdge_sid-EB9D9A51-ACB2-47FA-98CF-042CF7AF19FA">
<omgdi:waypoint x="104.94999737237052" y="374.999994635582"></omgdi:waypoint>
<omgdi:waypoint x="149.9999988824046" y="374.999994635582"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-34DE7872-57AB-43B6-8166-09D1FA2D5ADF" id="BPMNEdge_sid-34DE7872-57AB-43B6-8166-09D1FA2D5ADF">
<omgdi:waypoint x="334.52473595515613" y="375.4166613022487"></omgdi:waypoint>
<omgdi:waypoint x="379.999998882401" y="375.2181169063244"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-734786FF-1E1B-41E0-BACC-C2D3AF52082A" id="BPMNEdge_sid-734786FF-1E1B-41E0-BACC-C2D3AF52082A">
<omgdi:waypoint x="564.5247359551561" y="375.4166613022487"></omgdi:waypoint>
<omgdi:waypoint x="609.9999988824129" y="375.2181169063244"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
Loading…
Cancel
Save