获取相对方
This commit is contained in:
@@ -326,6 +326,30 @@ public class ContractLaunchController {
|
||||
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;
|
||||
|
||||
// ==================== 相对方签署确认 ====================
|
||||
|
||||
/** 相对方签署确认状态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.ContractLaunchSealDto;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface ContractLaunchService {
|
||||
|
||||
/** 分页查询合同列表 */
|
||||
@@ -54,6 +56,12 @@ public interface ContractLaunchService {
|
||||
/** 保存采集信息(用印+签订信息),用于采集弹窗保存草稿 */
|
||||
ContractLaunchDto saveCollectInfo(Long id, ContractLaunchCollectSaveDto collectDto);
|
||||
|
||||
/** 获取相对方签署确认状态 Map */
|
||||
Map<String, Object> getCounterpartyConfirmMap(Long id);
|
||||
|
||||
/** 相对方确认已签署完成 */
|
||||
Map<String, Object> confirmCounterparty(Long id, String companyName);
|
||||
|
||||
/** 模拟合同采集(调用数据采集 collectContract 接口,TODO:替换为真实调用) */
|
||||
ContractLaunchDto mockCollect(Long id);
|
||||
|
||||
|
||||
@@ -597,6 +597,46 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
||||
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 {
|
||||
return OBJECT_MAPPER.writeValueAsString(obj);
|
||||
} catch (Exception e) {
|
||||
// 序列化失败时返回 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("附件情况", "attachmentSummary", "模板变量值,由用户自行维护"),
|
||||
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="receiveDate" column="RECEIVE_DATE"/>
|
||||
<result property="remindDays" column="REMIND_DAYS"/>
|
||||
<result property="counterpartyConfirmJson" column="COUNTERPARTY_CONFIRM_JSON"/>
|
||||
<result property="initiator" column="INITIATOR"/>
|
||||
<result property="initiatorDept" column="INITIATOR_DEPT"/>
|
||||
<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,
|
||||
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,
|
||||
COUNTERPARTY_CONFIRM_JSON,
|
||||
INITIATOR, INITIATOR_DEPT, COMPANY_NAME, ORG_ID, QUERY_SCOPE,
|
||||
CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK
|
||||
from SEAL_CONTRACT_LAUNCH_MAIN
|
||||
@@ -500,6 +502,7 @@
|
||||
INVOICE_DATE = #{invoiceDate},
|
||||
RECEIVE_DATE = #{receiveDate},
|
||||
REMIND_DAYS = #{remindDays},
|
||||
COUNTERPARTY_CONFIRM_JSON = #{counterpartyConfirmJson},
|
||||
INITIATOR = #{initiator},
|
||||
INITIATOR_DEPT = #{initiatorDept},
|
||||
COMPANY_NAME = #{companyName},
|
||||
|
||||
Reference in New Issue
Block a user