home 2 éve
szülő
commit
c549f5b420
15 módosított fájl, 215 hozzáadás és 182 törlés
  1. 44 41
      hx-common/common-tool/src/main/java/com/fjhx/utils/WxAppletUtil.java
  2. 0 32
      hx-common/service-flow/src/main/java/com/fjhx/controller/example/ExampleDetailsController.java
  3. 24 3
      hx-common/service-flow/src/main/java/com/fjhx/feign/FlowClient.java
  4. 1 13
      hx-common/service-flow/src/main/java/com/fjhx/service/example/ExampleDetailsService.java
  5. 1 35
      hx-common/service-flow/src/main/java/com/fjhx/service/example/impl/ExampleDetailsServiceImpl.java
  6. 2 0
      hx-service-api/service-flow-api/src/main/java/com/fjhx/constants/FlowExplainConstant.java
  7. 5 0
      hx-service-api/service-flow-api/src/main/java/com/fjhx/entity/example/ExampleInfo.java
  8. 10 2
      hx-service-api/service-flow-api/src/main/java/com/fjhx/feign/IFlowClient.java
  9. 23 0
      hx-service-api/service-flow-api/src/main/java/com/fjhx/params/GetNodeButtonVo.java
  10. 0 17
      hx-service-api/service-flow-api/src/main/java/com/fjhx/params/example/ExampleDetailsEx.java
  11. 0 17
      hx-service-api/service-flow-api/src/main/java/com/fjhx/params/example/ExampleDetailsVo.java
  12. 1 1
      hx-service-api/service-flow-api/src/main/java/com/fjhx/utils/ExampleAbstract.java
  13. 76 6
      hx-service-api/service-flow-api/src/main/java/com/fjhx/utils/FlowConstructor.java
  14. 26 14
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/common/CommonFileController.java
  15. 2 1
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockDetailServiceImpl.java

+ 44 - 41
hx-common/common-tool/src/main/java/com/fjhx/utils/WxAppletUtil.java

@@ -1,10 +1,12 @@
 package com.fjhx.utils;
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fjhx.constants.WxAppletConstant;
 import lombok.Data;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.redis.cache.BladeRedis;
 import org.springframework.http.MediaType;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.web.client.ResourceAccessException;
@@ -17,7 +19,7 @@ import java.util.HashMap;
 public class WxAppletUtil {
 
     private static final RestTemplate restTemplate = new RestTemplate();
-    //    private static final BladeRedis bladeRedis = SpringUtil.getBean(BladeRedis.class);
+    private static final BladeRedis bladeRedis = SpringUtil.getBean(BladeRedis.class);
     private static final String APPLET_ACCESS_TOKEN_KEY = "wxAppletAccessTokenKey:";
 
     static {
@@ -50,31 +52,33 @@ public class WxAppletUtil {
         String redisKey = APPLET_ACCESS_TOKEN_KEY + url;
 
         // 缓存获取accessToken
-//        String accessToken = bladeRedis.get(redisKey);
-//        if (ObjectUtil.isNotEmpty(accessToken)) {
-//            return accessToken;
-//        }
+        String accessToken = bladeRedis.get(redisKey);
+        if (ObjectUtil.isNotEmpty(accessToken)) {
+            return accessToken;
+        }
 
-        AccessTokenEntity body;
+        AccessTokenResult body;
         try {
-            body = restTemplate.getForEntity(url, AccessTokenEntity.class).getBody();
+            body = restTemplate.getForEntity(url, AccessTokenResult.class).getBody();
         } catch (ResourceAccessException ignored) {
             throw new ServiceException("网络连接失败");
         }
 
+        String errorStr = "微信小程序获取accessToken失败";
         if (body == null) {
-            throw new ServiceException("微信小程序获取accessToken失败");
+            throw new ServiceException(errorStr);
         }
 
-        if (ObjectUtil.isNotEmpty(body.getErrcode())) {
-            throw new ServiceException("微信小程序获取accessToken失败, errorcode= " + body.getErrcode() + " ,errormsg= " + body.getErrmsg());
+        Integer errcode = body.getErrcode();
+        if (errcode != null) {
+            throw new ServiceException(errorStr + ", errorcode= " + errcode + " ,errormsg= " + body.getErrmsg());
         }
 
         String access_token = body.getAccess_token();
         Integer expires_in = body.getExpires_in();
 
         // 赋值缓存
-//        bladeRedis.setEx(redisKey, access_token, new Double(expires_in * 0.8).longValue());
+        bladeRedis.setEx(redisKey, access_token, new Double(expires_in * 0.8).longValue());
 
         return access_token;
     }
@@ -82,39 +86,31 @@ public class WxAppletUtil {
 
     /**
      * 小程序发送消息
-     * TODO 测试中
      */
-    public static void sendMessage(String openId) {
-
-        UniformSendEntity uniformSendEntity = new UniformSendEntity();
-        uniformSendEntity.setTouser(openId);
-        uniformSendEntity.setTemplate_id("Tt0C6SOrtd2QXIdLqrm0CNdarUE4LG_lNJblUnkqTPM");
-        uniformSendEntity.setPage("cloudApi/supplier/list");
-
-        HashMap<Object, Object> data = new HashMap<>();
-        data.put("thing1", "test1");
-        data.put("thing2", "test2");
-        data.put("time3", "test3");
-
-        String dataStr = JSONObject.toJSONString(data);
-        uniformSendEntity.setData(dataStr);
-
+    public static void sendMessage(UniformSendEntity uniformSendEntity) {
         String sendMessageUrl = WxAppletConstant.SEND_MESSAGE_URL + getAccessToken(WxAppletConstant.GET_ACCESS_TOKEN_URL);
-
-        String s = restTemplate.postForObject(sendMessageUrl, uniformSendEntity, String.class);
-        System.out.println(s);
-
-
-    }
-
-
-    public static void main(String[] args) {
-        sendMessage("odMjv5Q66Euc7WdtzJVdm2G8QqOc");
+        restTemplate.postForObject(sendMessageUrl, uniformSendEntity, String.class);
     }
 
+//    public static void main(String[] args) {
+//
+//        UniformSendEntity uniformSendEntity = new UniformSendEntity();
+//        // openId
+//        uniformSendEntity.setTouser("odMjv5Yndizr4ybYaShMt9s9GMVI");
+//        // 赋值模板id
+//        uniformSendEntity.setTemplate_id("Tt0C6SOrtd2QXIdLqrm0CNdarUE4LG_lNJblUnkqTPM");
+//        // 跳转路径
+//        uniformSendEntity.setPage("pages/user/login");
+//        // 模板信息
+//        uniformSendEntity.addData("thing1", "小小的一个测试");
+//        uniformSendEntity.addData("thing2", "测试啥我也不懂");
+//        uniformSendEntity.addData("time3", DateUtil.format(new Date(), "yyyy年MM月dd日 HH:mm"));
+//
+//        sendMessage(uniformSendEntity);
+//    }
 
     @Data
-    public static class AccessTokenEntity implements Serializable {
+    public static class AccessTokenResult implements Serializable {
         private static final long serialVersionUID = 1L;
 
         // 	获取到的凭证
@@ -131,7 +127,7 @@ public class WxAppletUtil {
     public static class UniformSendEntity implements Serializable {
         private static final long serialVersionUID = 1L;
 
-        // 用户openid,可以是小程序的openid,也可以是mp_template_msg.appid对应的公众号的openid
+        // 用户openid,可以是小程序的openid
         private String touser;
         // 小程序模板ID
         private String template_id;
@@ -139,8 +135,15 @@ public class WxAppletUtil {
         private String page;
         // 	跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
         private String miniprogram_state;
-        // 小程序模板数据
-        private String data;
+        // 模板参数
+        private HashMap<String, Object> data = new HashMap<>();
+
+        public void addData(String key, String value) {
+            HashMap<String, String> map = new HashMap<>();
+            map.put("value", value);
+            data.put(key, map);
+        }
+
     }
 
 }

+ 0 - 32
hx-common/service-flow/src/main/java/com/fjhx/controller/example/ExampleDetailsController.java

@@ -1,18 +1,10 @@
 package com.fjhx.controller.example;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.springblade.core.tool.api.R;
-import com.fjhx.entity.example.ExampleDetails;
-import com.fjhx.params.example.ExampleDetailsVo;
 import com.fjhx.service.example.ExampleDetailsService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Map;
-
 /**
  * <p>
  * 实例明细 前端控制器
@@ -28,29 +20,5 @@ public class ExampleDetailsController {
     @Autowired
     private ExampleDetailsService exampleDetailsService;
 
-    @PostMapping("/page")
-    public R page(@RequestBody Map<String, String> condition){
-        Page<ExampleDetails> result = exampleDetailsService.getPage(condition);
-        return R.success(result);
-    }
-
-    @PostMapping("/add")
-    public R add(@RequestBody ExampleDetailsVo exampleDetailsVo){
-        exampleDetailsService.add(exampleDetailsVo);
-        return R.success();
-    }
-
-    @PostMapping("/edit")
-    public R edit(@RequestBody ExampleDetailsVo exampleDetailsVo){
-        exampleDetailsService.edit(exampleDetailsVo);
-        return R.success();
-    }
-
-    @PostMapping("/delete")
-    public R delete(@RequestBody ExampleDetailsVo exampleDetailsVo){
-        exampleDetailsService.delete(exampleDetailsVo);
-        return R.success();
-    }
-
 }
 

+ 24 - 3
hx-common/service-flow/src/main/java/com/fjhx/feign/FlowClient.java

@@ -1,6 +1,7 @@
 package com.fjhx.feign;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fjhx.constants.FlowConstant;
 import com.fjhx.constants.FlowExplainConstant;
@@ -13,6 +14,7 @@ import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ProcessNodeTypeEnum;
 import com.fjhx.params.ExampleInfoEx;
 import com.fjhx.params.FlowInfo;
+import com.fjhx.params.GetNodeButtonVo;
 import com.fjhx.service.example.ExampleDetailsService;
 import com.fjhx.service.example.ExampleInfoService;
 import com.fjhx.service.process.ProcessInfoService;
@@ -75,11 +77,17 @@ public class FlowClient implements IFlowClient {
 
     @PostMapping(GET_NODE_BUTTON)
     @Override
-    public R<ProcessNodeButton> getNodeButton(Long processTenantId, String processNodeCode) {
+    public R<ProcessNodeButton> getNodeButton(GetNodeButtonVo getNodeButtonVo) {
+        Long processTenantId = getNodeButtonVo.getProcessTenantId();
+        String nodeCode = getNodeButtonVo.getNodeCode();
+        Long buttonId = getNodeButtonVo.getButtonId();
+
+
         ProcessNodeButton processNodeButton = processNodeButtonService.getOne(
                 Wrappers.<ProcessNodeButton>lambdaQuery()
                         .eq(ProcessNodeButton::getProcessTenantId, processTenantId)
-                        .eq(ProcessNodeButton::getProcessNodeCode, processNodeCode));
+                        .eq(ObjectUtil.isNotEmpty(nodeCode), ProcessNodeButton::getProcessNodeCode, nodeCode)
+                        .eq(ObjectUtil.isEmpty(nodeCode), ProcessNodeButton::getId, buttonId));
 
         Assert.notEmpty(processNodeButton, FlowExplainConstant.SPECIFY_BRANCH_EMPTY);
         return R.data(processNodeButton);
@@ -88,7 +96,7 @@ public class FlowClient implements IFlowClient {
     @PostMapping(EXAMPLE_INFO_SAVE)
     @Override
     public R<ExampleInfo> exampleInfoSave(ExampleInfoEx exampleInfo) {
-        exampleInfoService.save(exampleInfo);
+        exampleInfoService.saveOrUpdate(exampleInfo);
 
         ExampleDetails exampleDetails = exampleInfo.getExampleDetails();
         exampleDetails.setExampleInfoId(exampleInfo.getId());
@@ -114,4 +122,17 @@ public class FlowClient implements IFlowClient {
         return R.data(BeanUtil.toBean(exampleInfo, ExampleInfo.class));
     }
 
+    @Override
+    public R<ExampleInfo> getExampleInfo(Long businessId) {
+
+        ExampleInfo exampleInfo = exampleInfoService.getOne(
+                Wrappers.<ExampleInfo>lambdaQuery()
+                        .eq(ExampleInfo::getBusinessId, businessId)
+                        .eq(ExampleInfo::getComplete, StatusConstant.No));
+
+        Assert.notEmpty(exampleInfo, FlowExplainConstant.EXAMPLE_INFO_NULL);
+
+        return R.data(exampleInfo);
+    }
+
 }

+ 1 - 13
hx-common/service-flow/src/main/java/com/fjhx/service/example/ExampleDetailsService.java

@@ -1,11 +1,7 @@
 package com.fjhx.service.example;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.entity.example.ExampleDetails;
-import com.fjhx.params.example.ExampleDetailsVo;
 import com.fjhx.base.BaseService;
-
-import java.util.Map;
+import com.fjhx.entity.example.ExampleDetails;
 
 /**
  * <p>
@@ -17,12 +13,4 @@ import java.util.Map;
  */
 public interface ExampleDetailsService extends BaseService<ExampleDetails> {
 
-    Page<ExampleDetails> getPage(Map<String, String> condition);
-
-    void add(ExampleDetailsVo exampleDetailsVo);
-
-    void edit(ExampleDetailsVo exampleDetailsVo);
-
-    void delete(ExampleDetailsVo exampleDetailsVo);
-
 }

+ 1 - 35
hx-common/service-flow/src/main/java/com/fjhx/service/example/impl/ExampleDetailsServiceImpl.java

@@ -1,18 +1,11 @@
 package com.fjhx.service.example.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.utils.WrapperUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.entity.example.ExampleDetails;
-import com.fjhx.params.example.ExampleDetailsVo;
 import com.fjhx.mapper.example.ExampleDetailsMapper;
 import com.fjhx.service.example.ExampleDetailsService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
-import java.util.Map;
-
 /**
  * <p>
  * 实例明细 服务实现类
@@ -24,31 +17,4 @@ import java.util.Map;
 @Service
 public class ExampleDetailsServiceImpl extends ServiceImpl<ExampleDetailsMapper, ExampleDetails> implements ExampleDetailsService {
 
-    @Override
-    public Page<ExampleDetails> getPage(Map<String, String> condition) {
-
-        QueryWrapper<ExampleDetails> wrapper = Wrappers.query();
-
-        WrapperUtil.init(condition, wrapper)
-                .createTimeDesc();
-
-        Page<ExampleDetails> page = page(condition, wrapper);
-        return page;
-    }
-
-    @Override
-    public void add(ExampleDetailsVo exampleDetailsVo) {
-        save(exampleDetailsVo);
-    }
-
-    @Override
-    public void edit(ExampleDetailsVo exampleDetailsVo) {
-        updateById(exampleDetailsVo);
-    }
-
-    @Override
-    public void delete(ExampleDetailsVo exampleDetailsVo) {
-        removeById(exampleDetailsVo.getId());
-    }
-
 }

+ 2 - 0
hx-service-api/service-flow-api/src/main/java/com/fjhx/constants/FlowExplainConstant.java

@@ -53,4 +53,6 @@ public interface FlowExplainConstant {
 
     String SPECIFY_BRANCH_EMPTY = "没有找到指定流转节点";
 
+    String EXAMPLE_INFO_NULL = "流程未发起或已结束";
+
 }

+ 5 - 0
hx-service-api/service-flow-api/src/main/java/com/fjhx/entity/example/ExampleInfo.java

@@ -35,6 +35,11 @@ public class ExampleInfo extends BaseEntity {
     private Long processNodeId;
 
     /**
+     * 所在节点编码
+     */
+    private String processNodeCode;
+
+    /**
      * 是否完成
      */
     private Integer complete;

+ 10 - 2
hx-service-api/service-flow-api/src/main/java/com/fjhx/feign/IFlowClient.java

@@ -5,6 +5,7 @@ import com.fjhx.entity.example.ExampleInfo;
 import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.params.ExampleInfoEx;
 import com.fjhx.params.FlowInfo;
+import com.fjhx.params.GetNodeButtonVo;
 import org.springblade.core.tool.api.R;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -20,6 +21,7 @@ public interface IFlowClient {
     String GET_FLOW_INFO = ClientConstant.API_PREFIX + "/getFlowInfo";
     String GET_NODE_BUTTON = ClientConstant.API_PREFIX + "/getNodeButton";
     String EXAMPLE_INFO_SAVE = ClientConstant.API_PREFIX + "/exampleInfoSave";
+    String GET_EXAMPLE_INFO = ClientConstant.API_PREFIX + "/getExampleInfo";
 
     /**
      * 通过流程编码获取流程信息
@@ -28,10 +30,10 @@ public interface IFlowClient {
     R<FlowInfo> getProcessTenant(@RequestParam("businessId") Long businessId, @RequestParam("code") String code);
 
     /**
-     * 通过业务id和节点编码获取下一节点id
+     * 获取下一节点
      */
     @PostMapping(GET_NODE_BUTTON)
-    R<ProcessNodeButton> getNodeButton(@RequestParam("businessId") Long businessId, @RequestParam("processNodeCode") String processNodeCode);
+    R<ProcessNodeButton> getNodeButton(@RequestBody GetNodeButtonVo getNodeButtonVo);
 
     /**
      * 保存流程实例
@@ -39,4 +41,10 @@ public interface IFlowClient {
     @PostMapping(EXAMPLE_INFO_SAVE)
     R<ExampleInfo> exampleInfoSave(@RequestBody ExampleInfoEx exampleInfo);
 
+    /**
+     * 获取流程实例
+     */
+    @PostMapping(GET_EXAMPLE_INFO)
+    R<ExampleInfo> getExampleInfo(@RequestParam("businessId") Long businessId);
+
 }

+ 23 - 0
hx-service-api/service-flow-api/src/main/java/com/fjhx/params/GetNodeButtonVo.java

@@ -0,0 +1,23 @@
+package com.fjhx.params;
+
+import lombok.Data;
+
+@Data
+public class GetNodeButtonVo {
+
+    /**
+     * 租户id
+     */
+    private Long processTenantId;
+
+    /**
+     * 节点编码
+     */
+    private String nodeCode;
+
+    /**
+     * 节点按钮id
+     */
+    private Long buttonId;
+
+}

+ 0 - 17
hx-service-api/service-flow-api/src/main/java/com/fjhx/params/example/ExampleDetailsEx.java

@@ -1,17 +0,0 @@
-package com.fjhx.params.example;
-
-import com.fjhx.entity.example.ExampleDetails;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 实例明细
- *
- * @author ${author}
- * @since 2022-08-23
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class ExampleDetailsEx extends ExampleDetails {
-
-}

+ 0 - 17
hx-service-api/service-flow-api/src/main/java/com/fjhx/params/example/ExampleDetailsVo.java

@@ -1,17 +0,0 @@
-package com.fjhx.params.example;
-
-import com.fjhx.entity.example.ExampleDetails;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 实例明细
- *
- * @author ${author}
- * @since 2022-08-23
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class ExampleDetailsVo extends ExampleDetails {
-
-}

+ 1 - 1
hx-service-api/service-flow-api/src/main/java/com/fjhx/utils/ExampleAbstract.java

@@ -51,7 +51,7 @@ public abstract class ExampleAbstract {
      * @return 指定流转分支编码
      */
     public String circulation(String code) {
-        return code;
+        return null;
     }
 
 

+ 76 - 6
hx-service-api/service-flow-api/src/main/java/com/fjhx/utils/FlowConstructor.java

@@ -1,5 +1,6 @@
 package com.fjhx.utils;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
@@ -14,6 +15,7 @@ import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.feign.IFlowClient;
 import com.fjhx.params.ExampleInfoEx;
 import com.fjhx.params.FlowInfo;
+import com.fjhx.params.GetNodeButtonVo;
 import org.springblade.core.tool.api.R;
 
 public class FlowConstructor {
@@ -66,9 +68,9 @@ public class FlowConstructor {
         if (ObjectUtil.isEmpty(processTenant)) {
             exampleInfo.setProcessNodeId(FlowConstant.OVER_PROCESS_FLAG);
             exampleInfo.setComplete(StatusConstant.YES);
+            exampleInfo.setProcessNodeCode(FlowConstant.END_CODE);
 
             startExampleDetails.setNameType(ButtonNameEnum.START.getType());
-
             // 执行流程结束方法
             exampleAbstract.end();
         }
@@ -81,8 +83,13 @@ public class FlowConstructor {
 
             // 调用方法查看是否有指定跳转节点,没有则正常流转
             String circulation = exampleAbstract.circulation(FlowConstant.START_CODE);
-            R<ProcessNodeButton> nodeButtonResult = flowClient.getNodeButton(processTenantId, circulation);
-            Assert.eqTrue(r.isSuccess(), r.getMsg());
+
+            GetNodeButtonVo getNodeButtonVo = new GetNodeButtonVo();
+            getNodeButtonVo.setProcessTenantId(processTenantId);
+            getNodeButtonVo.setNodeCode(ObjectUtil.isEmpty(circulation) ? FlowConstant.START_CODE : circulation);
+
+            R<ProcessNodeButton> nodeButtonResult = flowClient.getNodeButton(getNodeButtonVo);
+            Assert.eqTrue(nodeButtonResult.isSuccess(), nodeButtonResult.getMsg());
 
             ProcessNodeButton processNodeButton = nodeButtonResult.getData();
             startExampleDetails.setProcessNodeId(processNodeButton.getProcessNodeId());
@@ -95,6 +102,7 @@ public class FlowConstructor {
             // 流程结束
             if (jumpNodeId.equals(FlowConstant.OVER_PROCESS_FLAG)) {
                 exampleInfo.setComplete(StatusConstant.YES);
+                exampleInfo.setProcessNodeCode(FlowConstant.END_CODE);
                 exampleAbstract.end();
             }
             // 正常流转到下一节点
@@ -104,15 +112,77 @@ public class FlowConstructor {
 
             // 赋值跳转节点id
             exampleInfo.setProcessNodeId(jumpNodeId);
+            exampleInfo.setProcessNodeCode(processNodeButton.getProcessNodeCode());
         }
         exampleInfo.setExampleDetails(startExampleDetails);
 
         // 保存流程实例
-        R<ExampleInfo> exampleInfoResult = flowClient.exampleInfoSave(exampleInfo);
-        Assert.eqTrue(r.isSuccess(), r.getMsg());
+        R<ExampleInfo> exampleInfoSaveResult = flowClient.exampleInfoSave(exampleInfo);
+        Assert.eqTrue(exampleInfoSaveResult.isSuccess(), exampleInfoSaveResult.getMsg());
 
-        return exampleInfoResult.getData();
+        return exampleInfoSaveResult.getData();
     }
 
+    /**
+     * 流程跳转
+     *
+     * @param businessId 业务id
+     * @param buttonId   按钮id
+     * @param remarks    审批意见
+     */
+    public void jump(Long businessId, Long buttonId, String remarks) {
+
+        R<ExampleInfo> exampleInfoResult = flowClient.getExampleInfo(businessId);
+        Assert.eqTrue(exampleInfoResult.isSuccess(), exampleInfoResult.getMsg());
+
+        ExampleInfo exampleInfo = exampleInfoResult.getData();
+
+        // 调用方法查看是否有指定跳转节点,没有则正常流转
+        GetNodeButtonVo getNodeButtonVo = new GetNodeButtonVo();
+        getNodeButtonVo.setProcessTenantId(exampleInfo.getProcessTenantId());
+        getNodeButtonVo.setNodeCode(exampleAbstract.circulation(exampleInfo.getProcessNodeCode()));
+        getNodeButtonVo.setButtonId(buttonId);
+
+        R<ProcessNodeButton> nodeButtonResult = flowClient.getNodeButton(getNodeButtonVo);
+        Assert.eqTrue(nodeButtonResult.isSuccess(), nodeButtonResult.getMsg());
+
+        ProcessNodeButton processNodeButton = nodeButtonResult.getData();
+
+        // 赋值跳转节点id
+        exampleInfo.setProcessNodeId(processNodeButton.getJumpNodeId());
+        exampleInfo.setProcessNodeCode(processNodeButton.getProcessNodeCode());
+
+
+        // 流程正常结束
+        if (processNodeButton.getJumpNodeId().equals(FlowConstant.OVER_PROCESS_FLAG)) {
+            exampleInfo.setComplete(StatusConstant.YES);
+            exampleInfo.setProcessNodeCode(FlowConstant.END_CODE);
+            exampleAbstract.end();
+        }
+        // 驳回结束
+        else if (ButtonNameEnum.REJECT.getType().equals(processNodeButton.getNameType())) {
+            exampleInfo.setComplete(StatusConstant.YES);
+            exampleInfo.setProcessNodeCode(FlowConstant.END_CODE);
+            exampleAbstract.fail(processNodeButton.getProcessNodeCode());
+        }
+        // 正常流转到下一节点
+        else {
+            exampleInfo.setComplete(StatusConstant.No);
+        }
+
+        ExampleDetails startExampleDetails = new ExampleDetails();
+        startExampleDetails.setRemarks(remarks);
+        startExampleDetails.setProcessNodeId(processNodeButton.getProcessNodeId());
+        startExampleDetails.setProcessNodeButtonId(processNodeButton.getId());
+        startExampleDetails.setNameType(processNodeButton.getNameType());
+
+        ExampleInfoEx exampleInfoEx = BeanUtil.toBean(exampleInfo, ExampleInfoEx.class);
+        exampleInfoEx.setExampleDetails(startExampleDetails);
+
+        // 保存流程实例
+        R<ExampleInfo> exampleInfoSaveResult = flowClient.exampleInfoSave(exampleInfoEx);
+        Assert.eqTrue(exampleInfoSaveResult.isSuccess(), exampleInfoSaveResult.getMsg());
+
+    }
 
 }

+ 26 - 14
hx-service/storage-restructure/src/main/java/com/fjhx/controller/common/CommonFileController.java

@@ -43,24 +43,25 @@ public class CommonFileController {
         return R.success(list);
     }
 
-    @GetMapping("test")
-    public R test() {
 
-        ExampleAbstract exampleAbstract = new ExampleAbstract() {
+    private final ExampleAbstract exampleAbstract = new ExampleAbstract() {
+        @Override
+        public String getCode() {
+            return "test";
+        }
+
+        @Override
+        public void end() {
+            ExampleInfo cacheData = getCacheData(ExampleInfo.class);
+            System.err.println("缓存     " + cacheData);
+            System.err.println("流程结束了");
+        }
+    };
 
-            @Override
-            public String getCode() {
-                return "test";
-            }
 
-            @Override
-            public void end() {
-                ExampleInfo cacheData = getCacheData(ExampleInfo.class);
-                System.err.println("缓存     " + cacheData);
-                System.err.println("流程结束了");
-            }
+    @GetMapping("test")
+    public R test() {
 
-        };
 
         HashMap<String, String> map = new HashMap<>();
         map.put("processInfoId", "1111111111111111111111");
@@ -72,5 +73,16 @@ public class CommonFileController {
         return R.success();
     }
 
+
+    @GetMapping("jump")
+    public R jump() {
+        FlowConstructor.init(exampleAbstract).jump(123456L, 1560105451033104390L, "测试流程运行");
+
+        return R.success();
+    }
+
+
+//    jumpNodeId
+
 }
 

+ 2 - 1
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockDetailServiceImpl.java

@@ -68,7 +68,8 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
         String jobNo = condition.get("jobNo");
 
         Date date = new Date();
-        if (Integer.parseInt(DateUtil.format(date, "H")) >= 7 && Integer.parseInt(DateUtil.format(date, "m")) >= 30) {
+        if (Integer.parseInt(DateUtil.format(date, "H")) > 7 ||
+                (Integer.parseInt(DateUtil.format(date, "H")) == 7 && Integer.parseInt(DateUtil.format(date, "m")) >= 30)) {
             date = DateUtil.beginOfDay(date);
         } else {
             date = DateUtil.beginOfDay(DateUtil.yesterday());