package com.malk.huagao.service.impl;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.malk.huagao.entity.*;
import com.malk.huagao.mapper.KdYdDeliveryDetailMapper;
import com.malk.huagao.mapper.KdYdDeliveryMapper;
import com.malk.huagao.mapper.KdYdOrderDetailMapper;
import com.malk.huagao.mapper.KdYdOrderMapper;
import com.malk.huagao.service.IKdYdDeliveryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.malk.server.aliwork.YDConf;
import com.malk.server.aliwork.YDParam;
import com.malk.server.common.McException;
import com.malk.server.dingtalk.DDR_New;
import com.malk.service.aliwork.YDClient;
import com.malk.utils.UtilMap;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringEscapeUtils;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
/**
*
* 服务实现类
*
*
* @author LQY
* @since 2025-10-15
*/
@Service
@Slf4j
public class KdYdDeliveryServiceImpl extends ServiceImpl implements IKdYdDeliveryService {
@Autowired
private YDClient ydClient;
@Autowired
private KdYdDeliveryMapper kdYdDeliveryMapper;
@Autowired
private KdYdDeliveryDetailMapper kdYdDeliveryDetailMapper;
@Value(value = "${kd.host}")
private String kdHost;
@Override
public Map insertDelivery(Map map) {
Map result = new HashMap<>();
try {
MDC.put("MDC_KEY_PID", "1003");
String formInstId = UtilMap.getString(map, "formInstId");
String action = UtilMap.getString(map, "type");
// 处理特殊操作类型
// 处理特殊操作类型
if ("del".equals(action)) {
String bm = UtilMap.getString(map, "bm");
int maxRetries = 3;
boolean success = false;
String lastResponse = "";
for (int i = 0; i < maxRetries; i++) {
Map headers = new HashMap<>();
headers.put("Content-Type", "application/x-www-form-urlencoded");
Map formParams = new HashMap<>();
Map requestBody = new HashMap<>();
Map djbh = new HashMap<>();
djbh.put("djbh", bm);
requestBody.put("data", djbh);
String jsonStr = JSON.toJSONString(requestBody);
formParams.put("jsons", jsonStr);
HttpResponse response = HttpRequest.post(kdHost + "/xk/dyzn/WsBasedyzn.asmx/hgdjydtbdeletefhtzd")
.headerMap(headers, true)
.form(formParams)
.timeout(30000)
.execute();
lastResponse = response.body();
log.info("第{}次删除返回值: {}", i + 1, lastResponse);
if (lastResponse != null && lastResponse.contains("\"code\":200")) {
success = true;
break;
}
if (i < maxRetries - 1) {
try {
long delay = 2000 + (i * 1000);
log.info("等待 {} 秒后重试", delay / 1000);
Thread.sleep(delay);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
result.put("table", "KD_YD_DELIVERY");
result.put("action", "del");
Map dataMap = new HashMap<>();
dataMap.put("bm", bm);
dataMap.put("msg", success ? "删除成功" : "删除失败,已重试" + maxRetries + "次");
if (!success) {
dataMap.put("error", lastResponse);
}
result.put("data", dataMap);
return result;
}
// 查询表单数据
DDR_New ddrNew = ydClient.queryData(YDParam.builder()
.formInstId(formInstId)
.build(), YDConf.FORM_QUERY.retrieve_id);
Map formData = ddrNew.getFormData();
// 提取主表字段
String djlx = UtilMap.getString(formData, "selectField_mg3fuqvg");
String orderId = UtilMap.getString(formData, "textField_mf6a0h6f");
LocalDateTime rq = parseTimestamp(UtilMap.getString(formData, "dateField_krbgloam"));
String kh = UtilMap.getString(formData, "textField_mejnamf2");
String jsbb = UtilMap.getString(formData, "selectField_mg3fuqvn");
String djbh = UtilMap.getString(formData, "serialNumberField_mheazm7w");
String xsbm = UtilMap.getString(formData, "textField_krnn5bmr");
String lllx = UtilMap.getString(formData, "selectField_mejowmnc");
String jjr = UtilMap.getString(formData, "textField_mf6a0h5f");
String jjrdh = UtilMap.getString(formData, "textField_mf6a0h5g");
String jjdz = UtilMap.getString(formData, "textareaField_mf6a0h5h");
String xslx = UtilMap.getString(formData, "selectField_mgrn6p2d");
String bzfs = UtilMap.getString(formData, "selectField_mf6a0h5y");
String hqdmb = UtilMap.getString(formData, "selectField_mg4hjsig");
String bz = UtilMap.getString(formData, "textareaField_mejnamfb");
String ckddh = UtilMap.getString(formData, "textField_mqg2b2g5");
// LocalDateTime hhsj = parseTimestamp(UtilMap.getString(formData, "dateField_mf6a0h67"));
LocalDateTime hhsj = Optional.ofNullable(
parseTimestamp(UtilMap.getString(formData, "dateField_mf6a0h67"))
)
.orElseGet(() -> LocalDateTime.now()
.withHour(17)
.withMinute(0)
.withSecond(0)
.withNano(0));
String ysfs = UtilMap.getString(formData, "selectField_mf6a0h5z");
String hdfs = UtilMap.getString(formData, "selectField_mf6a0h60");
String kdgs = UtilMap.getString(formData, "selectField_mf6a0h61");
String fkfs = UtilMap.getString(formData, "selectField_mf6a0h66");
// 处理明细数据
List