HxpAIOController.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592
  1. package com.zd.chemical.controller;
  2. import com.zd.chemical.domain.HxpAlarmRecord;
  3. import com.zd.chemical.domain.HxpStock;
  4. import com.zd.chemical.domain.HxpUserecord;
  5. import com.zd.chemical.domain.vo.*;
  6. import com.zd.chemical.service.*;
  7. import com.zd.chemical.util.ChemicalUtils;
  8. import com.zd.common.core.annotation.Log;
  9. import com.zd.common.core.exception.ServiceException;
  10. import com.zd.common.core.log.BusinessType;
  11. import com.zd.common.core.security.TokenService;
  12. import com.zd.common.core.utils.DateUtils;
  13. import com.zd.common.core.utils.SecurityUtils;
  14. import com.zd.common.core.web.controller.BaseController;
  15. import com.zd.laboratory.api.entity.CabinetV2Lock;
  16. import com.zd.model.domain.R;
  17. import com.zd.model.entity.LoginUser;
  18. import com.zd.model.enums.LockTypeEnum;
  19. import com.zd.model.page.TableDataInfo;
  20. import io.swagger.annotations.Api;
  21. import io.swagger.annotations.ApiOperation;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.web.bind.annotation.*;
  25. import javax.validation.Valid;
  26. import java.text.DateFormat;
  27. import java.text.SimpleDateFormat;
  28. import java.util.List;
  29. /**
  30. * 化学品智能终端Controller
  31. */
  32. @RestController
  33. @RequestMapping("/api")
  34. @Api(tags = {"化学品智能终端"})
  35. public class HxpAIOController extends BaseController {
  36. /**
  37. * routes:
  38. * # 认证中心
  39. * - id: zd-auth
  40. * - Path=/auth/**
  41. * # 代码生成
  42. * - id: zd-gen
  43. * - Path=/code/**
  44. * # 定时任务
  45. * - id: zd-job
  46. * - Path=/schedule/**
  47. * # 系统模块
  48. * - id: zd-system
  49. * - Path=/system/**
  50. * # 文件服务
  51. * - id: zd-file
  52. * - Path=/file/**
  53. * # 实验室服务
  54. * - id: zd-laboratory
  55. * - Path=/laboratory/**
  56. * # 考试服务
  57. * - id: zd-exam
  58. * - Path=/exam/**
  59. * # 化学品
  60. * - id: zd-chemical
  61. * - Path=/chemical/**
  62. * # 小程序
  63. * - id: zd-app
  64. * - Path=/app/**
  65. * # 人脸识别
  66. * - id: zd-face
  67. * - Path=/face/**
  68. * # 小程序
  69. * - id: zd-camera
  70. * - Path=/camera/**
  71. * # 语音报警
  72. * - id: zd-alarm
  73. * - Path=/alarm/**
  74. * # ip喇叭
  75. * - id: zd-speaker
  76. * - Path=/speak/**
  77. */
  78. private static DateFormat sdf = new SimpleDateFormat("yyMMddssSSS");
  79. @Autowired
  80. private TokenService tokenService;
  81. @Autowired
  82. private IHxpSmartTerminalService hxpSmartTerminalService;
  83. @Autowired
  84. private IHxpCabinetService hxpCabinetService;
  85. @Autowired
  86. private IHxpChemicalJoinCabinetService hxpCabinetJoinCabinetService;
  87. @Autowired
  88. private IHxpStockService hxpStockService;
  89. @Autowired
  90. private IHxpUserecordService hxpUserecordService;
  91. @Autowired
  92. private IHxpAlarmRecordService hxpAlarmRecordService;
  93. /**-------------------------------------BASE 说明---------------------------------------
  94. * @return*/
  95. /*
  96. * 1.获取功能配置基本信息和logo: /system/logo/config/getLogoInfo (无 token 验证,GET)
  97. * 2.刷卡登录,退出,自动退出功能 - 同学习一体机一致(登录需要machineCode 传参 设备编号)
  98. */
  99. // D:\project\lab2.0\lab-distributed-java-2.0\zd-modules\zd-chemical\src\
  100. // chemical 化学品
  101. private boolean getCabinetLock(){
  102. LoginUser user = tokenService.getLoginUser();
  103. return user.isCabinetLock();
  104. }
  105. private String getTerminalNum(){
  106. LoginUser user = tokenService.getLoginUser();
  107. if(user == null || StringUtils.isBlank(user.getMachineCode())){
  108. throw new ServiceException("未获取到设备编号,无效操作!");
  109. }
  110. return user.getMachineCode();
  111. }
  112. private Long getSubIdByTerminalNum(){
  113. Long subId = hxpSmartTerminalService.selectSubIdByTerminalNum(getTerminalNum());
  114. if(subId == null){
  115. throw new ServiceException("设备未匹配到实验室,请确认设备信息后重新登录!");
  116. }
  117. return subId;
  118. }
  119. private Long getSubIdByTerminalNum(String machineCode){
  120. machineCode = StringUtils.isBlank(machineCode) ? getTerminalNum():machineCode;
  121. Long subId = hxpSmartTerminalService.selectSubIdByTerminalNum(machineCode);
  122. if(subId == null){
  123. throw new ServiceException("设备未匹配到实验室,请确认设备信息后重新登录!");
  124. }
  125. return subId;
  126. }
  127. public static String genTagCode(){
  128. String tagCode = sdf.format(DateUtils.getNowDate());
  129. return tagCode.substring(0, tagCode.length());
  130. }
  131. /**
  132. *
  133. * 判断当前登录人是否管理员
  134. */
  135. @PostMapping("/authValidation")
  136. @ApiOperation(value = "判断当前登录人是否管理员")
  137. public R<Boolean> selectIsAdminOrSafeUser() {
  138. return R.ok(hxpUserecordService.selectIsAdminOrSafeUser(getSubIdByTerminalNum(), SecurityUtils.getUserId()));
  139. }
  140. /**
  141. *
  142. * 终端登录查询实验室信息
  143. */
  144. @PostMapping("/querySubInfo")
  145. @ApiOperation(value = "终端登录查询实验室信息")
  146. public R<AioSubInfoVo> querySubInfo() {
  147. return R.ok(hxpCabinetService.querySubInfo(getSubIdByTerminalNum()));
  148. }
  149. /**--------------------------------------领用化学品----------------------------------------*/
  150. /**
  151. *
  152. * 双人验证 刷卡识别权限身份
  153. */
  154. @PostMapping("/userValidation")
  155. @ApiOperation(value = "双人验证 刷卡识别身份权限")
  156. public R<AioUserValidationVo> userValidation(@RequestBody @Valid AioUserValidationVo userValidationVo) {
  157. if(StringUtils.isBlank(userValidationVo.getCardNum())){
  158. return R.fail("验证失败:卡号不能为空!");
  159. }
  160. userValidationVo.setSubId(getSubIdByTerminalNum());
  161. userValidationVo = hxpUserecordService.userValidation(userValidationVo);
  162. return R.ok(userValidationVo);
  163. }
  164. /**
  165. * 领用化学品
  166. * 同一个化学品领用状态下只能出现一条数据,就是说未归还的前提下,下一个人是无法领用的
  167. */
  168. @PostMapping("/addUserecord")
  169. @ApiOperation(value = "领用化学品")
  170. public R<HxpUserecord> addUserecord(@RequestBody @Valid HxpUserecord hxpUserecord) {
  171. hxpUserecord = hxpUserecordService.insertHxpUserecord(hxpUserecord);
  172. //小数点末尾去0处理
  173. if (hxpUserecord != null) {
  174. hxpUserecord.setLossAmount(ChemicalUtils.removeZeroForAfterPoint(hxpUserecord.getLossAmount()));
  175. hxpUserecord.setCollectNowNum(ChemicalUtils.removeZeroForAfterPoint(hxpUserecord.getCollectNowNum()));
  176. hxpUserecord.setCollectStockNum(ChemicalUtils.removeZeroForAfterPoint(hxpUserecord.getCollectStockNum()));
  177. hxpUserecord.setReturnStockNum(ChemicalUtils.removeZeroForAfterPoint(hxpUserecord.getReturnStockNum()));
  178. }
  179. return R.ok(hxpUserecord);
  180. }
  181. /**---------------------------------------归还化学品---------------------------------------*/
  182. /**
  183. * 归还时查询已领用化学品
  184. */
  185. @PostMapping("/queryByUserecord")
  186. @ApiOperation(value = "归还时查询已领用化学品")
  187. public R<Object> queryByUserecord(@RequestBody HxpStock hxpStock) {
  188. if(hxpStock.getId() == null && StringUtils.isBlank(hxpStock.getTagCode())){
  189. return R.fail("查询失败,卡号不能为空!");
  190. }
  191. hxpStock.setStatus(1);
  192. hxpStock.setSubId(getSubIdByTerminalNum());
  193. hxpStock.setScanCode(hxpStock.getTagCode());
  194. hxpStock.setTagCode(null);
  195. List<HxpStock> list = hxpStockService.selectHxpStockList(hxpStock);
  196. // 识别结果应该只能有一条
  197. if(list!=null && !list.isEmpty()){
  198. hxpStock = list.get(0);
  199. HxpUserecord hxpUserecord = new HxpUserecord();
  200. hxpUserecord.setStockId(hxpStock.getId());
  201. hxpUserecord.setUserId(SecurityUtils.getUserIdEx());
  202. List<HxpUserecord> userecordList = hxpUserecordService.selectByUsed(hxpUserecord);
  203. if(userecordList==null || userecordList.isEmpty()){
  204. return R.fail("您当前未领用该化学品,不用归还!");
  205. }else if(userecordList.size() > 1){
  206. return R.fail("查询失败:领用数据【" + hxpStock.getScanCode() + "】,请联系管理员!");
  207. }
  208. hxpStock.setHxpUserecord(userecordList.get(0));
  209. //新加:去除末尾多余的0
  210. hxpStock.setSuttle(ChemicalUtils.removeZeroForAfterPoint(hxpStock.getSuttle()));
  211. hxpStock.setChemicalAmount(ChemicalUtils.removeZeroForAfterPoint(hxpStock.getChemicalAmount()));
  212. hxpStock.setUsages(ChemicalUtils.removeZeroForAfterPoint(hxpStock.getUsages()));
  213. hxpStock.setOutUsages(ChemicalUtils.removeZeroForAfterPoint(hxpStock.getOutUsages()));
  214. hxpStock.setTare(ChemicalUtils.removeZeroForAfterPoint(hxpStock.getTare()));
  215. //领用信息
  216. HxpUserecord userecord = hxpStock.getHxpUserecord();
  217. if (userecord != null) {
  218. userecord.setLossAmount(ChemicalUtils.removeZeroForAfterPoint(userecord.getLossAmount()));
  219. userecord.setCollectNowNum(ChemicalUtils.removeZeroForAfterPoint(userecord.getCollectNowNum()));
  220. userecord.setCollectStockNum(ChemicalUtils.removeZeroForAfterPoint(userecord.getCollectStockNum()));
  221. userecord.setReturnStockNum(ChemicalUtils.removeZeroForAfterPoint(userecord.getReturnStockNum()));
  222. }
  223. }else {
  224. return R.fail("当前化学品已过期或不存在!");
  225. }
  226. return R.ok(hxpStock);
  227. }
  228. /**
  229. * 归还化学品
  230. */
  231. @PostMapping("/updateUserecord")
  232. @ApiOperation(value = "归还化学品")
  233. public R<HxpUserecord> updateUserecord(@RequestBody HxpUserecord hxpUserecord) {
  234. if(hxpUserecord.getId() == null){
  235. return R.fail("参数异常,ID不能为空!");
  236. }
  237. if(hxpUserecord.getReturnType() == null){
  238. return R.fail("归还方式不能为空!");
  239. }
  240. if(hxpUserecord.getReturnStockNum() == null){
  241. return R.fail("称重重量不能为空!");
  242. }
  243. hxpUserecord = hxpUserecordService.updateHxpUserecord(hxpUserecord);
  244. return R.ok(hxpUserecord);
  245. }
  246. /**----------------------------------------使用记录--------------------------------------*/
  247. /**
  248. * 查询使用记录
  249. */
  250. @PostMapping("/queryRecordList")
  251. @ApiOperation(value = "查询使用记录")
  252. public TableDataInfo<List<AioUserecordVo>> queryRecordList(@RequestBody AioUserecordVo aioUserecordVo) {
  253. aioUserecordVo.setSubId(getSubIdByTerminalNum());
  254. aioUserecordVo.setUserId(SecurityUtils.getUserId());
  255. startPage();
  256. List<AioUserecordVo> list = hxpUserecordService.queryRecordList(aioUserecordVo);
  257. //小数点后去0处理
  258. if (list != null && !list.isEmpty()) {
  259. list.stream().forEach(vo -> {
  260. vo.setUseStockNum(ChemicalUtils.removeZeroForAfterPoint(vo.getUseStockNum()));
  261. vo.setCollectStockNum(ChemicalUtils.removeZeroForAfterPoint(vo.getCollectStockNum()));
  262. vo.setReturnStockNum(ChemicalUtils.removeZeroForAfterPoint(vo.getReturnStockNum()));
  263. });
  264. }
  265. return getDataTable(list);
  266. }
  267. /**----------------------------------------报警台账--------------------------------------*/
  268. /**
  269. * 查询报警记录列表
  270. */
  271. @PostMapping("/queryAlarmRecordList")
  272. @ApiOperation(value = "查询报警记录列表")
  273. public TableDataInfo<List<AioAlarmRecordVo>> queryAlarmRecordList(@RequestBody AioAlarmRecordVo aioAlarmRecordVo) {
  274. aioAlarmRecordVo.setSubId(getSubIdByTerminalNum());
  275. startPage();
  276. List<AioAlarmRecordVo> list = hxpAlarmRecordService.queryAlarmRecordList(aioAlarmRecordVo);
  277. return getDataTable(list);
  278. }
  279. /**
  280. * 查询报警记录详情
  281. */
  282. @GetMapping("/queryAlarmRecordDetail")
  283. @ApiOperation(value = "查询报警记录详情")
  284. public R<AioAlarmRecordVo> queryAlarmRecordDetail(@RequestParam("id") Long id) {
  285. return R.ok(hxpAlarmRecordService.queryAlarmRecordDetail(id));
  286. }
  287. /**
  288. * 检测类型报警记录手动处理
  289. */
  290. @PostMapping("/updateAlarmRecord")
  291. @ApiOperation(value = "检测类型报警记录手动处理")
  292. public R<List<HxpCabinetVo>> updateAlarmRecord(@RequestBody HxpAlarmRecord hxpAlarmRecord) {
  293. if(hxpAlarmRecord.getId() == null || hxpAlarmRecord.getHandlingStatus() == null){
  294. return R.fail("参数无效,ID不能为空!");
  295. }
  296. hxpAlarmRecordService.updateHxpAlarmRecord(hxpAlarmRecord);
  297. return R.ok();
  298. }
  299. /**----------------------------------------化学品入库--------------------------------------*/
  300. /**
  301. * 查询实验室机柜列表
  302. */
  303. @PostMapping("/queryCabinetList")
  304. @ApiOperation(value = "查询实验室机柜列表")
  305. public R<List<HxpCabinetVo>> queryCabinetList(@RequestBody HxpCabinetSearch hxpCabinetSearch) {
  306. // 当前实验室机柜
  307. hxpCabinetSearch.setSubId(getSubIdByTerminalNum());
  308. List<HxpCabinetVo> list = hxpCabinetService.selectHxpCabinetList(hxpCabinetSearch);
  309. return R.ok(list);
  310. }
  311. /**
  312. * 入库查询化学品配置信息
  313. */
  314. @PostMapping("/queryChemicalList")
  315. @ApiOperation(value = "入库查询化学品配置信息")
  316. public TableDataInfo<List<AioChemicalVo>> queryChemicalList(@RequestBody AioChemicalVo aioChemicalVo) {
  317. // 当前实验室机柜
  318. aioChemicalVo.setSubId(getSubIdByTerminalNum());
  319. startPage();
  320. List<AioChemicalVo> list = hxpCabinetJoinCabinetService.selectChemicalVoList(aioChemicalVo);
  321. //小数点后去0 处理
  322. if (list != null && !list.isEmpty()) {
  323. list.stream().forEach(vo -> {
  324. vo.setChemicalAmount(ChemicalUtils.removeZeroForAfterPoint(vo.getChemicalAmount()));
  325. vo.setTare(ChemicalUtils.removeZeroForAfterPoint(vo.getTare()));
  326. });
  327. }
  328. return getDataTable(list);
  329. }
  330. /**
  331. * 化学品入库
  332. */
  333. @PostMapping("/addStock")
  334. @ApiOperation(value = "化学品入库")
  335. public R<HxpStock> addStock(@RequestBody @Valid HxpStock hxpStock) {
  336. // 化学品入库
  337. return R.ok(hxpStockService.insertHxpStock(hxpStock));
  338. }
  339. /**----------------------------------------化学品出库--------------------------------------*/
  340. /**
  341. * 通过识别卡号或者二维码扫码查询已入库化学品
  342. */
  343. @PostMapping("/queryByTagCode")
  344. @ApiOperation(value = "通过识别卡号或者二维码扫码查询已入库化学品")
  345. public R<Object> queryByTagCode(@RequestBody HxpStock hxpStock) {
  346. if(StringUtils.isBlank(hxpStock.getTagCode())){
  347. return R.fail("查询失败,卡号不能为空!");
  348. }
  349. int qType = hxpStock.getqType();
  350. // 终端传参数据有问题,暂临时后端处理
  351. if(qType != 2 && qType != 5){
  352. hxpStock.setSubId(getSubIdByTerminalNum(hxpStock.getMachineCode()));
  353. }
  354. logger.info("queryByTagCode 查询参数:" + hxpStock.getTagCode()+ ", 实验室ID:" + hxpStock.getSubId() + ", qType: " + hxpStock.getqType());
  355. hxpStock.setScanCode(hxpStock.getTagCode());
  356. hxpStock.setTagCode(null);
  357. List<HxpStock> list = hxpStockService.selectHxpStockList(hxpStock);
  358. // 识别结果应该只能有一条
  359. if(list==null || list.isEmpty()){
  360. logger.info("入参校验qType000000000:" + qType);
  361. if(qType != 0 && qType != 2){
  362. return R.fail("未查询到数据:查无数据或已出库!");
  363. }
  364. hxpStock = null;
  365. }else if(list.size() == 1){
  366. logger.info("入参校验qType1111111:" + qType);
  367. hxpStock = list.get(0);
  368. if(hxpStock.getStatus() == 4){
  369. return R.fail("操作失败:该化学品已过期!");
  370. }
  371. if((hxpStock.getStatus() == 2 || hxpStock.getStatus() == 3)){
  372. return R.fail("操作失败:该化学品已出库!");
  373. }
  374. if(qType > 0){
  375. // qType 1-领用化学品 2-化学品入库 3-化学品出库 4-归还化学品 5-RFID标签更换 6-查询化学品
  376. HxpUserecord hxpUserecord = new HxpUserecord();
  377. hxpUserecord.setUseStatus(1);
  378. hxpUserecord.setStockId(hxpStock.getId());
  379. List<HxpUserecord> userecordList;
  380. switch (qType) {
  381. case 1:
  382. case 3:
  383. // 化学品出库
  384. userecordList = hxpUserecordService.selectHxpUserecordList(hxpUserecord);
  385. if(!userecordList.isEmpty()){
  386. if(qType == 1){
  387. // 领用化学品
  388. return R.fail("该化学品领用中,还未归还!");
  389. }
  390. return R.fail("化学品领用中,请先完成归还后再操作出库。");
  391. }
  392. break;
  393. case 2:
  394. case 5:
  395. // RFID标签更换
  396. // 化学品入库
  397. return R.fail("该标签已绑定,请扫描新的RFID标签。");
  398. case 4:
  399. // 归还化学品
  400. hxpUserecord.setUserId(SecurityUtils.getUserIdEx());
  401. userecordList = hxpUserecordService.selectHxpUserecordList(hxpUserecord);
  402. if(userecordList==null || userecordList.isEmpty()){
  403. return R.fail("您当前未领用该化学品,不用归还!");
  404. }
  405. break;
  406. case 6:
  407. // 查询化学品
  408. }
  409. }
  410. }else {
  411. return R.fail("数据异常,请联系管理员!");
  412. }
  413. return R.ok(hxpStock);
  414. }
  415. /**
  416. * 化学品出库
  417. */
  418. @PostMapping("/outStock")
  419. @ApiOperation(value = "化学品出库")
  420. public R<Object> outStock(@RequestBody HxpStock hxpStock) {
  421. if(hxpStock.getId() == null || !(hxpStock.getStatus() == 2 || hxpStock.getStatus() == 3)){
  422. return R.fail("出库失败,参数异常!");
  423. }
  424. hxpStockService.outStock(hxpStock);
  425. return R.ok();
  426. }
  427. /**----------------------------------------标签管理--------------------------------------*/
  428. /**
  429. * 标签管理列表查询
  430. */
  431. @PostMapping("/queryTagByStock")
  432. @ApiOperation(value = "标签列表查询: 此接口不调用", notes =
  433. "1. queryChemicalList 获取标签列表," +
  434. "2. queryChemicalByStock (joinId)获取标签已入库标签列表")
  435. public R queryTagByStock(@RequestBody HxpStock hxpStock) {
  436. return R.ok();
  437. }
  438. /**
  439. * RFID 标签更换
  440. */
  441. @PostMapping("/updateStock")
  442. @ApiOperation(value = "RFID 标签更换")
  443. public R<Object> updateStock(@RequestBody HxpStock hxpStock) {
  444. if(hxpStock.getId() == null || StringUtils.isBlank(hxpStock.getRfidCode())){
  445. return R.fail("操作失败,参数异常!");
  446. }
  447. hxpStockService.updateHxpStock(hxpStock);
  448. return R.ok();
  449. }
  450. // 二维码信息打印 数据接口均已返回
  451. /**--------------------------------------查询化学品----------------------------------------*/
  452. /**
  453. * 查询化学品
  454. */
  455. @PostMapping("/queryChemicalByStock")
  456. @ApiOperation(value = "查询化学品")
  457. public TableDataInfo<List<HxpStock>> queryChemicalByStock(@RequestBody HxpStock hxpStock) {
  458. hxpStock.setSubId(getSubIdByTerminalNum());
  459. hxpStock.setStatus(1);
  460. startPage();
  461. List<HxpStock> list = hxpStockService.selectHxpStockList(hxpStock);
  462. return getDataTable(list);
  463. }
  464. /**--------------------------------------柜锁相关接口----------------------------------------*/
  465. /**
  466. * 查询机柜柜锁列表
  467. */
  468. @PostMapping("/queryCabinetLockList")
  469. @ApiOperation(value = "查询机柜柜锁列表")
  470. public R<List<AioCabinetLockVo>> queryCabinetLockList(@RequestBody AioCabinetLockVo aioCabinetLockVo) {
  471. aioCabinetLockVo.setSubId(getSubIdByTerminalNum());
  472. aioCabinetLockVo.setCabinetLock(getCabinetLock());
  473. List<AioCabinetLockVo> list = hxpCabinetService.queryCabinetLockList(aioCabinetLockVo);
  474. return R.ok(list);
  475. }
  476. /**
  477. * 柜锁开锁
  478. */
  479. @PostMapping("/openLock")
  480. @Log(title = "柜锁开锁", businessType = BusinessType.INSERT)
  481. @ApiOperation(value = "柜锁开锁")
  482. public R<CabinetV2Lock> openLock(@RequestBody @Valid AioCabinetLockVo aioCabinetLockVo) {
  483. if(LockTypeEnum.SYSTEM == aioCabinetLockVo.getLockType()){
  484. if(aioCabinetLockVo.getLockId() == null){
  485. return R.fail("柜锁参数不能为空!");
  486. }
  487. }else if(aioCabinetLockVo.getJoinId() == null){
  488. return R.fail("柜锁参数不能为空 !");
  489. }
  490. aioCabinetLockVo.setSubId(getSubIdByTerminalNum());
  491. CabinetV2Lock cabinetV2Lock = hxpCabinetService.openLock(aioCabinetLockVo);
  492. if(cabinetV2Lock.isSuccess()){
  493. return R.ok(cabinetV2Lock);
  494. }else {
  495. return R.fail(cabinetV2Lock, cabinetV2Lock.getMsg());
  496. }
  497. }
  498. /**
  499. * 柜锁关锁
  500. */
  501. @PostMapping("/closeLock")
  502. @Log(title = "柜锁关锁", businessType = BusinessType.UPDATE)
  503. @ApiOperation(value = "柜锁关锁")
  504. public R<CabinetV2Lock> closeLock(@RequestBody @Valid AioCabinetLockVo aioCabinetLockVo) {
  505. if(LockTypeEnum.SYSTEM == aioCabinetLockVo.getLockType()){
  506. if(aioCabinetLockVo.getLockId() == null){
  507. return R.fail("柜锁参数不能为空!");
  508. }
  509. }else if(aioCabinetLockVo.getJoinId() == null){
  510. return R.fail("柜锁参数不能为空 !");
  511. }
  512. if(aioCabinetLockVo.getLockLogId() == null){
  513. return R.fail("开锁ID不能为空 !");
  514. }
  515. aioCabinetLockVo.setSubId(getSubIdByTerminalNum());
  516. CabinetV2Lock cabinetV2Lock = hxpCabinetService.closeLock(aioCabinetLockVo);
  517. if(cabinetV2Lock.isSuccess()){
  518. return R.ok(cabinetV2Lock);
  519. }else {
  520. return R.fail(cabinetV2Lock, cabinetV2Lock.getMsg());
  521. }
  522. }
  523. /**--------------------------------------人脸验证----------------------------------------*/
  524. /**
  525. * 人脸身份验证
  526. */
  527. @PostMapping("/faceAuth")
  528. @ApiOperation(value = "人脸身份验证")
  529. public R<AioUserValidationVo> faceAuth(@RequestBody AioSubInfoVo aioSubInfoVo) {
  530. aioSubInfoVo.setSubId(getSubIdByTerminalNum());
  531. return R.ok(hxpUserecordService.faceAuth(aioSubInfoVo));
  532. }
  533. }