From d95b210510c3c7edac7885c549f5836ff0632a4a Mon Sep 17 00:00:00 2001
From: cailu <1712613557@qq.com>
Date: Fri, 13 May 2022 09:01:32 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B9=BF=E5=91=8A=E7=BB=B4=E6=8A=A4crud?=
 =?UTF-8?q?=E5=8F=8A=E6=8F=90=E4=BA=A4=E6=96=B9=E6=B3=95=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 1068-yexiu-read-model-mybatis/pom.xml         |   8 +-
 .../yuexiu/secp/read/model/dao/AdvertDao.java |  13 ++
 .../read/model/dao/readonly/AdvertDaoRO.java  |  11 ++
 .../read/model/entities/AdvertEntity.java     |  57 ++++++++
 .../entities/FlowProcessCallbackEntity.java   |  61 ++++++++
 .../entities/readonly/AdvertEntityRo.java     |  67 +++++++++
 .../com/yuexiu/secp/read/dto/AdvertDto.java   |  40 ++++++
 .../read/controller/AdvertController.java     | 102 ++++++++++++++
 .../read/infra/config/BpmProcessingUtil.java  |  34 +++++
 .../infra/config/WorkflowApprovalStatus.java  |  46 ++++++
 .../read/model/service/IAdvertServer.java     |  52 +++++++
 .../read/model/service/impl/AdvertServer.java | 132 ++++++++++++++++++
 .../secp/read/config/spring.mybatis.cfg.xml   |   6 +-
 13 files changed, 625 insertions(+), 4 deletions(-)
 create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/AdvertDao.java
 create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/readonly/AdvertDaoRO.java
 create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/AdvertEntity.java
 create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/FlowProcessCallbackEntity.java
 create mode 100644 1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/readonly/AdvertEntityRo.java
 create mode 100644 2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/AdvertDto.java
 create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/AdvertController.java
 create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/infra/config/BpmProcessingUtil.java
 create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/infra/config/WorkflowApprovalStatus.java
 create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IAdvertServer.java
 create mode 100644 2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/AdvertServer.java

diff --git a/1068-yexiu-read-model-mybatis/pom.xml b/1068-yexiu-read-model-mybatis/pom.xml
index 55d2af7..a6812c8 100644
--- a/1068-yexiu-read-model-mybatis/pom.xml
+++ b/1068-yexiu-read-model-mybatis/pom.xml
@@ -20,9 +20,13 @@
         </dependency>
         <dependency>
             <groupId>com.sie.irradiator</groupId>
-            <artifactId>2069-siedemo-comm-api</artifactId>
+            <artifactId>2068-yexiu-read-api</artifactId>
+            <version>2.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sie.irradiator</groupId>
+            <artifactId>5002-sieiot-eventual-consistency-component</artifactId>
         </dependency>
-
         <!--<dependency>-->
             <!--<groupId>org.springframework.boot</groupId>-->
             <!--<artifactId>spring-boot-starter-data-mongodb</artifactId>-->
diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/AdvertDao.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/AdvertDao.java
new file mode 100644
index 0000000..9dc359c
--- /dev/null
+++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/AdvertDao.java
@@ -0,0 +1,13 @@
+package com.yuexiu.secp.read.model.dao;
+
+import com.sie.iot.common.model.dao.BaseCommonDAO_HI;
+import com.yuexiu.secp.read.model.entities.AdvertEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * 广告维护Dao
+ */
+@Component("AdvertDao")
+public interface AdvertDao extends BaseCommonDAO_HI<AdvertEntity> {
+
+}
diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/readonly/AdvertDaoRO.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/readonly/AdvertDaoRO.java
new file mode 100644
index 0000000..0160caf
--- /dev/null
+++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/dao/readonly/AdvertDaoRO.java
@@ -0,0 +1,11 @@
+package com.yuexiu.secp.read.model.dao.readonly;
+
+
+import com.siefw.hibernate.core.dao.DynamicViewObjectImpl;
+import com.yuexiu.secp.read.model.entities.readonly.AdvertEntityRo;
+import org.springframework.stereotype.Component;
+
+@Component("advertDaoRO")
+public interface AdvertDaoRO extends DynamicViewObjectImpl<AdvertEntityRo> {
+
+}
diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/AdvertEntity.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/AdvertEntity.java
new file mode 100644
index 0000000..1e6d7dc
--- /dev/null
+++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/AdvertEntity.java
@@ -0,0 +1,57 @@
+package com.yuexiu.secp.read.model.entities;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.sie.iot.common.idgenerate.GeneratedKeyValue;
+import com.sie.iot.common.model.entity.BaseEntity;
+import com.yuexiu.secp.read.model.entities.readonly.AdvertEntityRo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("yxh_advert")
+@GeneratedKeyValue
+@ApiModel(value = "广告维护表")
+public class AdvertEntity    implements Serializable {
+    @TableId(value = "advert_id", type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private Long advertId;
+    @ApiModelProperty(value = "排列方式")
+    private Integer arrangementMode;
+    @ApiModelProperty(value = "投放位置")
+    private Integer putLocation;
+    @ApiModelProperty(value = "显示顺序")
+    private Integer accordingOrder;
+    @ApiModelProperty(value = "开始时间")
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date beginTime;
+    @ApiModelProperty(value = "结束时间")
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+    @ApiModelProperty(value = "广告状态")
+    private Integer advertState;
+    @ApiModelProperty(value = "跳转路径")
+    private String skipUrl;
+    @ApiModelProperty(value = "图片路径")
+    private String pictureUrl;
+    @ApiModelProperty(value = "广告说明")
+    private String advertExplain;
+    @ApiModelProperty(value = "租户id")
+    private Long tenantId;
+    private Long createdBy;
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date creationDate;
+    private Long lastUpdatedBy;
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date lastUpdateDate;
+    private Long lastUpdateLogin;
+    private Integer deleteFlag;
+    private Integer versionNum;
+}
+
diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/FlowProcessCallbackEntity.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/FlowProcessCallbackEntity.java
new file mode 100644
index 0000000..e5cdf8a
--- /dev/null
+++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/FlowProcessCallbackEntity.java
@@ -0,0 +1,61 @@
+package com.yuexiu.secp.read.model.entities;
+
+import lombok.Data;
+
+/**
+ * 流程回调接收实体
+ */
+@Data
+public class FlowProcessCallbackEntity {
+
+    /**
+     * 流程实例id
+     */
+    private String processInstanceId ;
+    /**
+     * 回调时间
+     */
+    private String completeTime;
+    /**
+     * 业务id
+     */
+    private Long id ;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * url
+     */
+    private String url ;
+    /**
+     * 任务id
+     */
+    private String taskId;
+    /**
+     * 状态
+     */
+    private String status ;
+    /**
+     *
+     */
+    private String processDefinitionKey;
+
+    private String procDefKey;
+    /**
+     * 当前节点key
+     */
+    private String taskDefinitionKey;
+    /**
+     * 当前节点名称
+      */
+    private String taskName ;
+    /**
+     * 下一个节点信息
+     */
+    private String nextTasks;
+    /**
+     * 下一个节点信息key
+     */
+    private String nextTaskId;
+}
diff --git a/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/readonly/AdvertEntityRo.java b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/readonly/AdvertEntityRo.java
new file mode 100644
index 0000000..9d9fe87
--- /dev/null
+++ b/1068-yexiu-read-model-mybatis/src/main/java/com/yuexiu/secp/read/model/entities/readonly/AdvertEntityRo.java
@@ -0,0 +1,67 @@
+package com.yuexiu.secp.read.model.entities.readonly;
+
+import cn.hutool.core.date.DateTime;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.sie.iot.common.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "广告")
+public class AdvertEntityRo  implements Serializable {
+
+    public static final String QUERY= "SELECT\n" +
+            "ya.advert_id AS advertId,\n" +
+            "ya.arrangement_mode AS arrangementMode,\n" +
+            "ya.put_location AS putLocation,\n" +
+            "ya.according_order AS accordingOrder,\n" +
+            "ya.begin_time AS beginTime,\n" +
+            "ya.end_time AS endTime,\n" +
+            "ya.advert_state AS advertState,\n" +
+            "ya.skip_url AS skipUrl,\n" +
+            "ya.picture_url AS pictureUrl,\n" +
+            "ya.advert_explain AS advertExplain,\n" +
+            "ya.tenant_id AS tenantId,\n" +
+            "ya.created_by AS createdBy,\n" +
+            "ya.creation_date AS creationDate,\n" +
+            "ya.last_updated_by AS lastUpdatedBy,\n" +
+            "ya.last_update_date AS lastUpdateDate,\n" +
+            "ya.last_update_login AS lastUpdateLogin,\n" +
+            "ya.delete_flag AS deleteFlag,\n" +
+            "ya.version_num AS versionNum\n" +
+            "FROM\n" +
+            "yxh_advert ya\n" +
+            "where 1=1 \n";
+
+    @ApiModelProperty(value = "主键id")
+    private Long advertId;
+    @ApiModelProperty(value = "排列方式")
+    private Integer arrangementMode;
+    @ApiModelProperty(value = "投放位置")
+    private Integer putLocation;
+    @ApiModelProperty(value = "显示顺序")
+    private Integer accordingOrder;
+    @ApiModelProperty(value = "开始时间")
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date beginTime;
+    @ApiModelProperty(value = "结束时间")
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+    @ApiModelProperty(value = "广告状态")
+    private Integer advertState;
+    @ApiModelProperty(value = "跳转路径")
+    private String skipUrl;
+    @ApiModelProperty(value = "图片路径")
+    private String pictureUrl;
+    @ApiModelProperty(value = "广告说明")
+    private String advertExplain;
+    @ApiModelProperty(value = "租户id")
+    private Long tenantId;
+
+
+}
+
diff --git a/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/AdvertDto.java b/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/AdvertDto.java
new file mode 100644
index 0000000..e2cb639
--- /dev/null
+++ b/2068-yexiu-read-api/src/main/java/com/yuexiu/secp/read/dto/AdvertDto.java
@@ -0,0 +1,40 @@
+package com.yuexiu.secp.read.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.sie.iot.common.bean.ReqeustCommonDataBean;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@ApiModel(value = "广告维护Dto")
+public class AdvertDto extends ReqeustCommonDataBean {
+
+    @ApiModelProperty(value = "主键id")
+    private Long advertId;
+    @ApiModelProperty(value = "排列方式")
+    private Integer arrangementMode;
+    @ApiModelProperty(value = "投放位置")
+    private Integer putLocation;
+    @ApiModelProperty(value = "显示顺序")
+    private Integer accordingOrder;
+    @ApiModelProperty(value = "开始时间")
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date beginTime;
+    @ApiModelProperty(value = "结束时间")
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+    @ApiModelProperty(value = "广告状态")
+    private Integer advertState;
+    @ApiModelProperty(value = "跳转路径")
+    private String skipUrl;
+    @ApiModelProperty(value = "图片路径")
+    private String pictureUrl;
+    @ApiModelProperty(value = "广告说明")
+    private String advertExplain;
+    @ApiModelProperty(value = "租户id")
+    private Long tenantId;
+}
diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/AdvertController.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/AdvertController.java
new file mode 100644
index 0000000..f80c718
--- /dev/null
+++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/controller/AdvertController.java
@@ -0,0 +1,102 @@
+package com.yuexiu.secp.read.controller;
+
+import com.alibaba.fastjson.JSONObject;
+
+import com.sie.iot.common.bean.PaginationRequestData;
+import com.sie.iot.common.bean.ResponseData;
+import com.sie.iot.common.iotenum.ResponseMsgCode;
+import com.sie.iot.common.model.inter.IBaseCommon;
+import com.sie.iot.common.services.CommonAbstractService;
+import com.sie.iot.component.exception.GushenRuntimeException;
+import com.siefw.hibernate.core.paging.Pagination;
+import com.yuexiu.secp.read.dto.AdvertDto;
+import com.yuexiu.secp.read.model.entities.AdvertEntity;
+import com.yuexiu.secp.read.model.entities.readonly.AdvertEntityRo;
+import com.yuexiu.secp.read.model.service.IAdvertServer;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Validated
+@Api(value = "测试", tags = "测试-用户")
+@RestController
+@Slf4j
+@RequestMapping("/advert/advertMaintenance")
+public class AdvertController extends CommonAbstractService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AdvertController.class);
+
+     @Autowired
+     private IAdvertServer iAdvertServer;
+
+     @Override
+     public IBaseCommon<?> getBaseCommonServer() {
+        return this.iAdvertServer;
+    }
+
+    @ApiOperation("获取广告维护表分页列表")
+    @PostMapping(value = "/findAdvertInfo")
+    public ResponseData<Pagination<AdvertEntityRo>> findTestUsersPagination(@RequestBody PaginationRequestData<AdvertDto> paginationRequestData) {
+        Integer pageIndex = paginationRequestData.getPageIndex();
+        Integer pageRows = paginationRequestData.getPageRows();
+        AdvertDto advertDto = paginationRequestData.getParams();
+        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(advertDto));
+        try {
+            log.info("分页查询广告列表  参数:query:{}",advertDto);
+            Pagination<AdvertEntityRo> pagination = iAdvertServer.findAdvertPagination(jsonObject, pageIndex, pageRows, paginationRequestData.getOrderByBean());
+            return ResponseData.data(pagination);
+        } catch (Exception e) {
+            LOGGER.error(" find - AdvertInfo error:"+e);
+            throw new GushenRuntimeException(ResponseMsgCode.ERROR.msgCode, e);
+        }
+    }
+
+    @ApiOperation(value = "保存或者更新广告列表")
+    @PostMapping(value = "/saveOrUpdateAdvertInfo")
+    public ResponseData saveOrUpdateAdvertInfo(@RequestBody AdvertEntity advertEntity) {
+        log.info("保存 参数:{}",advertEntity);
+        iAdvertServer.saveOrUpdateAdvertInfo(advertEntity);
+        return ResponseData.success();
+    }
+    @ApiOperation(value = "根据广告表 advertId 查询详细")
+    @PostMapping(value = "/findById")
+    public ResponseData findById(@RequestParam Long advertId){
+        try {
+            log.info("根据 primaryKey 查询广告详细 id:{}", advertId);
+            AdvertEntity entity = iAdvertServer.findById(advertId);
+            return ResponseData.data(entity);
+        }catch (Exception e){
+            throw new GushenRuntimeException(ResponseMsgCode.ERROR.msgCode, e);
+        }
+    }
+    @ApiOperation(value = "根据广告表 advertId 删除")
+    @PostMapping(value = "/delete")
+    public ResponseData deleteById(@RequestParam Long advertId){
+        log.info("根据 id 删除 参数:{}",advertId);
+        AdvertEntity advertEntity = iAdvertServer.findById(advertId);
+        if (advertEntity != null) {
+            advertEntity.setDeleteFlag(1);
+        }
+        iAdvertServer.update(advertEntity);
+        return ResponseData.success();
+    }
+
+//    @ApiOperation(value = "广告申请流程使用")
+//    @PostMapping(value = "/setCommit")
+//    public ResponseData setCommit(@RequestBody AdvertEntity advertEntity,@RequestParam String processDefinitionKey) {
+//        log.info("广告维护申请流程 参数:{}", advertEntity);
+//        iAdvertServer.doCommit(advertEntity,processDefinitionKey);
+//        return ResponseData.success();
+//    }
+//    @ApiOperation(value = "广告流程回调使用")
+//    @PostMapping(value = "/updateAdvertState")
+//    public ResponseData updateAdvertState(@DistrTransMessageParam Long msgId, RedisMessageContentBean redisMessageContentBean) {
+//        log.info("广告维护申请流程回调 参数:{}", redisMessageContentBean);
+//        iAdvertServer.updateAdvertState(msgId,redisMessageContentBean);
+//        return ResponseData.success();
+//    }
+}
diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/infra/config/BpmProcessingUtil.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/infra/config/BpmProcessingUtil.java
new file mode 100644
index 0000000..747421d
--- /dev/null
+++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/infra/config/BpmProcessingUtil.java
@@ -0,0 +1,34 @@
+package com.yuexiu.secp.read.infra.config;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sie.iot.base.bean.RedisMessageContentBean;
+import com.sie.iot.distribute.transation.invoke.RemoteServiceInvoke;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class BpmProcessingUtil {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(BpmProcessingUtil.class);
+
+    @Autowired
+    private RemoteServiceInvoke remoteServiceInvoke;
+
+    private static final String imSynchronizationKafkaTopic = "message.queue.bpm.asynchronous2";
+    //提交流程 加入对应的group  group不存在的时候会自动创建
+    public void asynchronousToBpm(Map<String,Object> params){
+        LOGGER.info("流程提交参数:"+ JSONObject.toJSONString(params));
+        try {
+            RedisMessageContentBean redisMessageContentBean=new RedisMessageContentBean();
+            redisMessageContentBean.setMessageBody(JSONObject.toJSONString(params));
+            redisMessageContentBean.setQueueName(imSynchronizationKafkaTopic);
+            remoteServiceInvoke.sendMessageBody2Redis(redisMessageContentBean);
+        }catch (Exception e){
+            LOGGER.error("流程提交异常,错误信息:"+e.getMessage());
+        }
+    }
+}
diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/infra/config/WorkflowApprovalStatus.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/infra/config/WorkflowApprovalStatus.java
new file mode 100644
index 0000000..0d3fdb2
--- /dev/null
+++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/infra/config/WorkflowApprovalStatus.java
@@ -0,0 +1,46 @@
+package com.yuexiu.secp.read.infra.config;
+
+/**
+ * 审批流程状态
+ */
+public enum WorkflowApprovalStatus {
+    DRAFT("DRAFT", "草稿"),
+    APPROVAL("APPROVAL", "审批中"),
+    ALLOW("ALLOW", "审批通过"),
+    REFUSAL("REFUSAL", "审批驳回"),
+    CLOSED("CLOSED", "已关闭");
+
+    private String index;
+    private String name;
+
+    WorkflowApprovalStatus(String index, String name) {
+        this.index = index;
+        this.name = name;
+    }
+
+    public static WorkflowApprovalStatus convert(String index){
+        WorkflowApprovalStatus[] statuses = WorkflowApprovalStatus.values();
+        for (int i = 0; i < statuses.length; i++) {
+            if (statuses[i].index.equals(index)){
+                return statuses[i];
+            }
+        }
+        return null;
+    }
+
+    public String getIndex() {
+        return index;
+    }
+
+    private void setIndex(String index) {
+        this.index = index;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    private void setName(String name) {
+        this.name = name;
+    }
+}
diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IAdvertServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IAdvertServer.java
new file mode 100644
index 0000000..f08be21
--- /dev/null
+++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/IAdvertServer.java
@@ -0,0 +1,52 @@
+package com.yuexiu.secp.read.model.service;
+
+
+import com.alibaba.fastjson.JSONObject;
+
+
+import com.sie.iot.base.bean.RedisMessageContentBean;
+import com.sie.iot.common.bean.OrderByBean;
+import com.sie.iot.common.model.inter.IBaseCommon;
+
+
+import com.sie.iot.distribute.transation.annotation.DistrTransMessageParam;
+import com.siefw.hibernate.core.paging.Pagination;
+import com.yuexiu.secp.read.model.entities.AdvertEntity;
+import com.yuexiu.secp.read.model.entities.readonly.AdvertEntityRo;
+import com.yuexiu.secp.read.model.service.impl.AdvertServer;
+
+public interface IAdvertServer extends IBaseCommon<AdvertEntity> {
+
+    /**
+     * 分页查询列表
+     * @param jsonObject
+     * @return
+     */
+    Pagination<AdvertEntityRo> findAdvertPagination(JSONObject jsonObject, Integer pageIndex, Integer pageRows, OrderByBean orderByBean);
+    /**
+     * 根据 id 查询详细
+     * @param            	 *
+     * @return
+     */
+    AdvertEntity findById(Long id);
+    /**
+     * 新增或者更新
+     * @param testUsers
+     * @return
+     */
+    AdvertEntity saveOrUpdateAdvertInfo(AdvertEntity testUsers);
+    /**
+     * 提交流程
+     * @param advertEntity
+     * * @param processDefinitionKey
+     * @return
+     */
+    void doCommit(AdvertEntity advertEntity,String processDefinitionKey);
+    /**
+     * 流程回调方法
+     * @param msgId
+     * * @param processDefinitionKey
+     * @return
+     */
+    void updateAdvertState(@DistrTransMessageParam Long msgId, RedisMessageContentBean redisMessageContentBean);
+}
diff --git a/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/AdvertServer.java b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/AdvertServer.java
new file mode 100644
index 0000000..d219918
--- /dev/null
+++ b/2068-yexiu-read-application/src/main/java/com/yuexiu/secp/read/model/service/impl/AdvertServer.java
@@ -0,0 +1,132 @@
+package com.yuexiu.secp.read.model.service.impl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.sie.iot.base.bean.RedisMessageContentBean;
+import com.sie.iot.common.bean.OrderByBean;
+import com.sie.iot.common.model.inter.server.BaseCommonServer;
+import com.sie.iot.common.util.SaafToolUtils;
+
+import com.sie.iot.distribute.transation.annotation.DistrTransMessageConsumer;
+import com.sie.iot.distribute.transation.annotation.DistrTransMessageParam;
+import com.sie.iot.distribute.transation.annotation.DistrTransMessageProvider;
+import com.siefw.hibernate.core.dao.ViewObject;
+import com.siefw.hibernate.core.paging.Pagination;
+import com.yuexiu.secp.read.infra.config.BpmProcessingUtil;
+import com.yuexiu.secp.read.infra.config.WorkflowApprovalStatus;
+import com.yuexiu.secp.read.model.dao.readonly.AdvertDaoRO;
+import com.yuexiu.secp.read.model.entities.AdvertEntity;
+import com.yuexiu.secp.read.model.entities.FlowProcessCallbackEntity;
+import com.yuexiu.secp.read.model.entities.readonly.AdvertEntityRo;
+import com.yuexiu.secp.read.model.service.IAdvertServer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component("advertServer")
+public class AdvertServer extends BaseCommonServer<AdvertEntity> implements IAdvertServer {
+
+    @Autowired
+    private ViewObject<AdvertEntity> advertDao;
+    @Autowired
+    private AdvertDaoRO advertDaoRO;
+    @Autowired
+    private BpmProcessingUtil bpmProcessingUtil;
+
+    /***********流程标识***********/
+    /**
+     * 请假
+     */
+    public final static String QJSQD = "OABUS.QINGJ";
+
+    @Override
+    public Pagination<AdvertEntityRo> findAdvertPagination(JSONObject jsonObject, Integer pageIndex, Integer pageRows, OrderByBean orderByBean) {
+        StringBuffer sql = new StringBuffer(AdvertEntityRo.QUERY);
+        Map<String,Object> map = new HashMap<String,Object>();
+        //拼接查询参数
+        SaafToolUtils.parperHbmParam(AdvertEntityRo.class,jsonObject,sql,map);
+        SaafToolUtils.changeQuerySort(jsonObject, sql, "ya.LAST_UPDATE_DATE desc", false); //排序
+        Pagination<AdvertEntityRo> findListResult = advertDaoRO.findPagination(sql,map,pageIndex,pageRows);
+        return findListResult;
+    }
+    @Override
+    public AdvertEntity findById(Long id) {
+        AdvertEntity advertEntity = advertDao.getById(id);
+        return advertEntity;
+    }
+
+    @Override
+    public AdvertEntity saveOrUpdateAdvertInfo(AdvertEntity advertEntity) {
+        try {
+            //判断更新还是保存
+            if(advertEntity.getAdvertId() != null ){
+                advertDao.update(advertEntity);
+            }else {
+                advertDao.save(advertEntity);
+            }
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+          return  advertEntity;
+    }
+    @Override
+    @DistrTransMessageProvider(desc = "leaveProvider")
+    public void doCommit(AdvertEntity advertEntity,String processDefinitionKey) {
+        //提交之前先进行保存
+        this.saveOrUpdateAdvertInfo(advertEntity);
+
+        //封装流程参数
+        Map<String,Object> map = new HashMap<>();
+        map.put("processDefinitionKey",processDefinitionKey);//必传 流程定义Key 指定启动哪个流程
+        map.put("saveonly",false);//saveonly : 为true提交流程,流程不会走到下一个节点,为false流程会走到下一个节点
+        map.put("businessKey", advertEntity.getAdvertId());//必传 传入业务主键
+        map.put("title","广告维护申请流程:"+ advertEntity.getAdvertId());
+        map.put("orgId", advertEntity.getTenantId());//旧版传 记录租户id
+        map.put("companyId", advertEntity.getTenantId());//必传 记录租户id
+        //map.put("systemType","demo");//非必要
+        map.put("applyPersonId", advertEntity.getCreatedBy());//必传 申请人id
+
+//        //非必传 ,这种是表单参数  流程变量中有用到表单字段需要在此传入
+//        List<Map<String,Object>> variablesList = new ArrayList<>();
+//        Map<String,Object> startUserId = new HashMap<>();
+//        startUserId.put("name","id");
+//        startUserId.put("type","Long");
+//        startUserId.put("value", advertEntity.getAdvertId());
+//        map.put("variables",variablesList);// 非必传 ,流程变量中用到的变量需要在此传入
+
+        if ("草稿".equals(advertEntity.getAdvertState())){
+            //提交流程
+            bpmProcessingUtil.asynchronousToBpm(map);
+        }
+    }
+    /**
+     * 工作流每走一步都会在这里有一条消息  判断不同的状态  更新不同的业务表
+     * @param msgId
+     * @param redisMessageContentBean
+     */
+    @Override
+    @DistrTransMessageConsumer(desc = "updateAdvertState")
+    public void updateAdvertState(@DistrTransMessageParam Long msgId, RedisMessageContentBean redisMessageContentBean) {
+        String payload = redisMessageContentBean.getMessageBody();
+        FlowProcessCallbackEntity callbackEntity = JSONObject.parseObject(payload, FlowProcessCallbackEntity.class);
+        //看下是不是 请假的流程标识
+        if (QJSQD.equals(callbackEntity.getProcDefKey())){
+            AdvertEntity entity = advertDao.getById(callbackEntity.getId());
+            //审批通过
+            if (WorkflowApprovalStatus.ALLOW.getIndex().equals(callbackEntity.getStatus())){
+                entity.setAdvertState(001);
+                //处理其他业务  发邮件 什么的
+                advertDao.update(entity);
+                //驳回
+            } else if (WorkflowApprovalStatus.REFUSAL.getIndex().equals(callbackEntity.getStatus())){
+                entity.setAdvertState(002);
+                advertDao.update(entity);
+                //审批中
+            }else if (WorkflowApprovalStatus.APPROVAL.getIndex().equals(callbackEntity.getStatus())){
+                entity.setAdvertState(003);
+                advertDao.update(entity);
+            }
+        }
+    }
+}
diff --git a/2068-yexiu-read-application/src/main/resources/com/yuexiu/secp/read/config/spring.mybatis.cfg.xml b/2068-yexiu-read-application/src/main/resources/com/yuexiu/secp/read/config/spring.mybatis.cfg.xml
index c897107..cfe1d65 100644
--- a/2068-yexiu-read-application/src/main/resources/com/yuexiu/secp/read/config/spring.mybatis.cfg.xml
+++ b/2068-yexiu-read-application/src/main/resources/com/yuexiu/secp/read/config/spring.mybatis.cfg.xml
@@ -125,7 +125,8 @@
      -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <property name="basePackage"
-                  value="com.yuexiu.secp.read.model.dao"></property>
+                  value="com.yuexiu.secp.read.model.dao,com.sie.iot.base.model.dao"></property>
+
     </bean>
 
     <!-- 配置事务的传播特性 -->
@@ -149,7 +150,8 @@
     <!-- 那些类的哪些方法参与事务 -->
     <aop:config><!--|| execution(* com.sie.saaf.*.model.dao.readonly.*.*(..))-->
         <aop:pointcut id="businessService" expression="execution(* com.yuexiu.secp.read.model.service.impl.*.*(..))
-             || execution(* com.sie.iot.common.model.inter.server.*.*(..))"/>
+             || execution(* com.sie.iot.common.model.inter.server.*.*(..))
+             || execution(* com.sie.iot.base.model.inter.server.*.*(..))"/>
         <aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" order="0"/>
     </aop:config>