|
|
@@ -13,6 +13,8 @@ import com.malk.huagao.service.IKdYdOrderService;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
+import com.malk.server.aliwork.YDSearch;
|
|
|
+import com.malk.server.common.McR;
|
|
|
import com.malk.server.dingtalk.DDR_New;
|
|
|
import com.malk.service.aliwork.YDClient;
|
|
|
import com.malk.utils.UtilMap;
|
|
|
@@ -24,12 +26,11 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.time.Instant;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
@@ -240,6 +241,192 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void SckdYdOrder(Map map) {
|
|
|
+ MDC.put("MDC_KEY_PID", "1003");
|
|
|
+
|
|
|
+ try {
|
|
|
+ String formInstId = UtilMap.getString(map, "formInstId");
|
|
|
+ String khbm = UtilMap.getString(map, "khbm");
|
|
|
+
|
|
|
+ // 1. 查询订单详情
|
|
|
+ DDR_New ddrNew = ydClient.queryData(YDParam.builder()
|
|
|
+ .formInstId(formInstId)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_id);
|
|
|
+
|
|
|
+ if (ddrNew == null || ddrNew.getFormData() == null) {
|
|
|
+ throw new RuntimeException("未找到订单信息");
|
|
|
+ }
|
|
|
+
|
|
|
+ Map formData1 = ddrNew.getFormData();
|
|
|
+ String ddje = UtilMap.getString(formData1, "numberField_mewfgzkv");
|
|
|
+ String dddateTimestamp = UtilMap.getString(formData1, "dateField_mejowmnb");
|
|
|
+
|
|
|
+ // 参数校验
|
|
|
+ if (ddje == null || ddje.trim().isEmpty()) {
|
|
|
+ throw new RuntimeException("订单金额不能为空");
|
|
|
+ }
|
|
|
+ if (dddateTimestamp == null || dddateTimestamp.trim().isEmpty()) {
|
|
|
+ throw new RuntimeException("订单日期不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println("获取到的时间戳:" + dddateTimestamp);
|
|
|
+
|
|
|
+ // 2. 计算订单金额(保留两位小数)
|
|
|
+ Double orderAmount = null;
|
|
|
+ try {
|
|
|
+ orderAmount = Double.parseDouble(ddje);
|
|
|
+ // 保留两位小数
|
|
|
+ orderAmount = Math.round(orderAmount * 100.0) / 100.0;
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ throw new RuntimeException("订单金额格式错误: " + ddje);
|
|
|
+ }
|
|
|
+
|
|
|
+ String ghcDateTimestamp = null;
|
|
|
+
|
|
|
+ // 3. 查询客户历史信息
|
|
|
+ List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
+ .formUuid("FORM-F79B680547674A6BBD11C0D511E3C14B28FY")
|
|
|
+ .searchFieldJson(JSONObject.toJSONString(Arrays.asList(
|
|
|
+ new YDSearch("textField_mjm9k35n",
|
|
|
+ khbm,
|
|
|
+ "客户编号",
|
|
|
+ YDSearch.Type.TEXT_FIELD,
|
|
|
+ YDSearch.Operator.EQ)
|
|
|
+ )))
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
|
|
|
+
|
|
|
+ // 5. 计算累计金额和释放日期
|
|
|
+ Double historicalAmount = 0.0;
|
|
|
+ if (list.size() > 0) {
|
|
|
+ historicalAmount = UtilMap.getDouble(list.get(0), "numberField_mjm9k35k");
|
|
|
+ if (historicalAmount == null) {
|
|
|
+ historicalAmount = 0.0;
|
|
|
+ } else {
|
|
|
+ // 历史金额也保留两位小数
|
|
|
+ historicalAmount = Math.round(historicalAmount * 100.0) / 100.0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算总金额 = 当前订单金额 + 历史累计金额(保留两位小数)
|
|
|
+ Double totalAmount = orderAmount + historicalAmount;
|
|
|
+ totalAmount = Math.round(totalAmount * 100.0) / 100.0;
|
|
|
+
|
|
|
+ System.out.println("金额计算:订单金额=" + orderAmount +
|
|
|
+ ", 历史金额=" + historicalAmount +
|
|
|
+ ", 总金额=" + totalAmount);
|
|
|
+
|
|
|
+ // 6. 根据总金额计算释放公海池日期
|
|
|
+ long baseTimestamp = Long.parseLong(dddateTimestamp.trim());
|
|
|
+ // 7. 更新客户信息
|
|
|
+ Map<String, Object> formData = new HashMap<>();
|
|
|
+ if (totalAmount == null || totalAmount <= 0) {
|
|
|
+ // 情况4:无订单/金额为空或0 → +90天
|
|
|
+ ghcDateTimestamp = String.valueOf(calculateTimestamp(baseTimestamp, 90));
|
|
|
+ formData.put("selectField_l3nrjuq0", "未成交");
|
|
|
+ System.out.println("情况4:无金额,释放日期=" + ghcDateTimestamp);
|
|
|
+ } else if (totalAmount < 75000) {
|
|
|
+ // 情况1:金额 < 7.5万 → +180天
|
|
|
+ ghcDateTimestamp = String.valueOf(calculateTimestamp(baseTimestamp, 180));
|
|
|
+ formData.put("selectField_l3nrjuq0", "半年金额不足");
|
|
|
+ System.out.println("情况1:金额<7.5万,释放日期=" + ghcDateTimestamp);
|
|
|
+ } else if (totalAmount < 150000) {
|
|
|
+ // 情况2:7.5万 ≤ 金额 < 15万 → +360天
|
|
|
+ ghcDateTimestamp = String.valueOf(calculateTimestamp(baseTimestamp, 360));
|
|
|
+ formData.put("selectField_l3nrjuq0", "一年金额不足");
|
|
|
+ System.out.println("情况2:金额7.5-15万,释放日期=" + ghcDateTimestamp);
|
|
|
+ } else {
|
|
|
+ // 情况3:金额 ≥ 15万 → 空值(不释放)
|
|
|
+ ghcDateTimestamp = null;
|
|
|
+ System.out.println("情况3:金额≥15万,不释放公海池");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 重要:直接保存时间戳格式,不是格式化后的日期
|
|
|
+ formData.put("dateField_mjm9k35j", dddateTimestamp); // 最后成交日期(时间戳格式)
|
|
|
+
|
|
|
+ if (ghcDateTimestamp != null) {
|
|
|
+ formData.put("dateField_mjm9k35l", ghcDateTimestamp); // 释放公海日期(时间戳格式)
|
|
|
+ } else {
|
|
|
+ formData.put("dateField_mjm9k35l", ""); // 明确设置为空
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新累计金额(保留两位小数)
|
|
|
+ formData.put("numberField_mjm9k35k", totalAmount);
|
|
|
+
|
|
|
+ System.out.println("更新客户数据:" + formData);
|
|
|
+
|
|
|
+ // 执行更新操作
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .formUuid("FORM-F79B680547674A6BBD11C0D511E3C14B28FY")
|
|
|
+ .appType("APP_VQDMMWS6OR1VHL8VMFD3")
|
|
|
+ .systemToken("XE766X81JHKXK4Z27SYOI86CPCLQ3J1LV7ODMH2")
|
|
|
+ .noExecuteExpression(false)
|
|
|
+ .searchFieldJson(JSONObject.toJSONString(Arrays.asList(
|
|
|
+ new YDSearch("textField_mjm9k35n",
|
|
|
+ khbm,
|
|
|
+ "客户编号",
|
|
|
+ YDSearch.Type.TEXT_FIELD,
|
|
|
+ YDSearch.Operator.EQ)
|
|
|
+ )))
|
|
|
+ .formDataJson(JSONObject.toJSONString(formData))
|
|
|
+ .build(), YDConf.FORM_OPERATION.upsert);
|
|
|
+
|
|
|
+ System.out.println("客户信息更新成功,客户编号:" + khbm);
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 添加错误日志
|
|
|
+ System.err.println("处理订单失败: " + e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException("处理订单失败: " + e.getMessage(), e);
|
|
|
+ } finally {
|
|
|
+ MDC.remove("MDC_KEY_PID");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算时间戳:在基础时间戳上添加天数
|
|
|
+ * @param baseTimestamp 基础时间戳(毫秒)
|
|
|
+ * @param days 要添加的天数
|
|
|
+ * @return 计算后的时间戳(毫秒)
|
|
|
+ */
|
|
|
+ private long calculateTimestamp(long baseTimestamp, int days) {
|
|
|
+ try {
|
|
|
+ // 1天 = 24小时 * 60分钟 * 60秒 * 1000毫秒
|
|
|
+ long oneDayMillis = 24L * 60L * 60L * 1000L;
|
|
|
+ long daysMillis = days * oneDayMillis;
|
|
|
+
|
|
|
+ long resultTimestamp = baseTimestamp + daysMillis;
|
|
|
+
|
|
|
+ // 输出调试信息
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ String baseDate = sdf.format(new Date(baseTimestamp));
|
|
|
+ String resultDate = sdf.format(new Date(resultTimestamp));
|
|
|
+
|
|
|
+ System.out.println("时间戳计算:" + baseDate + " (" + baseTimestamp + ") + " +
|
|
|
+ days + "天 = " + resultDate + " (" + resultTimestamp + ")");
|
|
|
+
|
|
|
+ return resultTimestamp;
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.err.println("时间戳计算失败:" + baseTimestamp + ", 天数:" + days + ", 错误:" + e.getMessage());
|
|
|
+ // 如果计算失败,返回一个默认值(基础时间戳 + 大致的天数)
|
|
|
+ return baseTimestamp + (days * 24L * 60L * 60L * 1000L);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 辅助方法:将时间戳转换为可读日期(仅用于调试)
|
|
|
+ */
|
|
|
+ private String timestampToDateString(String timestamp) {
|
|
|
+ try {
|
|
|
+ long ts = Long.parseLong(timestamp.trim());
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ return sdf.format(new Date(ts));
|
|
|
+ } catch (Exception e) {
|
|
|
+ return "无效时间戳:" + timestamp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private static LocalDateTime parseTimestamp(String timestampStr) {
|
|
|
if (timestampStr == null || timestampStr.trim().isEmpty()) return null;
|
|
|
try {
|