Ei kuvausta

fix_meat_yield_encoding.py 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. # -*- coding: utf-8 -*-
  2. """Fix UTF-8 Chinese in meat yield analysis files."""
  3. import os
  4. ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  5. def write(rel_path, content):
  6. path = os.path.join(ROOT, rel_path.replace("/", os.sep))
  7. os.makedirs(os.path.dirname(path), exist_ok=True)
  8. with open(path, "w", encoding="utf-8", newline="\n") as f:
  9. f.write(content)
  10. print("fixed:", rel_path)
  11. write(
  12. "ruoyi-admin/src/main/java/com/ruoyi/web/base/domain/vo/MeatYieldBatchVo.java",
  13. """package com.ruoyi.web.base.domain.vo;
  14. import com.fasterxml.jackson.annotation.JsonFormat;
  15. import lombok.Data;
  16. import java.math.BigDecimal;
  17. import java.util.Date;
  18. /**
  19. * \u6279\u6b21\u51fa\u8089\u7387\u6c47\u603b
  20. */
  21. @Data
  22. public class MeatYieldBatchVo {
  23. /** \u5165\u573a\u6279\u6b21ID */
  24. private Long entranceBatchId;
  25. /** \u5165\u573a\u6279\u6b21\u53f7\uff08\u6279\u6b21ID\u5b57\u7b26\u4e32\uff09 */
  26. private String entranceBatchNo;
  27. /** \u6279\u6b21\u5165\u573a\u65f6\u95f4 */
  28. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  29. private Date entranceTime;
  30. /** \u6bdb\u91cd\uff08\u5165\u573a\u79f0\u91cd\u5408\u8ba1\uff0ckg\uff09 */
  31. private BigDecimal grossWeight;
  32. /** \u51c0\u91cd\uff08\u5e38\u89c4\u751f\u4ea7\u79f0\u91cd\u5408\u8ba1\uff0ckg\uff09 */
  33. private BigDecimal netWeight;
  34. /** \u5e73\u5747\u51fa\u8089\u7387\uff08%\uff09 */
  35. private BigDecimal avgMeatYield;
  36. }
  37. """,
  38. )
  39. write(
  40. "ruoyi-admin/src/main/java/com/ruoyi/web/base/domain/vo/MeatYieldDetailVo.java",
  41. """package com.ruoyi.web.base.domain.vo;
  42. import lombok.Data;
  43. import java.math.BigDecimal;
  44. /**
  45. * \u4e2a\u4f53\u51fa\u8089\u7387\u660e\u7ec6
  46. */
  47. @Data
  48. public class MeatYieldDetailVo {
  49. /** \u4e2a\u4f53\u7f16\u53f7 */
  50. private String individualNo;
  51. /** \u6bdb\u91cd\uff08\u5165\u573a\u79f0\u91cd\uff0ckg\uff09 */
  52. private BigDecimal grossWeight;
  53. /** \u51c0\u91cd\uff08\u5e38\u89c4\u751f\u4ea7\u79f0\u91cd\u5408\u8ba1\uff0ckg\uff09 */
  54. private BigDecimal netWeight;
  55. /** \u51fa\u8089\u7387\uff08%\uff09 */
  56. private BigDecimal meatYield;
  57. }
  58. """,
  59. )
  60. write(
  61. "ruoyi-admin/src/main/java/com/ruoyi/web/base/domain/param/MeatYieldBatchQuery.java",
  62. """package com.ruoyi.web.base.domain.param;
  63. import lombok.Data;
  64. /**
  65. * \u6279\u6b21\u51fa\u8089\u7387\u5217\u8868\u67e5\u8be2\u53c2\u6570
  66. */
  67. @Data
  68. public class MeatYieldBatchQuery {
  69. private String orgId;
  70. /** \u5165\u573a\u5f00\u59cb\u65f6\u95f4 yyyy-MM-dd HH:mm:ss */
  71. private String beginEntranceTime;
  72. /** \u5165\u573a\u7ed3\u675f\u65f6\u95f4 yyyy-MM-dd HH:mm:ss */
  73. private String endEntranceTime;
  74. }
  75. """,
  76. )
  77. write(
  78. "ruoyi-admin/src/main/java/com/ruoyi/web/base/mapper/MeatYieldAnalysisMapper.java",
  79. """package com.ruoyi.web.base.mapper;
  80. import com.ruoyi.web.base.domain.param.MeatYieldBatchQuery;
  81. import com.ruoyi.web.base.domain.vo.MeatYieldBatchVo;
  82. import com.ruoyi.web.base.domain.vo.MeatYieldDetailVo;
  83. import org.apache.ibatis.annotations.Param;
  84. import java.util.List;
  85. /**
  86. * \u51fa\u8089\u7387\u5206\u6790 Mapper
  87. */
  88. public interface MeatYieldAnalysisMapper {
  89. List<MeatYieldBatchVo> selectBatchList(MeatYieldBatchQuery query);
  90. List<MeatYieldDetailVo> selectDetailList(@Param("orgId") String orgId, @Param("entranceBatchId") Long entranceBatchId);
  91. }
  92. """,
  93. )
  94. write(
  95. "ruoyi-admin/src/main/java/com/ruoyi/web/base/service/IMeatYieldAnalysisService.java",
  96. """package com.ruoyi.web.base.service;
  97. import com.ruoyi.web.base.domain.param.MeatYieldBatchQuery;
  98. import com.ruoyi.web.base.domain.vo.MeatYieldBatchVo;
  99. import com.ruoyi.web.base.domain.vo.MeatYieldDetailVo;
  100. import java.util.List;
  101. /**
  102. * \u51fa\u8089\u7387\u5206\u6790 Service
  103. */
  104. public interface IMeatYieldAnalysisService {
  105. List<MeatYieldBatchVo> selectBatchList(MeatYieldBatchQuery query);
  106. List<MeatYieldDetailVo> selectDetailList(String orgId, Long entranceBatchId);
  107. }
  108. """,
  109. )
  110. write(
  111. "ruoyi-admin/src/main/java/com/ruoyi/web/base/controller/MeatYieldAnalysisController.java",
  112. """package com.ruoyi.web.base.controller;
  113. import com.ruoyi.common.core.controller.BaseController;
  114. import com.ruoyi.common.core.page.TableDataInfo;
  115. import com.ruoyi.framework.web.service.TokenService;
  116. import com.ruoyi.web.base.domain.param.MeatYieldBatchQuery;
  117. import com.ruoyi.web.base.domain.vo.MeatYieldDetailVo;
  118. import com.ruoyi.web.base.service.IMeatYieldAnalysisService;
  119. import io.swagger.annotations.ApiOperation;
  120. import org.springframework.beans.factory.annotation.Autowired;
  121. import org.springframework.web.bind.annotation.GetMapping;
  122. import org.springframework.web.bind.annotation.RequestMapping;
  123. import org.springframework.web.bind.annotation.RestController;
  124. import javax.servlet.http.HttpServletRequest;
  125. import java.util.List;
  126. /**
  127. * \u51fa\u8089\u7387\u5206\u6790
  128. */
  129. @RestController
  130. @RequestMapping("/meat-yield-analysis")
  131. public class MeatYieldAnalysisController extends BaseController {
  132. @Autowired
  133. private IMeatYieldAnalysisService meatYieldAnalysisService;
  134. @Autowired
  135. private TokenService tokenService;
  136. @ApiOperation("\u6279\u6b21\u51fa\u8089\u7387\u5217\u8868\uff08\u6309\u5165\u573a\u65f6\u95f4\u8303\u56f4\uff09")
  137. @GetMapping("/batch-list")
  138. public TableDataInfo batchList(MeatYieldBatchQuery query, HttpServletRequest request) {
  139. query.setOrgId(tokenService.getLoginOrgId(request));
  140. startPage();
  141. return getDataTable(meatYieldAnalysisService.selectBatchList(query));
  142. }
  143. @ApiOperation("\u6279\u6b21\u51fa\u8089\u7387\u4e2a\u4f53\u660e\u7ec6\uff08\u6309\u5165\u573a\u6279\u6b21ID\uff09")
  144. @GetMapping("/detail-list")
  145. public TableDataInfo detailList(Long entranceBatchId, HttpServletRequest request) {
  146. String orgId = tokenService.getLoginOrgId(request);
  147. List<MeatYieldDetailVo> list = meatYieldAnalysisService.selectDetailList(orgId, entranceBatchId);
  148. TableDataInfo data = getDataTable(list);
  149. data.setTotal(list.size());
  150. return data;
  151. }
  152. }
  153. """,
  154. )
  155. write(
  156. "ruoyi-ui/src/api/production/meatYieldAnalysis.js",
  157. """import request from '@/utils/request'
  158. /** \u6279\u6b21\u51fa\u8089\u7387\u5217\u8868\uff08\u5165\u573a\u65f6\u95f4\u8303\u56f4\uff09 */
  159. export function listMeatYieldBatch(query) {
  160. return request({
  161. url: '/meat-yield-analysis/batch-list',
  162. method: 'get',
  163. params: query
  164. })
  165. }
  166. /** \u6279\u6b21\u4e2a\u4f53\u51fa\u8089\u7387\u660e\u7ec6\uff08\u5165\u573a\u6279\u6b21ID\uff09 */
  167. export function listMeatYieldDetail(query) {
  168. return request({
  169. url: '/meat-yield-analysis/detail-list',
  170. method: 'get',
  171. params: query
  172. })
  173. }
  174. """,
  175. )
  176. write(
  177. "sql/meat_yield_analysis_menu.sql",
  178. """-- \u51fa\u8089\u7387\u5206\u6790\u83dc\u5355\uff08\u7236\u83dc\u5355\uff1a\u751f\u4ea7\u7ba1\u7406 2176\uff09
  179. INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
  180. SELECT '\u51fa\u8089\u7387\u5206\u6790', 2176, 43, 'meatYieldAnalysis', 'production/meatYieldAnalysis/index', NULL, '', 1, 0, 'C', '0', '0', 'production:meatYieldAnalysis:list', 'chart', 'admin', NOW(), '', NULL, ''
  181. FROM DUAL
  182. WHERE NOT EXISTS (
  183. SELECT 1 FROM `sys_menu` WHERE `path` = 'meatYieldAnalysis' AND `parent_id` = 2176
  184. );
  185. """,
  186. )
  187. write(
  188. "sql/production_white_strip_regular_alter_individual_no.sql",
  189. """-- \u767d\u6761\u5e38\u89c4\u751f\u4ea7\u8868\u589e\u52a0\u4e2a\u4f53\u7f16\u53f7\u5b57\u6bb5\uff08\u51fa\u8089\u7387\u5206\u6790\u5173\u8054\u7528\uff09
  190. ALTER TABLE `production_white_strip_regular`
  191. ADD COLUMN `individual_no` varchar(64) NULL DEFAULT NULL COMMENT '\u4e2a\u4f53\u7f16\u53f7' AFTER `pig_batch`;
  192. CREATE INDEX `idx_pig_batch_individual_no` ON `production_white_strip_regular` (`pig_batch`, `individual_no`);
  193. """,
  194. )
  195. # Fix mapper XML comment only
  196. mapper_path = os.path.join(ROOT, "ruoyi-admin/src/main/resources/mapper/base/MeatYieldAnalysisMapper.xml")
  197. with open(mapper_path, "r", encoding="utf-8", errors="replace") as f:
  198. xml = f.read()
  199. bad_comment = "<!-- \u4e2a\u4f53\u51c0\u91cd\uff1a\u6bcf\u5934\u732a\u4e24\u6761\u767d\u6761\u8bb0\u5f55 weight \u6c42\u548c -->"
  200. # replace first garbled comment line after resultMap
  201. import re
  202. xml = re.sub(
  203. r"<!--[^>]*-->\s*<sql id=\"netWeightSubQuery\">",
  204. bad_comment + "\n <sql id=\"netWeightSubQuery\">",
  205. xml,
  206. count=1,
  207. )
  208. with open(mapper_path, "w", encoding="utf-8", newline="\n") as f:
  209. f.write(xml)
  210. print("fixed:", "ruoyi-admin/src/main/resources/mapper/base/MeatYieldAnalysisMapper.xml")
  211. print("done")