lianghanqiang 4 лет назад
Родитель
Сommit
56e9e37643

+ 3 - 0
src/main/java/org/springblade/common/cache/CacheNames.java

@@ -62,6 +62,9 @@ public interface CacheNames {
 	/** 支付模块  */
 	String PAYMENT = "payment";
 
+	/** 流程模块  */
+	String FLOW = "flow";
+
 	/** 微信模块  */
 	String WECHAT = "wechat";
 

+ 29 - 0
src/main/java/org/springblade/common/cache/FlowCache.java

@@ -0,0 +1,29 @@
+package org.springblade.common.cache;
+
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.flow.shop.entity.InvitationCallbackVO;
+import org.springblade.ldt.shop.entity.Audit;
+
+/**
+ * @author: lianghanqiang
+ * @description:
+ * @since: 9/7/21 -- 10:52 AM
+ */
+public class FlowCache {
+
+	private static final String SHOP_AUDIT_PREFIX = "shop_audit";
+
+	/**
+	 * 	缓存入网申请数据
+	 * */
+	public static void putAudit(InvitationCallbackVO data, String invitationId){
+		CacheUtil.put(CacheNames.FLOW,SHOP_AUDIT_PREFIX,invitationId,data);
+	}
+
+	/**
+	 * 	缓存入网申请数据
+	 * */
+	public static InvitationCallbackVO getAudit(String invitationId){
+		return (InvitationCallbackVO) CacheUtil.get(CacheNames.FLOW,SHOP_AUDIT_PREFIX,invitationId);
+	}
+}

+ 2 - 1
src/main/java/org/springblade/flow/business/service/impl/FlowServiceImpl.java

@@ -58,7 +58,7 @@ public class FlowServiceImpl implements IFlowService {
 	}
 
 	@Override
-	public BladeFlow startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables,String taskUser) {
+	public BladeFlow startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables, String taskUser) {
 		// 设置流程启动用户
 		identityService.setAuthenticatedUserId(taskUser);
 		// 开启流程
@@ -80,6 +80,7 @@ public class FlowServiceImpl implements IFlowService {
 		flow.setProcessInstanceId(processInstance.getId());
 		return flow;
 	}
+
 	@Override
 	public boolean completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables) {
 		// 增加评论

+ 0 - 16
src/main/java/org/springblade/flow/shop/callback/InvitationFailCallback.java

@@ -1,16 +0,0 @@
-package org.springblade.flow.shop.callback;
-
-import org.springblade.flow.shop.entity.InvitationCallbackData;
-
-/**
- * @author: lianghanqiang
- * @description: 商户入驻失败
- * @since: 9/6/21 -- 6:49 PM
- */
-public class InvitationFailCallback {
-
-
-	public static  void handle(InvitationCallbackData invitationCallbackData) {
-
-	}
-}

+ 0 - 16
src/main/java/org/springblade/flow/shop/callback/InvitationSignCallback.java

@@ -1,16 +0,0 @@
-package org.springblade.flow.shop.callback;
-
-import org.springblade.flow.shop.entity.InvitationCallbackData;
-
-/**
- * @author: lianghanqiang
- * @description: 商户入驻待签约
- * @since: 9/6/21 -- 6:49 PM
- */
-public class InvitationSignCallback  {
-
-
-	public static void handle(InvitationCallbackData invitationCallbackData) {
-
-	}
-}

+ 0 - 17
src/main/java/org/springblade/flow/shop/callback/InvitationSuccessCallback.java

@@ -1,17 +0,0 @@
-package org.springblade.flow.shop.callback;
-
-import org.springblade.flow.shop.entity.InvitationCallbackData;
-
-/**
- * @author: lianghanqiang
- * @description: 商户入驻通过
- * @since: 9/6/21 -- 6:49 PM
- */
-public class InvitationSuccessCallback  {
-
-
-
-	public static void handle(InvitationCallbackData invitationCallbackData) {
-
-	}
-}

+ 26 - 0
src/main/java/org/springblade/flow/shop/entity/InvitationCallbackVO.java

@@ -0,0 +1,26 @@
+package org.springblade.flow.shop.entity;
+
+import lombok.Builder;
+import lombok.Data;
+import org.springblade.ldt.shop.entity.Audit;
+import org.springblade.ldt.shop.entity.Shop;
+
+import java.util.Map;
+
+/**
+ * @author: lianghanqiang
+ * @description:
+ * @since: 9/7/21 -- 11:27 AM
+ */
+@Data
+@Builder
+public class InvitationCallbackVO {
+	//实例任务ID
+	String taskId;
+
+	Audit audit;
+
+	Shop shop;
+
+	Map<String, Object> variables;
+}

+ 8 - 0
src/main/java/org/springblade/flow/shop/entity/ShopEnum.java

@@ -17,6 +17,14 @@ public enum ShopEnum {
 	 * 待平台审核
 	 */
 	WAITING_PLATFORM("WAITING_PLATFORM"),
+	/**
+	 * 商户入驻评估
+	 */
+	WAITING_INVITATION("WAITING_INVITATION"),
+	/**
+	 * 待商户签约
+	 */
+	WAITING_SIGN("WAITING_SIGN"),
 	/**
 	 * 审核通过
 	 */

+ 12 - 2
src/main/java/org/springblade/flow/shop/listener/ShopPlatformCompleteListener.java

@@ -1,9 +1,13 @@
 package org.springblade.flow.shop.listener;
 
 import cn.hutool.core.convert.Convert;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.yop.sdk.service.common.response.YopResponse;
 import lombok.NoArgsConstructor;
 import org.flowable.engine.delegate.TaskListener;
 import org.flowable.task.service.delegate.DelegateTask;
+import org.springblade.common.cache.FlowCache;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.utils.SpringUtil;
 import org.springblade.flow.shop.entity.ShopEnum;
@@ -11,8 +15,12 @@ import org.springblade.ldt.shop.entity.Audit;
 import org.springblade.ldt.shop.entity.Shop;
 import org.springblade.ldt.shop.service.IAuditService;
 import org.springblade.ldt.shop.service.IShopService;
+import org.springblade.yeePay.entity.platform.InvitationDto;
+import org.springblade.yeePay.service.YeepayPlatformService;
 import org.springframework.util.Assert;
 
+import java.util.Objects;
+
 /**
  * @author: lianghanqiang
  * @description: 平台审核后处理
@@ -38,8 +46,10 @@ public class ShopPlatformCompleteListener implements TaskListener {
 		Audit audit = auditService.getById(auditId);
 		Shop shop = shopService.getById(shopId);
 
-		shop.setAuditStatus(isPass? ShopEnum.PASS.name():ShopEnum.FAIL.name());
-		audit.setAuditStatus(isPass? ShopEnum.PASS.name():ShopEnum.FAIL.name());
+		//修改审核状态
+		shop.setAuditStatus(isPass? ShopEnum.WAITING_INVITATION.name():ShopEnum.FAIL.name());
+		audit.setAuditStatus(isPass? ShopEnum.WAITING_INVITATION.name():ShopEnum.FAIL.name());
+
 
 		Assert.isTrue(auditService.saveOrUpdate(audit),()->{throw  new ServiceException("商户审核:平台审核完毕异常");});
 		Assert.isTrue(shopService.saveOrUpdate(shop),()->{throw  new ServiceException("商户审核:平台审核完毕异常");});

+ 42 - 31
src/main/java/org/springblade/flow/shop/service/impl/AuditShopService.java

@@ -13,9 +13,10 @@ import org.springblade.flow.core.constant.ProcessConstant;
 import org.springblade.flow.core.entity.BladeFlow;
 import org.springblade.flow.core.utils.FlowUtil;
 import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.shop.callback.InvitationFailCallback;
-import org.springblade.flow.shop.callback.InvitationSignCallback;
-import org.springblade.flow.shop.callback.InvitationSuccessCallback;
+import org.springblade.flow.shop.task.callback.InvitationCallback;
+import org.springblade.flow.shop.task.callback.InvitationFailCallback;
+import org.springblade.flow.shop.task.callback.InvitationSignCallback;
+import org.springblade.flow.shop.task.callback.InvitationSuccessCallback;
 import org.springblade.flow.shop.entity.InvitationCallbackData;
 import org.springblade.flow.shop.entity.ProcessAudit;
 import org.springblade.flow.shop.entity.ShopEnum;
@@ -40,15 +41,14 @@ import java.util.Objects;
 public class AuditShopService implements IAuditShopService {
 
 
-
 	private final IFlowService flowService;
 	private IAuditService auditService;
 	private IShopService shopService;
 
 
 	/**
-	 *  商户入驻提交申请
-	 * */
+	 * 商户入驻提交申请
+	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean startProcess(ProcessAudit processAudit) {
@@ -59,24 +59,24 @@ public class AuditShopService implements IAuditShopService {
 
 			//判断是否由平台审核
 			boolean toPlatform = Objects.isNull(shop.getMallId());
-			audit.setAuditStatus(toPlatform? ShopEnum.WAITING_PLATFORM.name():ShopEnum.WAITING_MALL.name());
+			audit.setAuditStatus(toPlatform ? ShopEnum.WAITING_PLATFORM.name() : ShopEnum.WAITING_MALL.name());
 
 			// 保存活动
 			auditService.save(audit);
 
 			// 启动流程
 			Kv variables = Kv.create()
-				.set("auditId",audit.getId())
-				.set("shopId",audit.getShopId())
-				.set("mallTask",TaskUtil.getTaskUserForApp(Convert.toStr(shop.getMallId()),TaskUtil.APP_MALL))
-				.set("toPlatform",toPlatform)
+				.set("auditId", audit.getId())
+				.set("shopId", audit.getShopId())
+				.set("mallTask", TaskUtil.getTaskUserForApp(Convert.toStr(shop.getMallId()), TaskUtil.APP_MALL))
+				.set("toPlatform", toPlatform)
 				.set("auditor", AuditCandidate.LDT_PLATFORM.name());
 
 			BladeFlow flow = flowService.startProcessInstanceById(
 				audit.getProcessDefinitionId(),
 				FlowUtil.getBusinessKey(businessTable,
-				String.valueOf(audit.getId())), variables,
-				TaskUtil.getTaskUserForApp(Convert.toStr(audit.getShopId()),TaskUtil.APP_SHOP));
+					String.valueOf(audit.getId())), variables,
+				TaskUtil.getTaskUserForApp(Convert.toStr(audit.getShopId()), TaskUtil.APP_SHOP));
 
 			if (Func.isNotEmpty(flow)) {
 				log.debug("流程已启动,流程ID:" + flow.getProcessInstanceId());
@@ -93,31 +93,42 @@ public class AuditShopService implements IAuditShopService {
 	}
 
 	/**
-	 *	商户入驻回调通知处理
-	 * */
+	 * 商户入驻回调通知处理
+	 */
 	@Override
-	public void invitationCallback(String applicationStatus){
+	public void invitationCallback(String applicationStatus) {
 
 		ApplicationStatus type = ApplicationStatus.valueOf(applicationStatus);
-		InvitationCallbackData invitationCallbackData = InvitationCallbackData.builder().build();
-
-		switch (type){
-			case REVIEW_BACK:
-				InvitationFailCallback.handle(invitationCallbackData);
-				break;
-			case COMPLETED:
-				InvitationSuccessCallback.handle(invitationCallbackData);
-				break;
-			case AGREEMENT_SIGNING:
-				InvitationSignCallback.handle(invitationCallbackData);
-				break;
-		}
+		InvitationCallbackData invitationCallbackData = InvitationCallbackData.builder()
+			.build();
+
+		ApplicationStatus
+			.valueOf(invitationCallbackData.getApplicationStatus())
+			.buildHandler()
+			.handle(invitationCallbackData);
+
 	}
 
 	@Getter
 	@AllArgsConstructor
-	enum ApplicationStatus{
-		REVIEW_BACK("申请已驳回"),AGREEMENT_SIGNING("协议待签署"),COMPLETED("申请已完成");
+	enum ApplicationStatus {
+		REVIEW_BACK("申请已驳回"), AGREEMENT_SIGNING("协议待签署"), COMPLETED("申请已完成");
 		String text;
+
+		InvitationCallback buildHandler() {
+			InvitationCallback invitationCallback = null;
+			switch (this) {
+				case REVIEW_BACK:
+					invitationCallback = new InvitationFailCallback();
+					break;
+				case COMPLETED:
+					invitationCallback = new InvitationSuccessCallback();
+					break;
+				case AGREEMENT_SIGNING:
+					invitationCallback = new InvitationSignCallback();
+					break;
+			}
+			return invitationCallback;
+		}
 	}
 }

+ 65 - 0
src/main/java/org/springblade/flow/shop/task/InvitationTask.java

@@ -0,0 +1,65 @@
+package org.springblade.flow.shop.task;
+
+import cn.hutool.core.convert.Convert;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.yop.sdk.service.common.response.YopResponse;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.JavaDelegate;
+import org.springblade.common.cache.FlowCache;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.flow.shop.entity.InvitationCallbackVO;
+import org.springblade.ldt.shop.entity.Audit;
+import org.springblade.ldt.shop.entity.Shop;
+import org.springblade.ldt.shop.service.IAuditService;
+import org.springblade.ldt.shop.service.IShopService;
+import org.springblade.yeePay.entity.platform.InvitationDto;
+import org.springblade.yeePay.service.YeepayPlatformService;
+
+import java.util.Map;
+
+/**
+ * @author: lianghanqiang
+ * @description: 商户入驻申请
+ * @since: 9/7/21 -- 11:10 AM
+ */
+public class InvitationTask implements JavaDelegate {
+
+
+	private IShopService shopService;
+	private IAuditService auditService;
+	private YeepayPlatformService yeepayPlatformService;
+
+
+	{
+		shopService = SpringUtil.getBean(IShopService.class);
+		auditService = SpringUtil.getBean(IAuditService.class);
+		yeepayPlatformService = SpringUtil.getBean(YeepayPlatformService.class);
+	}
+
+	@Override
+	public void execute(DelegateExecution delegateExecution) {
+
+		String taskId = delegateExecution.getId();
+		Long auditId = Convert.toLong(delegateExecution.getVariable("auditId"));
+		Audit audit = auditService.getById(auditId);
+		Shop shop = shopService.getById(audit.getShopId());
+		
+		//流程变量
+		Map<String, Object> variables = delegateExecution.getVariables();
+
+		//向易宝平台提交入驻申请
+		YopResponse yopResponse = yeepayPlatformService.inviteMerchart(InvitationDto.builder().build());
+		String stringResult = yopResponse.getStringResult();
+		JSONObject resObj = JSON.parseObject(stringResult);
+
+		//缓存入驻申请的数据,方便后续回调使用
+		FlowCache.putAudit(InvitationCallbackVO.builder()
+			.taskId(taskId)
+			.audit(audit)
+			.shop(shop)
+			.variables(variables)
+			.build(),
+			resObj.getString("requestNo"));
+	}
+}

+ 13 - 0
src/main/java/org/springblade/flow/shop/task/callback/InvitationCallback.java

@@ -0,0 +1,13 @@
+package org.springblade.flow.shop.task.callback;
+
+import org.springblade.flow.shop.entity.InvitationCallbackData;
+
+/**
+ * @author: lianghanqiang
+ * @description: 入驻回调处理
+ * @since: 9/7/21 -- 12:03 PM
+ */
+public interface InvitationCallback {
+
+	void handle(InvitationCallbackData invitationCallbackData);
+}

+ 61 - 0
src/main/java/org/springblade/flow/shop/task/callback/InvitationFailCallback.java

@@ -0,0 +1,61 @@
+package org.springblade.flow.shop.task.callback;
+
+import org.springblade.common.cache.FlowCache;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.flow.business.service.FlowBusinessService;
+import org.springblade.flow.core.entity.BladeFlow;
+import org.springblade.flow.shop.entity.InvitationCallbackData;
+import org.springblade.flow.shop.entity.InvitationCallbackVO;
+import org.springblade.flow.shop.entity.ShopEnum;
+import org.springblade.ldt.shop.entity.Audit;
+import org.springblade.ldt.shop.entity.Shop;
+import org.springblade.ldt.shop.service.IAuditService;
+import org.springblade.ldt.shop.service.IShopService;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+/**
+ * @author: lianghanqiang
+ * @description: 商户入驻失败
+ * @since: 9/6/21 -- 6:49 PM
+ */
+public class InvitationFailCallback implements InvitationCallback {
+
+	private  FlowBusinessService flowBusinessService;
+	private  IShopService shopService;
+	private  IAuditService auditService;
+
+	 {
+		flowBusinessService = SpringUtil.getBean(FlowBusinessService.class);
+		shopService = SpringUtil.getBean(IShopService.class);
+		auditService = SpringUtil.getBean(IAuditService.class);
+	}
+
+	@Override
+	@Transactional
+	public  void handle(InvitationCallbackData invitationCallbackData) {
+
+		InvitationCallbackVO invitationCallbackVO = FlowCache.getAudit(invitationCallbackData.getRequestNo());
+
+		Shop shop = invitationCallbackVO.getShop();
+		Audit audit = invitationCallbackVO.getAudit();
+		String taskId = invitationCallbackVO.getTaskId();
+
+		//处理流程流传
+		BladeFlow bladeFlow = new BladeFlow();
+		bladeFlow.setTaskId(taskId);
+		bladeFlow.setProcessInstanceId(audit.getProcessInstanceId());
+		bladeFlow.setComment(invitationCallbackData.getAuditOpinion());
+		bladeFlow.setPass(Boolean.FALSE);
+		bladeFlow.setVariables(invitationCallbackVO.getVariables());
+	 	Assert.isTrue(flowBusinessService.completeTask(bladeFlow),()->{ throw new ServiceException(" 商户入驻回调异常: 入驻申请驳回处理异常! "); });
+
+	 	//修改审核状态
+	 	audit.setAuditStatus(ShopEnum.FAIL.name());
+	 	shop.setAuditStatus(ShopEnum.FAIL.name());
+
+		Assert.isTrue(auditService.saveOrUpdate(audit),()->{ throw new ServiceException(" 商户入驻回调异常: 入驻申请驳回处理异常! "); });
+		Assert.isTrue(shopService.saveOrUpdate(shop),()->{ throw new ServiceException(" 商户入驻回调异常: 入驻申请驳回处理异常! "); });
+	}
+}

+ 30 - 0
src/main/java/org/springblade/flow/shop/task/callback/InvitationSignCallback.java

@@ -0,0 +1,30 @@
+package org.springblade.flow.shop.task.callback;
+
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.flow.business.service.FlowBusinessService;
+import org.springblade.flow.shop.entity.InvitationCallbackData;
+import org.springblade.ldt.shop.service.IAuditService;
+import org.springblade.ldt.shop.service.IShopService;
+
+/**
+ * @author: lianghanqiang
+ * @description: 商户入驻待签约
+ * @since: 9/6/21 -- 6:49 PM
+ */
+public class InvitationSignCallback implements InvitationCallback  {
+
+	private FlowBusinessService flowBusinessService;
+	private IShopService shopService;
+	private IAuditService auditService;
+
+	{
+		flowBusinessService = SpringUtil.getBean(FlowBusinessService.class);
+		shopService = SpringUtil.getBean(IShopService.class);
+		auditService = SpringUtil.getBean(IAuditService.class);
+	}
+
+	@Override
+	public void handle(InvitationCallbackData invitationCallbackData) {
+
+	}
+}

+ 31 - 0
src/main/java/org/springblade/flow/shop/task/callback/InvitationSuccessCallback.java

@@ -0,0 +1,31 @@
+package org.springblade.flow.shop.task.callback;
+
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.flow.business.service.FlowBusinessService;
+import org.springblade.flow.shop.entity.InvitationCallbackData;
+import org.springblade.ldt.shop.service.IAuditService;
+import org.springblade.ldt.shop.service.IShopService;
+
+/**
+ * @author: lianghanqiang
+ * @description: 商户入驻通过
+ * @since: 9/6/21 -- 6:49 PM
+ */
+public class InvitationSuccessCallback implements InvitationCallback  {
+
+
+	private FlowBusinessService flowBusinessService;
+	private IShopService shopService;
+	private IAuditService auditService;
+
+	{
+		flowBusinessService = SpringUtil.getBean(FlowBusinessService.class);
+		shopService = SpringUtil.getBean(IShopService.class);
+		auditService = SpringUtil.getBean(IAuditService.class);
+	}
+
+	@Override
+	public void handle(InvitationCallbackData invitationCallbackData) {
+
+	}
+}