瀏覽代碼

feat: 新增税源地易马企服

lixuesong 1 年之前
父節點
當前提交
e305dcf925

+ 2 - 0
db/v2.0/20231222.sql

@@ -0,0 +1,2 @@
+alter table xinbada_input_record
+    add gig_type varchar(32) default 'ZHENG_QI_ZHI_XING' null comment '零工平台类型';

+ 75 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/GigThirdApiController.java

@@ -18,6 +18,7 @@ import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
 import com.qunzhixinxi.hnqz.admin.entity.XinbadaInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.XinbadaInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.ZhongyiyunInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.ZhongyiyunInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.ZhongzhiInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.ZhongzhiInputRecord;
+import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.mapper.QifuInputRecordMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.QifuInputRecordMapper;
 import com.qunzhixinxi.hnqz.admin.service.HuiqiyunInputRecordService;
 import com.qunzhixinxi.hnqz.admin.service.HuiqiyunInputRecordService;
@@ -459,6 +460,79 @@ public class GigThirdApiController {
 		return gigThirdApiService.lingcaiaiNotify(channel, batchNo, Integer.valueOf(orderStatus));
 		return gigThirdApiService.lingcaiaiNotify(channel, batchNo, Integer.valueOf(orderStatus));
 	}
 	}
 
 
+	/**
+	 * 易马企服异步通知回调
+	 *
+	 * 接口用于接收批量订单创建结果通知和下发结果通知。
+	 * 请注意回调请求头默认的”Content-Type”: “application/octet-stream”
+	 * 企业需要给我方响应。通知超时时间10秒,如果没有收到正确响应视为通知失败,失败后重试3次,每次间隔10分钟。
+	 *
+	 * @param body 请求body
+	 * @param headers 请求头
+	 */
+	@Inner(value = false)
+	@SysLog("易马企服异步通知回调")
+	@PostMapping("/yima")
+	public Map<String, Object> yimaRequest(@RequestBody String body, @RequestHeader HttpHeaders headers) {
+
+		log.info("易马企服请求方法参数:body={}, headers={}", body, headers);
+
+		// 	签名
+		String signature = Objects.requireNonNull(headers.get("signature")).get(0);
+		// 通知类型(order_check_result_notify:订单校验结果通知,order_call_back_notification:订单下发回调通知,task_redispatch_notification:单笔重试回调通知)
+		String actionName = Objects.requireNonNull(headers.get("action_name")).get(0);
+
+		// 请求body json
+		JSONObject bodyJson = JSONUtil.parseObj(body);
+		Integer orderStatus = bodyJson.getInt("order_status");
+		String orderUuid = bodyJson.getStr("order_uuid");
+		String orderNo = bodyJson.getStr("order_no");
+		String customerUserUuid = bodyJson.getStr("customer_user_uuid");
+		String serverUserUuid = bodyJson.getStr("server_user_uuid");
+
+		Map<String, Object> successResult = new HashMap<>();
+		if (!StrUtil.isAllNotBlank(signature, actionName, orderNo) || orderStatus == null) {
+			log.warn("必传参数为空");
+			successResult.put("resp_code", 400);
+			successResult.put("resp_message", "必传参数为空");
+			successResult.put("success", "false");
+			return successResult;
+		}
+
+		String redisKey = String.format("%s_%s_%s", CacheConstants.ZHEGN_QI_ZHI_XING_NOTIFY_KEY, actionName, orderNo);
+		Boolean absent = redisTemplate.opsForValue().setIfAbsent(redisKey, orderNo, 30, TimeUnit.MINUTES);
+		if (!absent) {
+			log.warn("存在在途操作orderNo={}", orderNo);
+			successResult.put("resp_code", 400);
+			successResult.put("resp_message", "存在在途操作");
+			successResult.put("success", "false");
+			return successResult;
+		}
+
+		// 请求记录到数据库
+		XinbadaInputRecord xinbadaInputRecord = new XinbadaInputRecord();
+		xinbadaInputRecord.setActionName(actionName);
+		xinbadaInputRecord.setSignature(signature);
+		xinbadaInputRecord.setReqBody(body);
+		xinbadaInputRecord.setCreateTime(LocalDateTime.now());
+		// body中的部分字段
+		xinbadaInputRecord.setOrderStatus(orderStatus);
+		xinbadaInputRecord.setOrderUuid(orderUuid);
+		xinbadaInputRecord.setOrderNo(orderNo);
+		xinbadaInputRecord.setCustomerUserUuid(customerUserUuid);
+		xinbadaInputRecord.setServerUserUuid(serverUserUuid);
+		xinbadaInputRecord.setGigType(GigTypeEnum.YI_MA);
+		xinbadaInputRecordService.save(xinbadaInputRecord);
+
+		gigThirdApiService.xinbadaNotify(actionName, orderUuid, orderStatus);
+
+		successResult.put("resp_code", 200);
+		successResult.put("resp_message", "SUCCESS");
+		successResult.put("success", "true");
+
+		return successResult;
+	}
+
 	/**
 	/**
 	 * 正启之星异步通知回调
 	 * 正启之星异步通知回调
 	 *
 	 *
@@ -520,6 +594,7 @@ public class GigThirdApiController {
 		xinbadaInputRecord.setOrderNo(orderNo);
 		xinbadaInputRecord.setOrderNo(orderNo);
 		xinbadaInputRecord.setCustomerUserUuid(customerUserUuid);
 		xinbadaInputRecord.setCustomerUserUuid(customerUserUuid);
 		xinbadaInputRecord.setServerUserUuid(serverUserUuid);
 		xinbadaInputRecord.setServerUserUuid(serverUserUuid);
+		xinbadaInputRecord.setGigType(GigTypeEnum.ZHENG_QI_ZHI_XING);
 		xinbadaInputRecordService.save(xinbadaInputRecord);
 		xinbadaInputRecordService.save(xinbadaInputRecord);
 
 
 		gigThirdApiService.xinbadaNotify(actionName, orderUuid, orderStatus);
 		gigThirdApiService.xinbadaNotify(actionName, orderUuid, orderStatus);

+ 2 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaxHelperController.java

@@ -898,6 +898,7 @@ public class WmTaxHelperController {
 	 * @return 回调结果
 	 * @return 回调结果
 	 */
 	 */
 	@Inner(value = false)
 	@Inner(value = false)
+	@SysLog("税邦云结算回调")
 	@PostMapping(value = "/{user_id}/settlementNotify")
 	@PostMapping(value = "/{user_id}/settlementNotify")
 	public String taxHelperSettlementNotify(@PathVariable(value = "user_id") String userId,
 	public String taxHelperSettlementNotify(@PathVariable(value = "user_id") String userId,
 											@RequestBody String body) {
 											@RequestBody String body) {
@@ -953,6 +954,7 @@ public class WmTaxHelperController {
 	 * @return 回调结果
 	 * @return 回调结果
 	 */
 	 */
 	@Inner(value = false)
 	@Inner(value = false)
+	@SysLog("税邦云结算回调v")
 	@PostMapping(value = "/{user_id}/{version}/settlementNotify")
 	@PostMapping(value = "/{user_id}/{version}/settlementNotify")
 	public String taxHelperSettlementNotifyV2(@PathVariable(value = "user_id") String userId,
 	public String taxHelperSettlementNotifyV2(@PathVariable(value = "user_id") String userId,
 											  @PathVariable(value = "version") String version,
 											  @PathVariable(value = "version") String version,

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/XinbadaInputRecord.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 
 
@@ -18,6 +20,7 @@ import java.time.LocalDateTime;
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 @TableName(value = "xinbada_input_record")
 @TableName(value = "xinbada_input_record")
 public class XinbadaInputRecord extends Model<XinbadaInputRecord> {
 public class XinbadaInputRecord extends Model<XinbadaInputRecord> {
+	private static final long serialVersionUID = 449846002723578161L;
 
 
 	/**
 	/**
 	 * 主键id
 	 * 主键id
@@ -80,4 +83,9 @@ public class XinbadaInputRecord extends Model<XinbadaInputRecord> {
 	 */
 	 */
 	private LocalDateTime createTime;
 	private LocalDateTime createTime;
 
 
+	/**
+	 * 零工平台类型
+	 */
+	private GigTypeEnum gigType;
+
 }
 }

+ 3 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigTypeEnum.java

@@ -27,6 +27,7 @@ public enum GigTypeEnum {
 	ZHONG_ZHI(8, "中智", "中智", ZhongZhiCertStatus.class),
 	ZHONG_ZHI(8, "中智", "中智", ZhongZhiCertStatus.class),
 	QI_FU(9, "福建企赋", "福建企赋", ZhongYiYunCertStatus.class),
 	QI_FU(9, "福建企赋", "福建企赋", ZhongYiYunCertStatus.class),
 	SHEN_ZHEN_REN_CAI(10, "深圳人才", "深圳人才", OladingCertStatus.class),
 	SHEN_ZHEN_REN_CAI(10, "深圳人才", "深圳人才", OladingCertStatus.class),
+	YI_MA(11, "易马财税", "易马财税", ZhengQiZhiXingCertStatus.class),
 
 
 	MAH_SETTLE(99, "MAH结算", "MAH结算", null);
 	MAH_SETTLE(99, "MAH结算", "MAH结算", null);
 
 
@@ -72,6 +73,7 @@ public enum GigTypeEnum {
 				certStatusStr = OladingCertStatus.resolve(String.valueOf(certStatus)).name();
 				certStatusStr = OladingCertStatus.resolve(String.valueOf(certStatus)).name();
 				break;
 				break;
 			case ZHENG_QI_ZHI_XING:
 			case ZHENG_QI_ZHI_XING:
+			case YI_MA:
 				certStatusStr = ZhengQiZhiXingCertStatus.resolve(certStatus).name();
 				certStatusStr = ZhengQiZhiXingCertStatus.resolve(certStatus).name();
 				break;
 				break;
 			case LANG_CHAO:
 			case LANG_CHAO:
@@ -119,6 +121,7 @@ public enum GigTypeEnum {
 				certStatusStr = OladingCertStatus.resolve(String.valueOf(certStatus)).getMessage();
 				certStatusStr = OladingCertStatus.resolve(String.valueOf(certStatus)).getMessage();
 				break;
 				break;
 			case ZHENG_QI_ZHI_XING:
 			case ZHENG_QI_ZHI_XING:
+			case YI_MA:
 				certStatusStr = ZhengQiZhiXingCertStatus.resolve(certStatus).getMessage();
 				certStatusStr = ZhengQiZhiXingCertStatus.resolve(certStatus).getMessage();
 				break;
 				break;
 			case LANG_CHAO:
 			case LANG_CHAO:

+ 3 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectLocation.java

@@ -51,6 +51,9 @@ public enum SubjectLocation {
 	QI_FU("QI_FU", GigTypeEnum.QI_FU, "福建企赋", 14, "qifu_invoice"),
 	QI_FU("QI_FU", GigTypeEnum.QI_FU, "福建企赋", 14, "qifu_invoice"),
 	SHEN_ZHEN_REN_CAI("SHEN_ZHEN_REN_CAI", GigTypeEnum.SHEN_ZHEN_REN_CAI, "深圳之光", 14, "shenzhenrencai_invoice"),
 	SHEN_ZHEN_REN_CAI("SHEN_ZHEN_REN_CAI", GigTypeEnum.SHEN_ZHEN_REN_CAI, "深圳之光", 14, "shenzhenrencai_invoice"),
 
 
+	// 正启之星
+	YI_MA("YI_MA",  GigTypeEnum.YI_MA, "易马财税", 16, "yi_ma_invoice"),
+
 
 
 	MAH_SETTLE("MAH_SETTLE", GigTypeEnum.MAH_SETTLE, "MAH结算", 99, "");
 	MAH_SETTLE("MAH_SETTLE", GigTypeEnum.MAH_SETTLE, "MAH结算", 99, "");
 
 

+ 7 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

@@ -130,7 +130,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 								this.yeeHandler(user, dept, subjectResult);
 								this.yeeHandler(user, dept, subjectResult);
 								break;
 								break;
 							case ZHENG_QI_ZHI_XING:
 							case ZHENG_QI_ZHI_XING:
-								this.zhengQiZhiXingHandler(user, dept, subjectResult);
+								this.zhengQiZhiXingHandler(user, dept, subjectResult, GigTypeEnum.ZHENG_QI_ZHI_XING);
 								break;
 								break;
 							case LANG_CHAO:
 							case LANG_CHAO:
 								this.langchaoHandler(user, dept, subjectResult);
 								this.langchaoHandler(user, dept, subjectResult);
@@ -150,6 +150,9 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 							case SHEN_ZHEN_REN_CAI:
 							case SHEN_ZHEN_REN_CAI:
 								this.oladingChannelHandler(user, dept, subjectResult, SubjectLocation.SHEN_ZHEN_REN_CAI);
 								this.oladingChannelHandler(user, dept, subjectResult, SubjectLocation.SHEN_ZHEN_REN_CAI);
 								break;
 								break;
+							case YI_MA:
+								this.zhengQiZhiXingHandler(user, dept, subjectResult, GigTypeEnum.YI_MA);
+								break;
 							default:
 							default:
 						}
 						}
 					});
 					});
@@ -397,7 +400,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 	 * @param subjectResult 结果
 	 * @param subjectResult 结果
 	 * @return
 	 * @return
 	 **/
 	 **/
-	private void zhengQiZhiXingHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
+	private void zhengQiZhiXingHandler(SysUser user, SysDept dept, JSONObject subjectResult, GigTypeEnum gigType) {
 		String code = subjectResult.getStr("code");
 		String code = subjectResult.getStr("code");
 		String certStatus = subjectResult.getStr("certStatus");
 		String certStatus = subjectResult.getStr("certStatus");
 		LocalDateTime now = LocalDateTime.now();
 		LocalDateTime now = LocalDateTime.now();
@@ -408,7 +411,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.IN_PROGRESS)
 				.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.IN_PROGRESS)
-				.eq(SysUserSub::getGigType, GigTypeEnum.ZHENG_QI_ZHI_XING));
+				.eq(SysUserSub::getGigType, gigType));
 		if (CollUtil.isEmpty(userSubList)) {
 		if (CollUtil.isEmpty(userSubList)) {
 			return;
 			return;
 		}
 		}
@@ -419,7 +422,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
 //				.eq(SysUserSub::getSubjectLocation, SubjectLocation.ZHENG_QI_ZHI_XING)
 //				.eq(SysUserSub::getSubjectLocation, SubjectLocation.ZHENG_QI_ZHI_XING)
 				.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.IN_PROGRESS)
 				.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.IN_PROGRESS)
-				.eq(SysUserSub::getGigType, GigTypeEnum.ZHENG_QI_ZHI_XING)
+				.eq(SysUserSub::getGigType, gigType)
 				.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED)
 				.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED)
 				.set(SysUserSub::getUpdateTime, now)
 				.set(SysUserSub::getUpdateTime, now)
 				.set(SysUserSub::getCallbackTime, now)
 				.set(SysUserSub::getCallbackTime, now)

+ 3 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/SysUserSignCertServiceImpl.java

@@ -386,6 +386,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 
 
 				break;
 				break;
 			case ZHENG_QI_ZHI_XING:
 			case ZHENG_QI_ZHI_XING:
+			case YI_MA:
 				// 正启之星
 				// 正启之星
 				if (userSub.getCertStatus() > ZhengQiZhiXingCertStatus.UN_SIGN.getCode()) {
 				if (userSub.getCertStatus() > ZhengQiZhiXingCertStatus.UN_SIGN.getCode()) {
 					return R.ok();
 					return R.ok();
@@ -639,6 +640,8 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					return true;
 					return true;
 				} else if (GigTypeEnum.SHEN_ZHEN_REN_CAI.equals(sysUserSub.getGigType())) {
 				} else if (GigTypeEnum.SHEN_ZHEN_REN_CAI.equals(sysUserSub.getGigType())) {
 					return true;
 					return true;
+				} else if (GigTypeEnum.YI_MA.equals(sysUserSub.getGigType())) {
+					return true;
 				}
 				}
 				return false;
 				return false;
 			}).forEach(userSub -> {
 			}).forEach(userSub -> {