Explorar o código

feat: 薪事易结算回调业务

lixuesong hai 1 ano
pai
achega
4367ace92e

+ 11 - 0
db/v2.0/20240402.sql

@@ -0,0 +1,11 @@
+create table xinshiyi_input_record
+(
+    id           int auto_increment comment '主键id'
+        primary key,
+    req_id       varchar(64)                        null comment '请求序号',
+    batch_id     varchar(64)                        null comment '批次号',
+    order_status int                                null comment '订单状态',
+    req_body     text                               null comment '请求body',
+    create_time  datetime default CURRENT_TIMESTAMP null comment '创建时间'
+)
+    comment '薪事易回调异步通知记录';

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

@@ -1,9 +1,11 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
@@ -16,6 +18,7 @@ import com.qunzhixinxi.hnqz.admin.entity.OladingInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.QifuInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
 import com.qunzhixinxi.hnqz.admin.entity.XinbadaInputRecord;
+import com.qunzhixinxi.hnqz.admin.entity.XinshiyiInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.ZhongyiyunInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.ZhongzhiInputRecord;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
@@ -33,6 +36,7 @@ import com.qunzhixinxi.hnqz.admin.util.SaasApiDemoV2;
 import com.qunzhixinxi.hnqz.admin.util.ZhongyiyunUtils;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
+import generator.mapper.XinshiyiInputRecordMapper;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -80,6 +84,8 @@ public class GigThirdApiController {
 
 	private final QifuInputRecordMapper qifuInputRecordMapper;
 
+	private final XinshiyiInputRecordMapper xinshiyiInputRecordMapper;
+
 	private final SysDeptSubService sysDeptSubService;
 
 	private final RedisTemplate redisTemplate;
@@ -102,6 +108,7 @@ public class GigThirdApiController {
 
 		// 批次号
 		String batchId = bodyJson.getStr("batchId");
+		JSONArray orderDetailList = bodyJson.getJSONArray("orderDetailList");
 
 		String redisKey = String.format("%s_%s", CacheConstants.QI_FU_SETTLE_NOTIFY_KEY, batchId);
 		Boolean absent = redisTemplate.opsForValue().setIfAbsent(redisKey, batchId, 30, TimeUnit.MINUTES);
@@ -110,6 +117,20 @@ public class GigThirdApiController {
 			return "fail";
 		}
 
+		// 请求保存到数据库
+		XinshiyiInputRecord inputRecord = new XinshiyiInputRecord();
+		inputRecord.setBatchId(batchId);
+		inputRecord.setReqBody(body);
+		if (CollUtil.isNotEmpty(orderDetailList)) {
+			JSONObject orderDetail = (JSONObject) orderDetailList.get(0);
+			inputRecord.setOrderStatus(orderDetail.getInt("orderStatus"));
+			inputRecord.setReqId(orderDetail.getStr("partnerOrderId"));
+		}
+		xinshiyiInputRecordMapper.insert(inputRecord);
+
+		// 业务处理
+
+
 		return "ok";
 	}
 

+ 49 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/XinshiyiInputRecord.java

@@ -0,0 +1,49 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 薪事易回调异步通知记录
+ * @TableName xinshiyi_input_record
+ */
+@TableName(value ="xinshiyi_input_record")
+@Data
+public class XinshiyiInputRecord implements Serializable {
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 请求序号
+     */
+    private String reqId;
+
+    /**
+     * 批次号
+     */
+    private String batchId;
+
+    /**
+     * 订单状态
+     */
+    private Integer orderStatus;
+
+    /**
+     * 请求body
+     */
+    private String reqBody;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+}

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/GigThirdApiService.java

@@ -14,6 +14,14 @@ import java.util.List;
  */
 public interface GigThirdApiService {
 
+	/**
+	 * 薪事易结算通知业务处理
+	 *
+	 * @param bodyJson 正文 JSON
+	 * @return boolean 结果
+	 */
+	boolean xinshiyiSettleNotify(JSONObject bodyJson);
+
 	/**
 	 * 福建企赋结算回调业务处理
 	 *

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

@@ -89,6 +89,80 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 	private final HuiqiyunInputRecordService huiqiyunInputRecordService;
 
+	/**
+	 * 薪事易结算通知业务处理
+	 *
+	 * @param bodyJson 正文 JSON
+	 * @return boolean 结果
+	 */
+	@Override
+	public boolean xinshiyiSettleNotify(JSONObject bodyJson) {
+		JSONArray orderDetailList = bodyJson.getJSONArray("orderDetailList");
+		if (CollUtil.isEmpty(orderDetailList)) {
+			log.warn("薪事易结算通知异常: orderDetailList为空");
+			return false;
+		}
+
+		JSONObject orderDetail = (JSONObject) orderDetailList.get(0);
+		// 订单状态: 0,待发放;1,发放中(请求支付)2,发放成功;3,发放失败;4,发放异常;5撤销
+		Integer orderStatus = orderDetail.getInt("orderStatus");
+		String partnerOrderId = orderDetail.getStr("partnerOrderId");
+		if (orderStatus == null) {
+			log.warn("薪事易结算通知异常: orderStatus为空");
+			return false;
+		}
+
+		// 根据orderNo查询结算单
+		List<WmScorePackageSettleNote> settleNoteList = scorePackageSettleNoteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+				.eq(WmScorePackageSettleNote::getStreamId, partnerOrderId));
+		if (CollUtil.isEmpty(settleNoteList)) {
+			log.warn("订单partnerOrderId={}对应结算单不存在", partnerOrderId);
+			return false;
+		}
+
+		WmScorePackageSettleNote tmp = settleNoteList.get(0);
+
+		int yaoyiStatus = 0;
+		if (orderStatus.equals(2)) {
+			// 对应要易结算成功状态
+			yaoyiStatus = 1;
+		} else {
+			yaoyiStatus = 2;
+		}
+
+		// 修改结算状态
+		final int finalYaoyiStatus = yaoyiStatus;
+		List<WmScorePackageSettleNote> updateList = settleNoteList.stream().map(note -> {
+			WmScorePackageSettleNote updateEntity = new WmScorePackageSettleNote();
+			updateEntity.setId(note.getId());
+			updateEntity.setSettleNoteStatus(finalYaoyiStatus);
+			if (finalYaoyiStatus == 1){
+				updateEntity.setNotifyTime(LocalDateTime.now());
+			}
+			updateEntity.setUpdateTime(LocalDateTime.now());
+			return updateEntity;
+		}).collect(Collectors.toList());
+
+		scorePackageSettleNoteService.updateBatchById(updateList);
+
+		WmScorePackage scorePackage = scorePackageService.getById(tmp.getPackageId());
+
+		// 遥领不修改
+		if (!"1611890566".equals(scorePackage.getSendPackageDeptId())) {
+			// 更新积分包状态
+			log.info("更新积分包状态:{}", tmp);
+			WmScorePackage wmScorePackage = new WmScorePackage();
+			wmScorePackage.setId(tmp.getPackageId());
+			wmScorePackage.setSettleStatus(yaoyiStatus);
+			wmScorePackage.setUpdateTime(LocalDateTime.now());
+			scorePackageService.updateById(wmScorePackage);
+		}
+
+		redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + tmp.getId());
+
+		return true;
+	}
+
 	/**
 	 * 福建企赋结算回调业务处理
 	 *

+ 20 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/generator/mapper/XinshiyiInputRecordMapper.java

@@ -0,0 +1,20 @@
+package generator.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.entity.XinshiyiInputRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author li312
+* @description 针对表【xinshiyi_input_record(薪事易回调异步通知记录)】的数据库操作Mapper
+* @createDate 2024-04-02 12:28:37
+* @Entity com.qunzhixinxi.hnqz.admin.entity.XinshiyiInputRecord
+*/
+@Mapper
+public interface XinshiyiInputRecordMapper extends BaseMapper<XinshiyiInputRecord> {
+
+}
+
+
+
+