获取相对方

This commit is contained in:
2026-06-30 16:36:13 +08:00
parent 130a920486
commit df7322098e
8 changed files with 112 additions and 2 deletions
@@ -326,6 +326,30 @@ public class ContractLaunchController {
return R.success(contractLaunchService.saveCollectInfo(id, collectDto)); return R.success(contractLaunchService.saveCollectInfo(id, collectDto));
} }
/**
* 获取相对方签署确认状态。
*/
@GetMapping("/{id}/counterparty-confirm")
public R<Map<String, Object>> getCounterpartyConfirm(@PathVariable("id") Long id) {
return R.success(contractLaunchService.getCounterpartyConfirmMap(id));
}
/**
* 相对方确认已签署完成。
*
* 请求体:{"companyName": "四川德鑫矿业资源有限公司"}
* 后端自动获取当前登录用户信息写入确认记录。
*/
@PostMapping("/{id}/counterparty-confirm")
public R<Map<String, Object>> confirmCounterparty(@PathVariable("id") Long id,
@RequestBody Map<String, String> body) {
String companyName = body.get("companyName");
if (companyName == null || companyName.isBlank()) {
return R.error("companyName 不能为空");
}
return R.success(contractLaunchService.confirmCounterparty(id, companyName));
}
/** /**
* 合同归档。 * 合同归档。
* *
@@ -373,6 +373,11 @@ public class ContractLaunchDto implements Serializable {
/** 备注 */ /** 备注 */
private String remark; private String remark;
// ==================== 相对方签署确认 ====================
/** 相对方签署确认状态JSON{"公司名": {"confirmed":true, "method":"self"/"manual", "confirmedBy":"xxx", "confirmedAt":"..."}} */
private String counterpartyConfirmJson;
// ==================== 子表数据(非数据库字段) ==================== // ==================== 子表数据(非数据库字段) ====================
/** /**
@@ -10,6 +10,8 @@ import com.nbport.zgwl.contractlaunch.dto.ContractLaunchLawCallbackSampleDto;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchQueryDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchQueryDto;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchSealDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchSealDto;
import java.util.Map;
public interface ContractLaunchService { public interface ContractLaunchService {
/** 分页查询合同列表 */ /** 分页查询合同列表 */
@@ -54,6 +56,12 @@ public interface ContractLaunchService {
/** 保存采集信息(用印+签订信息),用于采集弹窗保存草稿 */ /** 保存采集信息(用印+签订信息),用于采集弹窗保存草稿 */
ContractLaunchDto saveCollectInfo(Long id, ContractLaunchCollectSaveDto collectDto); ContractLaunchDto saveCollectInfo(Long id, ContractLaunchCollectSaveDto collectDto);
/** 获取相对方签署确认状态 Map */
Map<String, Object> getCounterpartyConfirmMap(Long id);
/** 相对方确认已签署完成 */
Map<String, Object> confirmCounterparty(Long id, String companyName);
/** 模拟合同采集(调用数据采集 collectContract 接口,TODO:替换为真实调用) */ /** 模拟合同采集(调用数据采集 collectContract 接口,TODO:替换为真实调用) */
ContractLaunchDto mockCollect(Long id); ContractLaunchDto mockCollect(Long id);
@@ -597,6 +597,46 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
return getDetail(id); return getDetail(id);
} }
@Override
public Map<String, Object> getCounterpartyConfirmMap(Long id) {
ContractLaunchDto contract = getDetail(id);
String raw = contract.getCounterpartyConfirmJson();
if (raw == null || raw.isBlank()) {
return new LinkedHashMap<>();
}
return JsonUtils.parseMap(raw);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Map<String, Object> confirmCounterparty(Long id, String companyName) {
ContractLaunchDto contract = getDetail(id);
SysUserEntity currentUser = adminSecurityManage.getUser();
String orgName = currentUser.getSysOrgEntity() == null ? "" : currentUser.getSysOrgEntity().getOrgName();
String username = currentUser.getUsername();
String mobile = currentUser.getMobilePhone();
Map<String, Object> confirmMap = getCounterpartyConfirmMap(id);
Map<String, Object> entry = new LinkedHashMap<>();
entry.put("confirmed", true);
boolean isSelf = companyName.equals(orgName);
entry.put("method", isSelf ? "self" : "manual");
entry.put("confirmedBy", username);
entry.put("confirmedMobile", mobile);
entry.put("confirmedAt", LocalDateTime.now().toString());
if (!isSelf) {
entry.put("remark", "非本组织相对方,由 " + username + " 代为确认");
}
confirmMap.put(companyName, entry);
contract.setCounterpartyConfirmJson(JsonUtils.toJson(confirmMap));
contract.setUpdateBy(username);
contract.setUpdateTime(LocalDateTime.now());
contractLaunchMapper.updateContract(contract);
return confirmMap;
}
/** /**
* 【测试按钮】模拟合同采集。 * 【测试按钮】模拟合同采集。
*/ */
@@ -29,8 +29,19 @@ public class JsonUtils {
try { try {
return OBJECT_MAPPER.writeValueAsString(obj); return OBJECT_MAPPER.writeValueAsString(obj);
} catch (Exception e) { } catch (Exception e) {
// 序列化失败时返回 toString,保证不报错
return obj.toString(); return obj.toString();
} }
} }
@SuppressWarnings("unchecked")
public static java.util.Map<String, Object> parseMap(String json) {
if (json == null || json.isBlank()) {
return new java.util.LinkedHashMap<>();
}
try {
return OBJECT_MAPPER.readValue(json, java.util.LinkedHashMap.class);
} catch (Exception e) {
return new java.util.LinkedHashMap<>();
}
}
} }
@@ -57,7 +57,10 @@ public class AdminDictController {
new DictDataItem("合同方摘要", "counterpartySummary", "模板变量值,由用户自行维护"), new DictDataItem("合同方摘要", "counterpartySummary", "模板变量值,由用户自行维护"),
new DictDataItem("附件情况", "attachmentSummary", "模板变量值,由用户自行维护"), new DictDataItem("附件情况", "attachmentSummary", "模板变量值,由用户自行维护"),
new DictDataItem("模板名称", "templateLabel", "模板变量值,由用户自行维护"), new DictDataItem("模板名称", "templateLabel", "模板变量值,由用户自行维护"),
new DictDataItem("签署日期", "signDate", "模板变量值,由用户自行维护") new DictDataItem("签署日期", "signDate", "模板变量值,由用户自行维护"),
new DictDataItem("A的TAx", "partyATaxNo", "模板变量值,由用户自行维护"),
new DictDataItem("B的TAx", "partyBTaxNo", "模板变量值,由用户自行维护")
); );
} }
@@ -92,6 +92,7 @@
<result property="invoiceDate" column="INVOICE_DATE"/> <result property="invoiceDate" column="INVOICE_DATE"/>
<result property="receiveDate" column="RECEIVE_DATE"/> <result property="receiveDate" column="RECEIVE_DATE"/>
<result property="remindDays" column="REMIND_DAYS"/> <result property="remindDays" column="REMIND_DAYS"/>
<result property="counterpartyConfirmJson" column="COUNTERPARTY_CONFIRM_JSON"/>
<result property="initiator" column="INITIATOR"/> <result property="initiator" column="INITIATOR"/>
<result property="initiatorDept" column="INITIATOR_DEPT"/> <result property="initiatorDept" column="INITIATOR_DEPT"/>
<result property="companyName" column="COMPANY_NAME"/> <result property="companyName" column="COMPANY_NAME"/>
@@ -211,6 +212,7 @@
SIGNED_FILE_NAME, SIGNED_FILE_PATH, SIGNED_FILE_TYPE, SIGNED_FILE_SIZE, SIGNED_FILE_URL, SIGNED_OFFLINE_REASON, SIGNED_FILE_NAME, SIGNED_FILE_PATH, SIGNED_FILE_TYPE, SIGNED_FILE_SIZE, SIGNED_FILE_URL, SIGNED_OFFLINE_REASON,
SIGN_DATE, SEAL_DATE, SEAL_IS_SEAL, SEAL_APPROVE_SAME, ACTIVE_DATE, ARCHIVE_DATE, ARCHIVE_RECEIVE_DEPT, ARCHIVE_TRANSFEROR, ARCHIVE_KEEPER, ARCHIVE_KEEPER_UNIT, SIGN_DATE, SEAL_DATE, SEAL_IS_SEAL, SEAL_APPROVE_SAME, ACTIVE_DATE, ARCHIVE_DATE, ARCHIVE_RECEIVE_DEPT, ARCHIVE_TRANSFEROR, ARCHIVE_KEEPER, ARCHIVE_KEEPER_UNIT,
ARCHIVE_KEEPER_UNIT_CODE, INVOICE_DATE, RECEIVE_DATE, REMIND_DAYS, ARCHIVE_KEEPER_UNIT_CODE, INVOICE_DATE, RECEIVE_DATE, REMIND_DAYS,
COUNTERPARTY_CONFIRM_JSON,
INITIATOR, INITIATOR_DEPT, COMPANY_NAME, ORG_ID, QUERY_SCOPE, INITIATOR, INITIATOR_DEPT, COMPANY_NAME, ORG_ID, QUERY_SCOPE,
CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK
from SEAL_CONTRACT_LAUNCH_MAIN from SEAL_CONTRACT_LAUNCH_MAIN
@@ -500,6 +502,7 @@
INVOICE_DATE = #{invoiceDate}, INVOICE_DATE = #{invoiceDate},
RECEIVE_DATE = #{receiveDate}, RECEIVE_DATE = #{receiveDate},
REMIND_DAYS = #{remindDays}, REMIND_DAYS = #{remindDays},
COUNTERPARTY_CONFIRM_JSON = #{counterpartyConfirmJson},
INITIATOR = #{initiator}, INITIATOR = #{initiator},
INITIATOR_DEPT = #{initiatorDept}, INITIATOR_DEPT = #{initiatorDept},
COMPANY_NAME = #{companyName}, COMPANY_NAME = #{companyName},
@@ -224,3 +224,19 @@ BEGIN
COMMIT; COMMIT;
END; END;
/ /
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'SEAL_CONTRACT_LAUNCH_MAIN'
AND COLUMN_NAME = 'COUNTERPARTY_CONFIRM_JSON';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE SEAL_CONTRACT_LAUNCH_MAIN ADD COUNTERPARTY_CONFIRM_JSON VARCHAR2(2000 CHAR)';
END IF;
END;
/
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.COUNTERPARTY_CONFIRM_JSON IS '相对方签署确认状态JSON';