SikuController.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package com.malk.siku.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.malk.server.common.McR;
  4. import com.malk.siku.service.SikuService;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.core.io.Resource;
  9. import org.springframework.core.io.UrlResource;
  10. import org.springframework.http.HttpHeaders;
  11. import org.springframework.http.MediaType;
  12. import org.springframework.http.ResponseEntity;
  13. import org.springframework.web.bind.annotation.*;
  14. import java.io.IOException;
  15. import java.nio.file.Files;
  16. import java.nio.file.Path;
  17. import java.nio.file.Paths;
  18. import java.util.Map;
  19. @Slf4j
  20. @RestController
  21. @RequestMapping()
  22. public class SikuController {
  23. @Autowired
  24. private SikuService sikuService;
  25. @Value(value = "${mk.downloadFilePath}")
  26. private String fileStoragePath;
  27. //保存每刻往来单位
  28. @PostMapping("/saveTradingPartner")
  29. public McR saveTradingPartner(@RequestBody Map map) {
  30. return sikuService.saveTradingPartner(map);
  31. }
  32. /**
  33. * 保存云票客户
  34. * @param map
  35. * @return
  36. */
  37. @PostMapping("/saveYpClient")
  38. public McR saveYpClient(@RequestBody Map map){
  39. return sikuService.saveYpClient(map);
  40. }
  41. /**
  42. * 开票申请单导入和更新
  43. * @param map
  44. * @return
  45. */
  46. @PostMapping("/saveYpApplication")
  47. public McR saveYpApplication(@RequestBody Map map){
  48. return sikuService.saveYpApplication(map);
  49. }
  50. /**
  51. * 报销单导入(采购需求&结算)
  52. * @param map
  53. * @return
  54. */
  55. @PostMapping("/saveBxReimbursement")
  56. public McR saveBxReimbursement(@RequestBody Map map){
  57. return sikuService.saveBxReimbursement(map);
  58. }
  59. /**
  60. * 报销单导入2(直接采购结算单)
  61. * @param map
  62. * @return
  63. */
  64. @PostMapping("/saveBxReimbursement2")
  65. public McR saveBxReimbursement2(@RequestBody Map map){
  66. return sikuService.saveBxReimbursement2(map);
  67. }
  68. /**
  69. * 预付退回导入
  70. * @param map
  71. * @return
  72. */
  73. @PostMapping("/saveRepayment")
  74. public McR saveRepayment(@RequestBody Map map){
  75. return sikuService.saveRepayment(map);
  76. }
  77. /**
  78. * 采购单可用预算校验-停用
  79. * @param map
  80. * @return
  81. */
  82. /*@PostMapping("/checkBudgetAmt")
  83. public McR checkBudgetAmt(@RequestBody Map map){
  84. return sikuService.checkBudgetAmt(map);
  85. }*/
  86. //每刻云票收款核销回调
  87. @PostMapping("/VERIFICATION_AR/callback")
  88. public McR callback(@RequestBody Map map){
  89. log.info("每刻云票收款核销回调:{}", JSONObject.toJSONString(map));
  90. sikuService.invoiceWriteBack(map);
  91. return McR.success();
  92. }
  93. //每刻云票应收单回调(开票成功)
  94. @PostMapping("/RECEIVABLE_AR/callback")
  95. public McR callback9(@RequestBody Map map){
  96. log.info("每刻云票应收单完成回调:{}",JSONObject.toJSONString(map));
  97. sikuService.invoiceWriteBack9(map);
  98. return McR.success();
  99. }
  100. //每刻云票开票申请单回调(开票失败)
  101. @PostMapping("/INVOICE_APPLICATION_AR/callback")
  102. public McR callback2(@RequestBody Map map){
  103. log.info("每刻云票开票申请单回调:{}",JSONObject.toJSONString(map));
  104. sikuService.invoiceWriteBack2(map);
  105. return McR.success();
  106. }
  107. //每刻报销报销单完成回调
  108. @PostMapping("/reimbursement/callback")
  109. public McR callback3(@RequestBody Map map){
  110. log.info("每刻报销报销单完成回调:{}", JSONObject.toJSONString(map));
  111. sikuService.invoiceWriteBack3(map);
  112. return McR.success();
  113. }
  114. //每刻报销付款单完成回调
  115. @PostMapping("/pay/callback")
  116. public McR callback4(@RequestBody Map map){
  117. log.info("每刻报销付款单完成回调:{}", JSONObject.toJSONString(map));
  118. sikuService.invoiceWriteBack4(map);
  119. return McR.success();
  120. }
  121. //每刻报销预付退回完成回调
  122. @PostMapping("/repay/callback")
  123. public McR callback5(@RequestBody Map map){
  124. log.info("每刻报销预付退回完成回调:{}", JSONObject.toJSONString(map));
  125. sikuService.invoiceWriteBack5(map);
  126. return McR.success();
  127. }
  128. //每刻报销借款单完成回调(押金("是否项目相关"为【是】) 、借款单(项目))
  129. @PostMapping("/loan/callback")
  130. public McR callback6(@RequestBody Map map){
  131. log.info("每刻报销借款单完成回调:{}", JSONObject.toJSONString(map));
  132. sikuService.invoiceWriteBack6(map);
  133. return McR.success();
  134. }
  135. //每刻报销还款单完成回调
  136. @PostMapping("/repayment/callback")
  137. public McR callback7(@RequestBody Map map){
  138. log.info("每刻报销还款单完成回调:{}", JSONObject.toJSONString(map));
  139. sikuService.invoiceWriteBack7(map);
  140. return McR.success();
  141. }
  142. //每刻报销费用报销单完成回调(项目报销单(个人)、项目差旅报销单、打车(企业支付)("是否有项目"为【是】))
  143. @PostMapping("/reimbursement2/callback")
  144. public McR callback8(@RequestBody Map map){
  145. log.info("每刻报销费用报销单完成回调:{}", JSONObject.toJSONString(map));
  146. sikuService.invoiceWriteBack8(map);
  147. return McR.success();
  148. }
  149. //每刻预算冻结/释放
  150. @PostMapping("/updateBudget")
  151. public McR updateBudget(@RequestBody Map map){
  152. sikuService.updateBudget(map);
  153. return McR.success();
  154. }
  155. //创建/更新企业滴滴项目
  156. @PostMapping("/ddProject")
  157. public McR ddProject(@RequestBody Map map){
  158. return sikuService.ddProject(map);
  159. }
  160. @GetMapping("/files/{fileId}")
  161. public ResponseEntity<Resource> getFileResource(
  162. @PathVariable String fileId,
  163. @RequestParam(defaultValue = "download") String option) throws IOException {
  164. // 根据fileId获取实际文件路径,这里简化处理,实际可能需要从数据库查询
  165. Path filePath = Paths.get(fileStoragePath).resolve(fileId).normalize();
  166. // 检查文件是否存在
  167. if (!Files.exists(filePath)) {
  168. return ResponseEntity.notFound().build();
  169. }
  170. // 创建Resource对象
  171. Resource resource = new UrlResource(filePath.toUri());
  172. // 根据选项设置响应头
  173. HttpHeaders headers = new HttpHeaders();
  174. if ("preview".equalsIgnoreCase(option)) {
  175. // 预览模式 - 尝试确定内容类型
  176. String contentType = Files.probeContentType(filePath);
  177. // 强制修正 PDF 的 Content-Type
  178. if (filePath.toString().toLowerCase().endsWith(".pdf")) {
  179. contentType = "application/pdf";
  180. } else if (contentType == null) {
  181. contentType = "application/octet-stream";
  182. }
  183. headers.setContentType(MediaType.parseMediaType(contentType));
  184. headers.add("Content-Disposition", "inline; filename=\"" + resource.getFilename() + "\"");
  185. headers.add("X-Content-Type-Options", "nosniff"); // 防止浏览器忽略 Content-Type
  186. } else {
  187. // 下载模式 - 默认处理
  188. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
  189. headers.add("Content-Disposition", "attachment; filename=\"" + resource.getFilename() + "\"");
  190. }
  191. return ResponseEntity.ok()
  192. .headers(headers)
  193. .contentLength(resource.contentLength())
  194. .body(resource);
  195. }
  196. }