package jnpf.limsController;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import jnpf.base.UserInfo;
|
import jnpf.exception.DataException;
|
import jnpf.limsEntity.LimsModifySignPasswordParam;
|
import jnpf.limsEntity.LimsSignEntity;
|
import jnpf.limsEntity.LimsSignVerifyParam;
|
import jnpf.limsService.LimsSignService;
|
import jnpf.util.R;
|
import jnpf.util.UserProvider;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* LIMS 电子签名接口。
|
*/
|
@Slf4j
|
@Tag(name = "lims电子签名", description = "签名校验 + 签名密码批量初始化")
|
@RestController
|
@RequestMapping("/lims/biz/sign")
|
public class LimsSignController {
|
|
@Autowired
|
private LimsSignService limsSignService;
|
|
/**
|
* 校验账户 + 签名密码,通过后落 lims_sign 一条,返回主键作为 biz_sign 给前端。
|
*
|
* <p>请求体(snake_case):
|
* <pre>
|
* {
|
* "data_id": "<业务主键,可空>",
|
* "op_type": "baogao_reject",
|
* "account_name": "admin",
|
* "password": "123456",
|
* "note": "退回原因 / 操作说明",
|
* "meta_data": "调用方业务元数据"
|
* }
|
* </pre>
|
*
|
* <p>响应:
|
* <pre>{ "data": { "biz_sign": "<lims_sign.f_id>" } }</pre>
|
*/
|
@Operation(summary = "电子签名校验")
|
@PostMapping("/verify")
|
public R<Map<String, String>> verify(@RequestBody LimsSignVerifyParam param) {
|
try {
|
String signId = limsSignService.verifyAndRecord(param);
|
Map<String, String> data = new HashMap<>();
|
data.put("biz_sign", signId);
|
return R.success("签名成功", data);
|
} catch (DataException e) {
|
return R.error(e.getMessage());
|
}
|
}
|
|
/**
|
* 校验指定用户账户 + 签名密码,通过后落 lims_sign 一条。
|
*
|
* <p>与 /verify 的差异:
|
* <ul>
|
* <li>allow_self 不为 yes 时,account_name 不允许为当前登录用户</li>
|
* <li>响应额外返回 biz_user_id,即下发签名账户对应的用户 id</li>
|
* </ul>
|
*/
|
@Operation(summary = "指定用户电子签名校验")
|
@PostMapping("/verify_user")
|
public R<Map<String, String>> verifyUser(@RequestBody LimsSignVerifyParam param) {
|
try {
|
LimsSignEntity sign = limsSignService.verifyUserAndRecord(param);
|
Map<String, String> data = new HashMap<>();
|
data.put("biz_sign", sign.getId());
|
data.put("biz_user_id", sign.getCreatorUserId());
|
return R.success("签名成功", data);
|
} catch (DataException e) {
|
return R.error(e.getMessage());
|
}
|
}
|
|
/**
|
* 当前登录用户修改 / 初始化自己的签名密码。
|
*
|
* <p>请求体(snake_case):
|
* <pre>
|
* {
|
* "account_password": "<Md5(账户登录密码明文)>",
|
* "password": "<新签名密码明文>",
|
* "repeat_password": "<重复新签名密码>",
|
* "code": "<图形验证码>",
|
* "timestamp": "<图形验证码 redis key>"
|
* }
|
* </pre>
|
*
|
* <p>校验顺序见 {@link LimsSignService#modifySignPassword}:先验证码 → 账户密码 → 新密码一致性。
|
*/
|
@Operation(summary = "修改 / 初始化签名密码")
|
@PostMapping("/modify-password")
|
public R<Object> modifyPassword(@RequestBody LimsModifySignPasswordParam param) {
|
try {
|
limsSignService.modifySignPassword(param);
|
return R.success("签名密码修改成功", null);
|
} catch (DataException e) {
|
return R.error(e.getMessage());
|
}
|
}
|
|
/**
|
* 给所有未软删 base_user 批量初始化签名密码 = "123456"。
|
* 已有记录跳过;幂等可重复调。仅 admin 可调。
|
*
|
* <p>响应:
|
* <pre>{ "data": { "inserted": 240, "skipped": 4 } }</pre>
|
*/
|
@Operation(summary = "批量初始化签名密码(admin)")
|
@PostMapping("/init-all")
|
public R<Map<String, Integer>> initAll() {
|
UserInfo userInfo = UserProvider.getUser();
|
if (userInfo == null) {
|
return R.error("当前未登录");
|
}
|
if (!userInfo.getIsAdministrator()) {
|
return R.error("仅管理员可执行批量初始化");
|
}
|
int[] result = limsSignService.initAllUsers();
|
Map<String, Integer> data = new HashMap<>();
|
data.put("inserted", result[0]);
|
data.put("skipped", result[1]);
|
return R.success("初始化完成", data);
|
}
|
}
|