DiagnosisVersionInfoServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. package com.om.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.util.PageUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.obs.services.model.TemporarySignatureRequest;
  7. import com.om.entity.dto.*;
  8. import com.om.entity.po.*;
  9. import com.om.entity.vo.DiagnosisVersionSearchVO;
  10. import com.om.entity.vo.DiagnosisVersionVO;
  11. import com.om.entity.vo.DignosisPageVO;
  12. import com.om.exception.BadReqException;
  13. import com.om.mapper.DiagnosisVersionDescribeMapper;
  14. import com.om.mapper.DiagnosisVersionInfoMapper;
  15. import com.om.service.*;
  16. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  17. import com.om.utils.*;
  18. import io.swagger.v3.oas.annotations.parameters.RequestBody;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.apache.commons.lang.StringUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import org.springframework.web.bind.annotation.PathVariable;
  25. import javax.annotation.Resource;
  26. import java.time.ZoneOffset;
  27. import java.time.format.DateTimeFormatter;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. /**
  31. * <p>
  32. * 服务实现类
  33. * </p>
  34. *
  35. * @author bmmx
  36. * @since 2024-03-06
  37. */
  38. @Service
  39. @Slf4j
  40. public class DiagnosisVersionInfoServiceImpl extends ServiceImpl<DiagnosisVersionInfoMapper, DiagnosisVersionInfo> implements IDiagnosisVersionInfoService {
  41. @Resource
  42. IDiagnosisVersionDescribeService describeService;
  43. @Resource
  44. IBrandService brandService;
  45. @Resource
  46. IClientService clientService;
  47. @Resource
  48. IUserService userService;
  49. @Resource
  50. IDiagClientsService diagClientsService;
  51. @Resource
  52. private JwtUtils jwtUtils;
  53. @Resource
  54. private HuaweiObsUtil obsUtil;
  55. @Override
  56. @Transactional
  57. public Result add(DiagnosisVersionVO diagnosisVersionVO) {
  58. DiagnosisVersionInfo info = new DiagnosisVersionInfo();
  59. //客户端编号,需要取id,后面在进行设置
  60. String[] clientNums = diagnosisVersionVO.getClientNums();
  61. StringBuffer sb = new StringBuffer();
  62. for (int i = 0; i < clientNums.length; i++) {
  63. sb.append(clientNums[i]);
  64. if (clientNums.length != 1 && i != clientNums.length - 1){
  65. sb.append(",");
  66. }
  67. }
  68. //文件地址
  69. info.setFile(diagnosisVersionVO.getFileUrl());
  70. //文件大小
  71. info.setDiagnosisFileSize(diagnosisVersionVO.getDiagnosisFileSize());
  72. //品牌代码
  73. info.setBrandCode(diagnosisVersionVO.getBrandCode());
  74. info.setClientNumber(sb.toString());
  75. //诊断程序名称
  76. info.setDiagnosisName(diagnosisVersionVO.getDiagnosisName());
  77. //程序状态
  78. info.setStatus(0);
  79. //设置用户名
  80. info.setUsername(diagnosisVersionVO.getUsername());
  81. //版本号
  82. info.setVersion(diagnosisVersionVO.getVersion());
  83. //保存地址
  84. info.setSavePath(diagnosisVersionVO.getSavePath());
  85. info.setFileName(diagnosisVersionVO.getFileName());
  86. info.setLifecycle(0);
  87. //保存
  88. this.save(info);
  89. LambdaQueryWrapper<DiagnosisVersionInfo> queryWrapper = new LambdaQueryWrapper<>();
  90. queryWrapper.eq(DiagnosisVersionInfo::getId, info.getId());
  91. //保存后获取
  92. DiagnosisVersionInfo versionInfo = getOne(queryWrapper);
  93. log.info("==========={}=========", versionInfo);
  94. for (int i = 0; i < diagnosisVersionVO.getDescriptionList().length; i++) {
  95. DiagnosisVersionDescribe describe = new DiagnosisVersionDescribe();
  96. describe.setDiagnosisId(versionInfo.getId());
  97. describe.setDescription(diagnosisVersionVO.getDescriptionList()[i]);
  98. describe.setLanguage(diagnosisVersionVO.getLanguage()[i]);
  99. describeService.save(describe);
  100. }
  101. for (int i = 0; i < diagnosisVersionVO.getClientNums().length; i++) {
  102. DiagClients diagClients = new DiagClients();
  103. diagClients.setDiagId(versionInfo.getId());
  104. diagClients.setClientNum(diagnosisVersionVO.getClientNums()[i]);
  105. diagClientsService.save(diagClients);
  106. }
  107. return Result.ok();
  108. }
  109. @Override
  110. public Result downloadFile(Integer id) {
  111. DiagnosisVersionInfo diagnosisVersionInfo = this.getById(id);
  112. if (BeanUtil.isEmpty(diagnosisVersionInfo)) {
  113. throw new BadReqException("该诊断程序不存在");
  114. }
  115. String uploadUrl = obsUtil.getUploadUrl(diagnosisVersionInfo.getFileName(), diagnosisVersionInfo.getSavePath());
  116. return Result.ok(uploadUrl);
  117. }
  118. @Override
  119. public Result edit(DiagnosisVersionVO diagnosisVersionVO) {
  120. Integer diaId = diagnosisVersionVO.getId();
  121. DiagnosisVersionVO versionVO = getVO(diaId);
  122. BeanUtil.copyProperties(diagnosisVersionVO, versionVO);
  123. DiagnosisVersionInfo info = new DiagnosisVersionInfo();
  124. DiagnosisVersionInfo info2 = this.getById(diaId);//查询到copy过去
  125. BeanUtil.copyProperties(info2, info);
  126. BeanUtil.copyProperties(diagnosisVersionVO, info);
  127. log.info("----修改用户信息{}-----", info);
  128. LambdaQueryWrapper<DiagnosisVersionInfo> queryWrappeInfo = new LambdaQueryWrapper<>();
  129. queryWrappeInfo.eq(DiagnosisVersionInfo::getId, diaId);
  130. this.update(info, queryWrappeInfo);
  131. //客户端编号也要更改
  132. String[] clientNums = diagnosisVersionVO.getClientNums();
  133. LambdaQueryWrapper<DiagClients> queryWrapper = new LambdaQueryWrapper<>();
  134. queryWrapper.eq(DiagClients::getDiagId, diaId);
  135. //先删除
  136. diagClientsService.remove(queryWrapper);
  137. //在增加
  138. for (int i = 0; i < clientNums.length; i++) {
  139. DiagClients diagClients = new DiagClients();
  140. diagClients.setClientNum(clientNums[i]);
  141. diagClients.setDiagId(diaId);
  142. log.info("----修改客户端名称{}-----", diagClients);
  143. diagClientsService.save(diagClients);
  144. }
  145. log.info("----修改完成-----");
  146. return Result.ok();
  147. }
  148. @Override
  149. public DiagnosisVersionVO getVO(Integer id) {
  150. log.info("-------查询信息------");
  151. DiagnosisVersionInfo versionInfo = this.getById(id);
  152. DiagnosisVersionVO versionVO = new DiagnosisVersionVO();
  153. BeanUtil.copyProperties(versionInfo, versionVO);
  154. LambdaQueryWrapper<DiagClients> clientQueryWrapper = new LambdaQueryWrapper<>();
  155. clientQueryWrapper.eq(DiagClients::getDiagId, id);
  156. List<DiagClients> diagClients = diagClientsService.list(clientQueryWrapper);
  157. String[] s = new String[diagClients.size()];
  158. for (int i = 0; i < diagClients.size(); i++) {
  159. s[i] = diagClients.get(i).getClientNum();
  160. }
  161. versionVO.setClientNums(s);
  162. //语言和描述
  163. LambdaQueryWrapper<DiagnosisVersionDescribe> describeLambdaQueryWrapper = new LambdaQueryWrapper<>();
  164. describeLambdaQueryWrapper.eq(DiagnosisVersionDescribe::getDiagnosisId, id);
  165. List<DiagnosisVersionDescribe> describes = describeService.list(describeLambdaQueryWrapper);
  166. String[] l = new String[describes.size()];
  167. String[] d = new String[describes.size()];
  168. for (int i = 0; i < describes.size(); i++) {
  169. l[i] = describes.get(i).getLanguage();
  170. d[i] = describes.get(i).getDescription();
  171. }
  172. versionVO.setDescriptionList(d);
  173. versionVO.setLanguage(l);
  174. log.info("=====getByUserId={}======", versionVO);
  175. return versionVO;
  176. }
  177. @Override
  178. public Result getByUserId( Integer id) {
  179. DiagnosisVersionVO versionVO = this.getVO(id);
  180. return Result.ok(versionVO);
  181. }
  182. @Override
  183. public Result getPageList(Integer pageIndex,
  184. Integer pageSize,
  185. String username) {
  186. Page<DiagnosisVersionInfo> page = this.lambdaQuery()
  187. .like(StringUtils.isNotBlank(username), DiagnosisVersionInfo::getUsername, username)
  188. .orderByDesc(DiagnosisVersionInfo::getUpdateTime)
  189. .page(new Page<>(pageIndex, pageSize));
  190. //获取总的数据
  191. List<DiagnosisVersionInfo> diagLists = page.getRecords();
  192. List<DiagnosisVersionSearchVO> diagVOLists = new ArrayList<>();
  193. for (int i = 0; i < diagLists.size(); i++) {
  194. //然后取得客户端编号
  195. DiagnosisVersionInfo info = diagLists.get(i);
  196. //创建前端传输数据
  197. DiagnosisVersionSearchVO versionVO = new DiagnosisVersionSearchVO();
  198. BeanUtil.copyProperties(info, versionVO);
  199. Integer diagId = info.getId();
  200. LambdaQueryWrapper<DiagClients> queryWrapper = new LambdaQueryWrapper<>();
  201. queryWrapper.eq(DiagClients::getDiagId, diagId);
  202. List<DiagClients> diagClients = diagClientsService.list(queryWrapper);
  203. log.info("====diagClients={}", diagClients);
  204. String[] s = new String[diagClients.size()];
  205. for (int j = 0; j < diagClients.size(); j++) {
  206. s[j] = diagClients.get(j).getClientName();
  207. }
  208. //传入客户端num
  209. versionVO.setClientNames(s);
  210. //传输描述和语言集合
  211. LambdaQueryWrapper<DiagnosisVersionDescribe> describeQueryWrapper = new LambdaQueryWrapper<>();
  212. describeQueryWrapper.eq(DiagnosisVersionDescribe::getDiagnosisId, diagId);
  213. List<DiagnosisVersionDescribe> describeList = describeService.list(describeQueryWrapper);
  214. log.info("List<DiagnosisVersionDescribe> describeList ={}", describeList);
  215. String[] language = new String[describeList.size()];
  216. String[] description = new String[describeList.size()];
  217. for (int i1 = 0; i1 < describeList.size(); i1++) {
  218. DiagnosisVersionDescribe describe = describeList.get(i1);
  219. language[i1] = describe.getLanguage();
  220. description[i1] = describe.getDescription();
  221. }
  222. //根据品牌编号查询名称
  223. Brand brand = brandService.lambdaQuery()
  224. .eq(Brand::getBrandCode, info.getBrandCode())
  225. .one();
  226. if (BeanUtil.isEmpty(brand)){
  227. throw new BadReqException(info.getDiagnosisName()+"此诊断程序中品牌编号有误");
  228. }
  229. //传入客户端
  230. versionVO.setLanguage(language);
  231. versionVO.setDescriptionList(description);
  232. versionVO.setBrandName(brand.getBrandCn());
  233. diagVOLists.add(versionVO);
  234. }
  235. Page<DiagnosisVersionSearchVO> pageVO = new Page<>();
  236. BeanUtil.copyProperties(page, pageVO);
  237. pageVO.setRecords(diagVOLists);
  238. log.info("====={}=======", pageVO.getRecords());
  239. return Result.ok(pageVO);
  240. }
  241. @Override
  242. public Result release(Integer id) {
  243. DiagnosisVersionInfo info = this.getById(id);
  244. info.setStatus(1);
  245. LambdaQueryWrapper<DiagnosisVersionInfo> queryWrapper = new LambdaQueryWrapper<>();
  246. queryWrapper.eq(DiagnosisVersionInfo::getId, id);
  247. this.update(info, queryWrapper);
  248. return Result.ok();
  249. }
  250. @Override
  251. public Result repeal(Integer id) {
  252. DiagnosisVersionInfo info = this.getById(id);
  253. info.setStatus(2);
  254. LambdaQueryWrapper<DiagnosisVersionInfo> queryWrapper = new LambdaQueryWrapper<>();
  255. queryWrapper.eq(DiagnosisVersionInfo::getId, id);
  256. this.update(info, queryWrapper);
  257. return Result.ok();
  258. }
  259. /*
  260. 修改状态
  261. */
  262. @Override
  263. public Result upStatus(Integer id) {
  264. DiagnosisVersionInfo info = this.getById(id);
  265. info.setStatus(2);
  266. LambdaQueryWrapper<DiagnosisVersionInfo> queryWrapper = new LambdaQueryWrapper<>();
  267. queryWrapper.eq(DiagnosisVersionInfo::getId, id);
  268. this.update(info, queryWrapper);
  269. return Result.ok();
  270. }
  271. @Override
  272. public Result diagnosisVersionInfoUpdate(AppDiagVersionUpdateDTO dto) {
  273. if (BeanUtil.isEmpty(dto)) {
  274. return Result.fail("未获取到数据").result(ResultCode.NO_DATA);
  275. }
  276. String language = dto.getLanguage();
  277. List<AppBrandInfo> brandInfo = dto.getBrandInfo();
  278. String guid = dto.getGuid();
  279. GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
  280. String clientNum = guidDTO.getClientNum();
  281. if (brandInfo.isEmpty()) {
  282. throw new BadReqException("该诊断程序不存在");
  283. }
  284. List<VehicleDates> voList = new ArrayList<>();
  285. for (AppBrandInfo vehicleDates : brandInfo) {
  286. String version = vehicleDates.getVersion();
  287. DiagnosisVersionInfo diagnosisVersionInfo = this.lambdaQuery()
  288. .eq(DiagnosisVersionInfo::getBrandCode, vehicleDates.getBrandCode())
  289. .apply("CONCAT(',', client_number, ',') LIKE {0}", "%,"+clientNum+",%")
  290. .gt(DiagnosisVersionInfo::getVersion, version)
  291. .one();
  292. if (BeanUtil.isEmpty(diagnosisVersionInfo)) {
  293. return Result.fail("未获取到数据").result(ResultCode.NO_DATA);
  294. }
  295. //根据品牌id查询品牌
  296. Brand brand = brandService.lambdaQuery()
  297. .eq(Brand::getBrandCode,diagnosisVersionInfo.getBrandCode())
  298. .one();
  299. if (BeanUtil.isEmpty(brand)) {
  300. throw new BadReqException("品牌不存在");
  301. }
  302. //根据语言获取对应描述
  303. DiagnosisVersionDescribe diagnosisVersionDescribe = describeService.lambdaQuery()
  304. .eq(DiagnosisVersionDescribe::getLanguage, language)
  305. .eq(DiagnosisVersionDescribe::getDiagnosisId, diagnosisVersionInfo.getId())
  306. .one();
  307. if (BeanUtil.isEmpty(diagnosisVersionDescribe)) {
  308. throw new BadReqException("该描述不存在");
  309. }
  310. //获取下载链接
  311. String uploadUrl = obsUtil.getUploadUrl(diagnosisVersionInfo.getFileName(), "program");
  312. VehicleDates vehicleDates1 = BeanUtil.copyProperties(diagnosisVersionInfo, VehicleDates.class);
  313. vehicleDates1.setUrl(uploadUrl);
  314. vehicleDates1.setVersion(diagnosisVersionInfo.getVersion());
  315. double v = Double.valueOf(diagnosisVersionInfo.getDiagnosisFileSize()) * 1024 * 1024;
  316. vehicleDates1.setFileSize((long) v);
  317. vehicleDates1.setBrandCn(brand.getBrandCn());
  318. vehicleDates1.setBrandEn(brand.getBrandEn());
  319. vehicleDates1.setDescription(diagnosisVersionDescribe.getDescription());
  320. vehicleDates1.setFileName(diagnosisVersionInfo.getFileName());
  321. vehicleDates1.setPath(diagnosisVersionInfo.getSavePath());
  322. vehicleDates1.setCreateTime(diagnosisVersionInfo.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
  323. voList.add(vehicleDates1);
  324. }
  325. return Result.ok(voList);
  326. }
  327. @Override
  328. public Result getDesc(DiagnosisVersionVO diagnosisVersionVO) {
  329. return null;
  330. }
  331. }