{"id":119445,"date":"2026-10-29T17:24:49","date_gmt":"2026-10-29T09:24:49","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/119445.html"},"modified":"2026-10-29T17:24:49","modified_gmt":"2026-10-29T09:24:49","slug":"%e7%a6%bb%e6%95%a3%e5%88%b6%e9%80%a0%e7%b3%bb%e7%bb%9f%e7%9a%84%e6%95%b0%e6%8d%ae%e5%bb%ba%e6%a8%a1%ef%bc%9a%e4%b8%ba%e4%bb%80%e4%b9%88%e6%b5%81%e7%a8%8b%e6%a8%a1%e5%9e%8b%e5%a5%97%e4%b8%8d%e4%b8%8a","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/119445.html","title":{"rendered":"\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4"},"content":{"rendered":"<h3>\u4e00\u3001\u5148\u8bf4\u7ed3\u8bba&#xff1a;\u5206\u5c94\u53d1\u751f\u5728\u7b2c\u4e00\u5f20\u8868<\/h3>\n<p>\u505a\u8fc7\u6d41\u7a0b\u884c\u4e1a\u7cfb\u7edf\u7684\u4eba\u8f6c\u5230\u79bb\u6563\u5236\u9020&#xff0c;\u6700\u5bb9\u6613\u8e29\u7684\u5751\u662f\u300c\u4ee5\u4e3a\u53ea\u662f\u5b57\u6bb5\u4e0d\u540c\u300d\u3002<\/p>\n<p>\u771f\u6b63\u4e0d\u540c\u7684\u662f\u4e3b\u5bf9\u8c61\u3002<\/p>\n<p>\u6d41\u7a0b ERP \u7684\u4e3b\u5bf9\u8c61\u662f\u51ed\u8bc1&#xff08;voucher&#xff09;\u4e0e\u7269\u6599&#xff08;material&#xff09;&#xff1a;\u4e1a\u52a1\u53d1\u751f \u2192 \u51ed\u8bc1&#xff1b;\u7269\u6599\u79fb\u52a8 \u2192 \u5e93\u5b58\u4e8b\u52a1\u3002\u751f\u4ea7\u6267\u884c\u88ab\u538b\u7f29\u6210\u300c\u751f\u4ea7\u8ba2\u5355 &#043; \u6295\u6599\/\u4ea7\u51fa\u300d\u4e24\u4e2a\u52a8\u4f5c\u3002<\/p>\n<p>\u79bb\u6563\u8f66\u95f4\u7684\u4e3b\u5bf9\u8c61\u662f\u5de5\u5355\u4e0e\u5de5\u5355\u5de5\u5e8f&#xff1a;\u4e00\u5f20\u5de5\u5355 &#061; \u4e00\u4e2a\u4ea7\u54c1 &#043; \u4e00\u4e32\u5de5\u6bb5 &#043; \u4e00\u4e2a\u6570\u91cf&#xff1b;\u6267\u884c\u843d\u5728\u300c\u67d0\u9053\u5de5\u5e8f\u8c01\u5728\u4ec0\u4e48\u65f6\u5019\u505a\u5b8c\u4e86\u51e0\u4ef6\u300d\u3002<\/p>\n<p>\u8fd9\u4e0d\u662f\u5b57\u6bb5\u5dee\u5f02&#xff0c;\u662f\u4e24\u79cd\u8bb0\u8d26\u5355\u4f4d\u3002\u8bb0\u8d26\u5355\u4f4d\u4e0d\u540c&#xff0c;\u540e\u9762\u6240\u6709\u7d22\u5f15\u3001\u7ea6\u675f\u3001\u72b6\u6001\u673a\u3001\u7edf\u8ba1\u53e3\u5f84\u5168\u90fd\u8ddf\u7740\u4e0d\u540c\u3002<img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261029092447-6ae310dfd46e1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u4e0b\u9762\u6309\u8868\u9010\u5c42\u62c6&#xff0c;\u6700\u540e\u7ed9\u4e09\u6761\u8fc1\u79fb\u8e29\u5751\u548c\u4e00\u7ec4\u6027\u80fd\u6ce8\u610f\u3002<\/p>\n<h3>\u4e8c\u3001\u5de5\u5355&#xff1a;\u6570\u91cf\u5fc5\u987b\u662f\u300c\u4ef6\u300d&#xff0c;\u4e14\u5fc5\u987b\u6765\u81ea\u8ba2\u5355<\/h3>\n<p>\u6d41\u7a0b\u7cfb\u7edf\u7684\u6570\u91cf\u51e0\u4e4e\u90fd\u662f numeric(18,3) \u8fd9\u6837\u7684\u6d6e\u70b9&#xff0c;\u56e0\u4e3a\u6599\u662f\u53ef\u79f0\u7684\u3002<\/p>\n<p>\u79bb\u6563\u7684\u6570\u91cf\u8981\u7ed1\u4ef6&#xff1a;<\/p>\n<p><span class=\"token keyword\">create<\/span> <span class=\"token keyword\">table<\/span> work_orders <span class=\"token punctuation\">(<\/span><br \/>\n  id              uuid <span class=\"token keyword\">primary<\/span> <span class=\"token keyword\">key<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  tenant_id       uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  order_id        uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span>                    <span class=\"token comment\">&#8212; \u5fc5\u987b\u6765\u81ea\u5ba2\u6237\u8ba2\u5355<\/span><br \/>\n  order_number    <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">50<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span>             <span class=\"token comment\">&#8212; \u5de5\u5355\u53f7&#xff08;\u4e1a\u52a1\u4e3b\u952e&#xff09;<\/span><br \/>\n  part_no         <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>                     <span class=\"token comment\">&#8212; \u4ef6\u53f7<\/span><br \/>\n  product_name    <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">200<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  quantity        <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">check<\/span> <span class=\"token punctuation\">(<\/span>quantity <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  material        <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  length          <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  width           <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  height          <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token keyword\">status<\/span>          <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token string\">&#039;pending&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  created_at      timestamptz <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token keyword\">unique<\/span> <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> order_number<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">index<\/span> idx_wo_tenant_status <span class=\"token keyword\">on<\/span> work_orders <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">status<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">index<\/span> idx_wo_order <span class=\"token keyword\">on<\/span> work_orders <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> order_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u4e24\u4e2a\u7ea6\u675f\u503c\u5f97\u5355\u72ec\u8bb2\u3002<\/p>\n<p>order_id not null&#xff1a;\u5de5\u5355\u4e0d\u80fd\u51ed\u7a7a\u5efa\u3002\u8fd9\u6761\u5728\u6570\u636e\u5e93\u5c42\u5c31\u8981\u5361\u4f4f&#xff0c;\u56e0\u4e3a\u4e00\u65e6\u5141\u8bb8\u81ea\u7531\u5efa\u5de5\u5355&#xff0c;\u8ba2\u5355\u2192\u5de5\u5355\u7684\u8ffd\u6eaf\u94fe\u5728\u7b2c\u4e00\u73af\u5c31\u65ad\u4e86&#xff0c;\u4e4b\u540e\u7684\u62a5\u5de5\u3001\u5916\u534f\u3001\u5bf9\u8d26\u5168\u90e8\u60ac\u7a7a\u3002<\/p>\n<p>unique (tenant_id, order_number)&#xff1a;\u5355\u53f7\u5728\u79df\u6237\u5185\u552f\u4e00\u3002\u8de8\u79df\u6237\u53ef\u4ee5\u91cd\u590d&#xff08;A \u5382\u548c B \u5382\u90fd\u53ef\u80fd\u6709 WO20261027001&#xff09;&#xff0c;\u6240\u4ee5\u552f\u4e00\u952e\u5fc5\u987b\u5e26 tenant_id \u524d\u7f00\u2014\u2014\u8fd9\u662f\u591a\u79df\u6237\u7cfb\u7edf\u6700\u5e38\u89c1\u7684\u4e00\u5904\u758f\u6f0f\u3002<\/p>\n<p>\u6570\u91cf\u4e3a\u4ec0\u4e48\u4e0d\u7528\u6d6e\u70b9&#xff1f;\u56e0\u4e3a\u4e0b\u6e38\u4e00\u6574\u5957\u8ba1\u7b97\u90fd\u6302\u5728\u300c\u4ef6\u300d\u4e0a&#xff1a;<\/p>\n<ul>\n<li>\u62a5\u5de5\u5b8c\u6210\u6570\u91cf\u7d2f\u52a0&#xff0c;\u5fc5\u987b\u662f\u4ef6<\/li>\n<li>\u5de5\u5e8f\u8ba1\u5212\u5de5\u65f6\u662f\u300c\u5c0f\u65f6\/\u4ef6\u300d&#xff0c;\u4e58\u6570\u91cf\u624d\u662f\u603b\u5de5\u65f6<\/li>\n<li>\u6210\u672c\u91cc\u7684\u52a0\u5de5\u8d39\u6309\u4ef6\u6570\u53e3\u5f84\u653e\u5927<\/li>\n<\/ul>\n<p>\u4e00\u65e6\u5141\u8bb8 0.5 \u4ef6&#xff0c;\u62a5\u5de5\u8bb0\u5f55\u4f1a\u51fa\u73b0\u534a\u4ef6\u5b8c\u5de5&#xff0c;\u5e93\u5b58\u548c\u6210\u672c\u5168\u90e8\u5e26\u96f6\u5934&#xff0c;\u5bf9\u8d26\u65f6\u8c01\u90fd\u89e3\u91ca\u4e0d\u6e05\u3002<\/p>\n<h3>\u4e09\u3001\u5de5\u5e8f&#xff1a;\u4e0d\u662f\u5de5\u827a\u8def\u7ebf\u6a21\u677f&#xff0c;\u662f\u8fd9\u5f20\u5355\u5b9e\u9645\u8981\u8d70\u7684\u8def\u5f84<\/h3>\n<p>\u6d41\u7a0b\u7cfb\u7edf\u7684\u5de5\u5e8f\u5efa\u6a21\u662f\u300c\u5de5\u827a\u8def\u7ebf\u6a21\u677f&#xff08;routing&#xff09;&#043; \u53c2\u6570\u6bb5\u300d&#xff1a;\u4e00\u4e2a\u4ea7\u54c1\u7ed1\u4e00\u6761\u8def\u7ebf&#xff0c;\u8def\u7ebf\u91cc\u7684\u6bb5\u662f\u62bd\u8c61\u7684\u3002<\/p>\n<p>\u79bb\u6563\u5fc5\u987b\u843d\u5230\u5177\u4f53\u5de5\u5355&#xff1a;<\/p>\n<p><span class=\"token keyword\">create<\/span> <span class=\"token keyword\">table<\/span> work_order_process <span class=\"token punctuation\">(<\/span><br \/>\n  id             uuid <span class=\"token keyword\">primary<\/span> <span class=\"token keyword\">key<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  tenant_id      uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  work_order_id  uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">references<\/span> work_orders<span class=\"token punctuation\">(<\/span>id<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">on<\/span> <span class=\"token keyword\">delete<\/span> <span class=\"token keyword\">cascade<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  seq            <span class=\"token keyword\">int<\/span>  <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span>                  <span class=\"token comment\">&#8212; \u5de5\u6bb5\u987a\u5e8f&#xff0c;\u4ece 1 \u5f00\u59cb<\/span><br \/>\n  process_id     uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span>                  <span class=\"token comment\">&#8212; \u5de5\u6bb5\u5b9a\u4e49&#xff08;\u542b\u5c0f\u65f6\u8d39\u7387&#xff09;<\/span><br \/>\n  process_name   <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  planned_hours  <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>                  <span class=\"token comment\">&#8212; \u8ba1\u5212\u5de5\u65f6&#xff08;\u5c0f\u65f6\/\u4ef6&#xff09;<\/span><br \/>\n  <span class=\"token keyword\">status<\/span>         <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token string\">&#039;pending&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token keyword\">unique<\/span> <span class=\"token punctuation\">(<\/span>work_order_id<span class=\"token punctuation\">,<\/span> seq<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">index<\/span> idx_wop_wo <span class=\"token keyword\">on<\/span> work_order_process <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> work_order_id<span class=\"token punctuation\">,<\/span> seq<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>unique (work_order_id, seq) \u8fd9\u6761\u7ea6\u675f\u8868\u8fbe\u7684\u662f\u300c\u4ef6\u5185\u4e32\u884c\u300d&#xff1a;\u540c\u4e00\u5f20\u5de5\u5355\u7684\u5de5\u5e8f\u987a\u5e8f\u53f7\u4e0d\u80fd\u91cd\u590d\u3002<\/p>\n<p>\u4f46\u5b83\u53ea\u80fd\u9632\u91cd\u53f7&#xff0c;\u9632\u4e0d\u4e86\u4e71\u5e8f\u6267\u884c\u3002\u771f\u6b63\u7684\u4e32\u884c\u6821\u9a8c\u5728\u5e94\u7528\u5c42&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u62a5\u5de5\u524d\u7f6e\u6821\u9a8c&#xff08;\u4f2a\u4ee3\u7801&#xff09;<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">assert_process_order<\/span><span class=\"token punctuation\">(<\/span>wop<span class=\"token punctuation\">,<\/span> prev_wops<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> wop<span class=\"token punctuation\">.<\/span>status <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#039;pending&#039;<\/span> <span class=\"token keyword\">and<\/span> <span class=\"token builtin\">any<\/span><span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">.<\/span>status <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;done&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;skipped&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> p <span class=\"token keyword\">in<\/span> prev_wops<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">raise<\/span> ConflictError<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u524d\u9053\u5de5\u5e8f\u672a\u5b8c\u5de5&#xff0c;\u4e0d\u80fd\u5f00\u5de5\u5f53\u524d\u5de5\u5e8f&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u6ce8\u610f\u8fd9\u91cc\u7528 skipped \u800c\u4e0d\u662f\u76f4\u63a5\u5220\u9664&#xff1a;\u5de5\u5e8f\u88ab\u8df3\u8fc7\u4e5f\u662f\u4e00\u6761\u5386\u53f2&#xff0c;\u5220\u6389\u4f1a\u8ba9\u540e\u7eed\u8ffd\u6eaf\u65ad\u6863&#xff08;\u5ba2\u6237\u6539\u9700\u6c42\u4e0d\u505a\u70ed\u5904\u7406&#xff0c;\u662f\u5e38\u6001&#xff09;\u3002<\/p>\n<p>\u4ef6\u5185\u4e32\u884c\u3001\u4ef6\u95f4\u5e76\u884c&#xff0c;\u662f\u8fd9\u4e2a\u6a21\u578b\u7684\u7b2c\u4e8c\u4e2a\u9690\u542b\u7ea6\u675f\u3002<\/p>\n<p>\u4e0d\u540c\u5de5\u5355&#xff08;\u6216\u540c\u5de5\u5355\u4e0d\u540c\u4ef6&#xff09;\u53ef\u4ee5\u540c\u65f6\u5728\u4e0d\u540c\u5de5\u6bb5\u4e0a\u8dd1&#xff1a;A \u5355\u5728\u78e8\u3001B \u5355\u5728\u8f66\u3001C \u5355\u5728\u5916\u534f\u3002\u6d41\u7a0b\u7cfb\u7edf\u7684\u300c\u5de5\u5e8f\u6bb5\u300d\u6a21\u578b\u8868\u8fbe\u4e0d\u4e86\u8fd9\u4e00\u5c42\u2014\u2014\u5b83\u53ea\u6709\u4e00\u6761\u6d41\u6c34&#xff0c;\u6ca1\u6709\u300c\u591a\u5f20\u5355\u540c\u65f6\u5361\u5728\u4e0d\u540c\u6bb5\u300d\u7684\u6982\u5ff5\u3002<\/p>\n<h3>\u56db\u3001\u62a5\u5de5&#xff1a;\u4e00\u884c\u4e1a\u52a1\u4e8b\u5b9e&#xff0c;\u56db\u4e2a\u5b57\u6bb5\u5404\u6709\u813e\u6c14<\/h3>\n<p>\u79bb\u6563\u7684\u6838\u5fc3\u6267\u884c\u8bb0\u5f55\u662f\u62a5\u5de5\u3002<\/p>\n<p><span class=\"token keyword\">create<\/span> <span class=\"token keyword\">table<\/span> work_report <span class=\"token punctuation\">(<\/span><br \/>\n  id                    uuid <span class=\"token keyword\">primary<\/span> <span class=\"token keyword\">key<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  tenant_id             uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  work_order_process_id uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">references<\/span> work_order_process<span class=\"token punctuation\">(<\/span>id<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">on<\/span> <span class=\"token keyword\">delete<\/span> <span class=\"token keyword\">cascade<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  worker_id             uuid<span class=\"token punctuation\">,<\/span><br \/>\n  equipment_id          uuid<span class=\"token punctuation\">,<\/span><br \/>\n  started_at            timestamptz<span class=\"token punctuation\">,<\/span><br \/>\n  completed_at          timestamptz<span class=\"token punctuation\">,<\/span><br \/>\n  quantity              <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>           <span class=\"token comment\">&#8212; \u672c\u6b21\u5b8c\u6210\u6570\u91cf<\/span><br \/>\n  duration_hours        <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>           <span class=\"token comment\">&#8212; \u5b8c\u5de5\u65f6\u6309 started\/completed \u81ea\u52a8\u7b97<\/span><br \/>\n  allocated_hours       <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>           <span class=\"token comment\">&#8212; \u591a\u4eba\u5de5\u6bb5\u7684\u5206\u914d\u5de5\u65f6<\/span><br \/>\n  source                <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token string\">&#039;manual&#039;<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token comment\">&#8212; manual \/ outsourcing<\/span><br \/>\n  client_uuid           uuid<span class=\"token punctuation\">,<\/span>                    <span class=\"token comment\">&#8212; \u5ba2\u6237\u7aef\u5e42\u7b49\u952e&#xff08;\u79bb\u7ebf\u8865\u4f20\u7528&#xff09;<\/span><br \/>\n  created_at            timestamptz <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">unique<\/span> <span class=\"token keyword\">index<\/span> uq_report_client <span class=\"token keyword\">on<\/span> work_report <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> client_uuid<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">where<\/span> client_uuid <span class=\"token operator\">is<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">index<\/span> idx_report_wop <span class=\"token keyword\">on<\/span> work_report <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> work_order_process_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">index<\/span> idx_report_time <span class=\"token keyword\">on<\/span> work_report <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> started_at<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u56db\u4e2a\u5b57\u6bb5\u7684\u813e\u6c14&#xff1a;<\/p>\n<p>duration_hours \u662f\u8de8\u5ea6&#xff0c;\u4e0d\u662f\u51c0\u52a0\u5de5\u65f6\u95f4\u3002 \u5b83\u662f completed_at &#8211; started_at&#xff0c;\u4e2d\u9014\u505c\u673a\u3001\u5348\u4f11\u3001\u53bb\u5e2e\u522b\u7684\u5fd9\u90fd\u7b97\u5728\u91cc\u9762\u3002\u8fd9\u662f\u6709\u610f\u7684\u5b9a\u4e49&#xff1a;\u4e00\u53f0\u673a\u5e8a\u88ab\u67d0\u5f20\u5355\u5360\u7528\u7684\u65f6\u95f4&#xff0c;\u672c\u8eab\u5c31\u662f\u6210\u672c\u7684\u4e00\u90e8\u5206\u3002\u8981\u7edf\u8ba1\u51c0\u52a0\u5de5\u65f6\u95f4\u5f97\u9760\u8bbe\u5907\u8054\u7f51\u6216\u5206\u6bb5\u62a5\u5de5\u3002<\/p>\n<p>allocated_hours \u89e3\u51b3\u591a\u4eba\u5de5\u6bb5\u3002 \u4e00\u9053\u5de5\u5e8f\u4e09\u4e2a\u4eba\u5e72&#xff0c;\u5de5\u65f6\u603b\u91cf\u8981\u5728\u4eba\u5934\u4e0a\u5206\u3002\u5206\u914d\u662f\u72ec\u7acb\u52a8\u4f5c&#xff0c;\u6539\u4e00\u4e2a\u4eba\u7684\u5206\u914d\u6570\u8981\u6821\u9a8c\u5176\u4ed6\u4eba\u603b\u548c\u4e0d\u8d85\u8fc7\u8fd9\u9053\u5de5\u5e8f\u7684\u5b9e\u9645\u5de5\u65f6\u3002<\/p>\n<p>source \u533a\u5206\u4eba\u5de5\u4e0e\u5916\u534f\u81ea\u52a8\u9a71\u52a8\u3002 \u591a\u5165\u53e3\u5199\u540c\u4e00\u5f20\u5de5\u5355\u65f6&#xff0c;\u6765\u6e90\u6807\u8bc6\u662f\u6392\u67e5\u7684\u7b2c\u4e00\u628a\u94a5\u5319\u2014\u2014\u6570\u91cf\u5bf9\u4e0d\u4e0a&#xff0c;\u5148\u6309 source \u5206\u5806&#xff0c;\u4eba\u5de5\u5f55\u5165\u9519\u8bef\u548c\u5916\u534f\u5bf9\u63a5\u9519\u8bef&#xff0c;\u6392\u67e5\u65b9\u5411\u5b8c\u5168\u4e0d\u540c\u3002<\/p>\n<p>client_uuid \u662f\u5e42\u7b49\u952e\u3002 \u8f66\u95f4\u5f31\u7f51\u3001PDA \u79bb\u7ebf\u8865\u4f20\u662f\u5e38\u6001&#xff0c;\u540c\u4e00\u6761\u62a5\u5de5\u53ef\u80fd\u88ab\u91cd\u4f20\u4e09\u6b21\u3002\u6ca1\u6709\u5e42\u7b49\u952e&#xff0c;\u8865\u4f20\u5c31\u7b49\u4e8e\u91cd\u590d\u62a5\u5de5&#xff0c;\u6570\u91cf\u7ffb\u500d\u3002\u90e8\u5206\u552f\u4e00\u7d22\u5f15&#xff08;where client_uuid is not null&#xff09;\u8ba9\u5386\u53f2\u6570\u636e\u4e0d\u53d7\u5f71\u54cd&#xff0c;\u540c\u65f6\u4fdd\u8bc1\u65b0\u6570\u636e\u4e0d\u91cd\u590d\u3002<\/p>\n<h3>\u4e94\u3001\u6210\u672c&#xff1a;\u53ea\u6709\u4e24\u4e2a\u5b57\u6bb5&#xff0c;\u7b97\u6cd5\u662f\u786e\u5b9a\u7684<\/h3>\n<p>\u6700\u5e38\u89c1\u7684\u8bef\u89e3\u662f\u300c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u628a\u6599\u3001\u5de5\u3001\u5916\u534f\u4e09\u644a\u90fd\u5f52\u96c6\u300d\u3002<\/p>\n<p>\u79bb\u6563\u5b9e\u73b0\u7684\u6210\u672c\u8868\u53ea\u6709\u4e24\u644a&#xff1a;<\/p>\n<p><span class=\"token keyword\">create<\/span> <span class=\"token keyword\">table<\/span> work_order_costs <span class=\"token punctuation\">(<\/span><br \/>\n  id               uuid <span class=\"token keyword\">primary<\/span> <span class=\"token keyword\">key<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  tenant_id        uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  work_order_id    uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">unique<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  material_cost    <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  processing_cost  <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  loss_factor      <span class=\"token keyword\">double<\/span> <span class=\"token keyword\">precision<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  total_cost       <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">12<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  note             <span class=\"token keyword\">text<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  updated_at       timestamptz<br \/>\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u7b97\u6cd5&#xff1a;<\/p>\n<p>material_cost   &#061; length \u00d7 width \u00d7 height(mm\u00b3) \u00d7 density(g\/cm\u00b3) \u00d7 unit_price(\u5143\/kg) \/ 1e6 \u00d7 loss_factor<br \/>\nprocessing_cost &#061; \u03a3( planned_hours \u00d7 process.hourly_rate \u00d7 qty_factor )<br \/>\nqty_factor      &#061; work_order.quantity  (per_piece \u6a21\u5f0f)<br \/>\n                &#061; 1                     (total \u6a21\u5f0f)<br \/>\ntotal_cost      &#061; material_cost &#043; processing_cost<\/p>\n<p>\u5b9e\u73b0\u7247\u6bb5&#xff08;Python \u98ce\u683c&#xff0c;\u8bed\u4e49\u4e0e\u771f\u5b9e\u5b9e\u73b0\u4e00\u81f4&#xff09;&#xff1a;<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">recalc<\/span><span class=\"token punctuation\">(<\/span>wo<span class=\"token punctuation\">,<\/span> wop_rows<span class=\"token punctuation\">,<\/span> material<span class=\"token punctuation\">,<\/span> mode<span class=\"token punctuation\">,<\/span> loss_factor<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token comment\"># \u6599&#xff1a;\u4f53\u79ef \u00d7 \u5bc6\u5ea6 \u00d7 \u5355\u4ef7 \/ 1e6 \u00d7 \u635f\u8017\u7cfb\u6570<\/span><br \/>\n    material_cost <span class=\"token operator\">&#061;<\/span> Decimal<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;0&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> material <span class=\"token keyword\">and<\/span> <span class=\"token builtin\">all<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span>wo<span class=\"token punctuation\">.<\/span>length<span class=\"token punctuation\">,<\/span> wo<span class=\"token punctuation\">.<\/span>width<span class=\"token punctuation\">,<\/span> wo<span class=\"token punctuation\">.<\/span>height<span class=\"token punctuation\">,<\/span><br \/>\n                         material<span class=\"token punctuation\">.<\/span>density<span class=\"token punctuation\">,<\/span> material<span class=\"token punctuation\">.<\/span>unit_price<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        vol_mm3 <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>wo<span class=\"token punctuation\">.<\/span>length<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>wo<span class=\"token punctuation\">.<\/span>width<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>wo<span class=\"token punctuation\">.<\/span>height<span class=\"token punctuation\">)<\/span><br \/>\n        kg <span class=\"token operator\">&#061;<\/span> vol_mm3 <span class=\"token operator\">*<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>material<span class=\"token punctuation\">.<\/span>density<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>material<span class=\"token punctuation\">.<\/span>unit_price<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">1_000_000.0<\/span><br \/>\n        material_cost <span class=\"token operator\">&#061;<\/span> Decimal<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>kg <span class=\"token operator\">*<\/span> loss_factor<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.2f<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u5de5&#xff1a;\u8ba1\u5212\u5de5\u65f6 \u00d7 \u5de5\u6bb5\u8d39\u7387 \u00d7 \u6570\u91cf\u7cfb\u6570<\/span><br \/>\n    qty_factor <span class=\"token operator\">&#061;<\/span> wo<span class=\"token punctuation\">.<\/span>quantity <span class=\"token keyword\">if<\/span> mode <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;per_piece&#034;<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token number\">1<\/span><br \/>\n    processing_cost <span class=\"token operator\">&#061;<\/span> Decimal<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;0&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> wop<span class=\"token punctuation\">,<\/span> rate <span class=\"token keyword\">in<\/span> wop_rows<span class=\"token punctuation\">:<\/span>          <span class=\"token comment\"># rate \u6765\u81ea process.hourly_rate<\/span><br \/>\n        processing_cost <span class=\"token operator\">&#043;&#061;<\/span> Decimal<span class=\"token punctuation\">(<\/span><br \/>\n            <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>wop<span class=\"token punctuation\">.<\/span>planned_hours <span class=\"token keyword\">or<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>rate <span class=\"token keyword\">or<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> qty_factor<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.2f<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">return<\/span> material_cost<span class=\"token punctuation\">,<\/span> processing_cost<span class=\"token punctuation\">,<\/span> material_cost <span class=\"token operator\">&#043;<\/span> processing_cost<\/p>\n<p>\u4e09\u70b9\u5fc5\u987b\u5199\u8fdb\u6587\u6863&#xff0c;\u5426\u5219\u4e09\u4e2a\u6708\u540e\u4e00\u5b9a\u6709\u4eba\u95ee&#xff1a;<\/p>\n<li>\u6599\u6309\u4f53\u79ef\u7b97&#xff0c;\u4e0d\u6309\u5b9e\u9645\u9886\u6599\u3002 \u952f\u53e3\u3001\u5939\u5934\u3001\u8bd5\u5207\u7528 loss_factor \u8865&#xff1b;\u5b83\u9ed8\u8ba4 1.0&#xff0c;\u8981\u6309\u5382\u91cc\u5b9e\u9645\u8c03\u3002<\/li>\n<li>\u5de5\u6309\u8ba1\u5212\u5de5\u65f6\u7b97&#xff0c;\u4e0d\u6309\u5b9e\u9645\u5de5\u65f6\u3002 \u62a5\u4ef7\u5728\u4ea7\u524d&#xff0c;\u53ea\u6709\u4f30\u7684\u5de5\u65f6\u53ef\u7528&#xff1b;\u5b9e\u9645\u5de5\u65f6\u662f\u4e8b\u540e\u5bf9\u7167\u9879\u3002<\/li>\n<li>\u5916\u534f\u8d39\u7528\u4e0d\u5728\u8fd9\u5f20\u8868\u91cc\u3002 \u5916\u534f\u8d70\u5bf9\u8d26\u94fe\u8def\u3002\u7b97\u5b8c\u6574\u76f4\u63a5\u6210\u672c\u8981 total_cost &#043; \u5916\u534f\u5bf9\u8d26\u786e\u8ba4\u91d1\u989d\u3002<\/li>\n<p>\u8fd8\u6709\u4e00\u4e2a\u5751&#xff1a;\u91cd\u7b97\u901a\u5e38\u662f\u8986\u76d6\u5f0f\u7684\u3002<\/p>\n<p><span class=\"token keyword\">update<\/span> work_order_costs<br \/>\n   <span class=\"token keyword\">set<\/span> material_cost <span class=\"token operator\">&#061;<\/span> ?<span class=\"token punctuation\">,<\/span> processing_cost <span class=\"token operator\">&#061;<\/span> ?<span class=\"token punctuation\">,<\/span> total_cost <span class=\"token operator\">&#061;<\/span> ?<span class=\"token punctuation\">,<\/span> updated_at <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n <span class=\"token keyword\">where<\/span> work_order_id <span class=\"token operator\">&#061;<\/span> ? <span class=\"token operator\">and<\/span> tenant_id <span class=\"token operator\">&#061;<\/span> ?<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u8986\u76d6\u610f\u5473\u7740\u5386\u53f2\u6210\u672c\u4e0d\u4fdd\u7559\u3002\u8981\u7b97\u300c\u53d8\u66f4\u6539\u6389\u4e86\u591a\u5c11\u94b1\u300d&#xff0c;\u5fc5\u987b\u5728\u53d8\u66f4\u524d\u540e\u5404\u7559\u4e00\u6b21\u6570&#xff08;\u5bfc\u51fa\u3001\u622a\u56fe\u6216\u5199\u8fdb\u53d8\u66f4\u5355\u5907\u6ce8&#xff09;\u3002\u6307\u671b\u7cfb\u7edf\u7ed9\u4f60\u5dee\u989d&#xff0c;\u662f\u6ca1\u6709\u7684\u2014\u2014\u7cfb\u7edf\u63d0\u4f9b\u7684\u662f\u8ba1\u7b97\u5668&#xff0c;\u4e0d\u662f\u635f\u76ca\u8868\u3002<\/p>\n<h3>\u516d\u3001\u53d8\u66f4&#xff1a;\u72ec\u7acb\u5355\u636e &#043; \u53cc\u5feb\u7167&#xff0c;\u5ba2\u6237\u7684\u6539\u52a8\u4e0d\u80fd\u76f4\u63a5\u6539\u5b57\u6bb5<\/h3>\n<p>\u6d41\u7a0b\u7cfb\u7edf\u7684\u53d8\u66f4\u901a\u5e38\u662f\u300c\u4fee\u6539\u5355\u636e\u5b57\u6bb5 &#043; \u64cd\u4f5c\u65e5\u5fd7\u300d\u3002\u79bb\u6563\u4e0d\u884c&#xff0c;\u56e0\u4e3a\u53d8\u66f4\u4f1a\u5f71\u54cd\u6570\u91cf\u3001\u5de5\u5e8f\u3001\u6210\u672c\u53e3\u5f84\u3002<\/p>\n<p>\u79bb\u6563\u7684\u505a\u6cd5\u662f\u4e24\u79cd\u53d8\u66f4\u5355\u5206\u6cbb&#xff1a;<\/p>\n<p><span class=\"token comment\">&#8212; \u5ba2\u6237\u8ba2\u5355\u53d8\u66f4&#xff08;\u5355\u53f7 OC{YYMM}{4\u4f4d}&#xff09;<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">table<\/span> customer_order_change <span class=\"token punctuation\">(<\/span><br \/>\n  id            uuid <span class=\"token keyword\">primary<\/span> <span class=\"token keyword\">key<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  tenant_id     uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  change_no     <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">50<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  order_id      uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  change_type   <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span>   <span class=\"token comment\">&#8212; delivery_date \/ cancel \/ force_cancel<\/span><br \/>\n  <span class=\"token keyword\">status<\/span>        <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token string\">&#039;draft&#039;<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token comment\">&#8212; draft \/ executed \/ void<\/span><br \/>\n  original_data <span class=\"token keyword\">text<\/span><span class=\"token punctuation\">,<\/span>                   <span class=\"token comment\">&#8212; \u53d8\u66f4\u524d JSON \u5feb\u7167<\/span><br \/>\n  new_data      <span class=\"token keyword\">text<\/span><span class=\"token punctuation\">,<\/span>                   <span class=\"token comment\">&#8212; \u53d8\u66f4\u540e JSON \u5feb\u7167<\/span><br \/>\n  change_detail <span class=\"token keyword\">text<\/span><span class=\"token punctuation\">,<\/span>                   <span class=\"token comment\">&#8212; \u4eba\u7c7b\u53ef\u8bfb\u8bf4\u660e<\/span><br \/>\n  reason        <span class=\"token keyword\">text<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span>          <span class=\"token comment\">&#8212; \u539f\u56e0\u5fc5\u586b<\/span><br \/>\n  executed_by   <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">36<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  executed_at   timestamptz<span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token keyword\">unique<\/span> <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> change_no<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">&#8212; \u5de5\u5355\u53d8\u66f4&#xff08;\u5355\u53f7 CH{YYMM}{4\u4f4d}&#xff09;<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">table<\/span> work_order_changes <span class=\"token punctuation\">(<\/span><br \/>\n  id            uuid <span class=\"token keyword\">primary<\/span> <span class=\"token keyword\">key<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  tenant_id     uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  change_no     <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">50<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  work_order_id uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  change_type   <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span>   <span class=\"token comment\">&#8212; delivery_date \/ quantity \/ process \/ cancel<\/span><br \/>\n  <span class=\"token keyword\">status<\/span>        <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">default<\/span> <span class=\"token string\">&#039;draft&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  old_value     <span class=\"token keyword\">text<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  new_value     <span class=\"token keyword\">text<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  reason        <span class=\"token keyword\">text<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token keyword\">unique<\/span> <span class=\"token punctuation\">(<\/span>tenant_id<span class=\"token punctuation\">,<\/span> change_no<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">&#8212; \u5de5\u5355\u53d8\u66f4\u660e\u7ec6&#xff1a;\u4e0e\u5de5\u6bb5\u7ed3\u6784\u5bf9\u9f50<\/span><br \/>\n<span class=\"token keyword\">create<\/span> <span class=\"token keyword\">table<\/span> work_order_change_items <span class=\"token punctuation\">(<\/span><br \/>\n  id                uuid <span class=\"token keyword\">primary<\/span> <span class=\"token keyword\">key<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  tenant_id         uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  change_id         uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span> <span class=\"token keyword\">references<\/span> work_order_changes<span class=\"token punctuation\">(<\/span>id<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">on<\/span> <span class=\"token keyword\">delete<\/span> <span class=\"token keyword\">cascade<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  seq               <span class=\"token keyword\">int<\/span> <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  process_id        uuid <span class=\"token operator\">not<\/span> <span class=\"token boolean\">null<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  planned_hours     <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token keyword\">action<\/span>            <span class=\"token keyword\">varchar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>        <span class=\"token comment\">&#8212; add \/ delete \/ modify<\/span><br \/>\n  old_planned_hours <span class=\"token keyword\">numeric<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  old_remark        <span class=\"token keyword\">text<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u4e24\u4e2a\u8bbe\u8ba1\u51b3\u5b9a\u503c\u5f97\u89e3\u91ca\u3002<\/p>\n<p>\u5ba2\u6237\u8ba2\u5355\u53d8\u66f4\u53ea\u5f00\u653e\u4e09\u7c7b\u3002 \u6539\u4ea4\u671f\u3001\u53d6\u6d88\u3001\u5f3a\u5236\u53d6\u6d88\u3002\u6539\u6570\u91cf\u5c5e\u4e8e\u5371\u9669\u53d8\u66f4&#xff0c;\u88ab\u6321\u5728\u8fd9\u4e2a\u5c42\u7ea7\u4e4b\u5916\u2014\u2014\u4e00\u5f20\u8ba2\u5355\u7684\u6570\u91cf\u53d8\u5316\u4f1a\u8fde\u9501\u5f71\u54cd\u6599\u3001\u5de5\u65f6\u3001\u5916\u534f\u548c\u62a5\u4ef7\u3002\u8fd9\u662f\u6709\u610f\u6536\u7a84\u7684\u5165\u53e3&#xff0c;\u4e0d\u662f\u529f\u80fd\u7f3a\u5931\u3002<\/p>\n<p>\u5de5\u5355\u53d8\u66f4\u660e\u7ec6\u6309\u5de5\u6bb5\u4e00\u5bf9\u4e00\u6392\u3002 action \u4e09\u503c &#043; old_planned_hours&#xff0c;\u8fd9\u6837\u6210\u672c\u624d\u53ef\u80fd\u7b97\u51fa\u300c\u5dee\u591a\u5c11\u300d\u3002\u5982\u679c\u660e\u7ec6\u53ea\u8bb0\u4e00\u53e5\u300c\u5de5\u5e8f\u6709\u8c03\u6574\u300d&#xff0c;\u8fd9\u5f20\u53d8\u66f4\u5355\u7b49\u4e8e\u5e9f\u7eb8\u2014\u2014\u8f66\u95f4\u4e0d\u77e5\u9053\u6539\u54ea\u9053&#xff0c;\u6210\u672c\u7b97\u4e0d\u51fa\u5dee\u989d\u3002<\/p>\n<p>\u53e6\u5916&#xff0c;force_cancel&#xff08;\u5f3a\u5236\u53d6\u6d88&#xff09;\u8981\u7ea7\u8054\u53d6\u6d88\u5176\u4e0b pending \/ in_progress \u7684\u5de5\u5355&#xff0c;\u4f46\u5916\u534f\u3001\u53d1\u8d27\u3001\u5bf9\u8d26\u4e0d\u81ea\u52a8\u52a8\u3002\u8fd9\u6761\u8fb9\u754c\u5fc5\u987b\u5199\u6b7b\u5728\u6587\u6863\u91cc&#xff1a;\u7ea7\u8054\u505a\u591a\u4e86\u4f1a\u8fde\u5e26\u6bc1\u6389\u4e0b\u6e38\u7684\u771f\u5b9e\u4e1a\u52a1\u8bb0\u5f55\u3002<\/p>\n<h3>\u4e03\u3001\u8fc1\u79fb&#xff1a;\u4ece\u6d41\u7a0b\u7cfb\u7edf\u642c\u6570\u636e&#xff0c;\u4e09\u4e2a\u5fc5\u8e29\u7684\u5751<\/h3>\n<p>\u505a\u8fc7\u4e00\u6b21\u6d41\u7a0b ERP \u2192 \u79bb\u6563 MES \u7684\u6570\u636e\u8fc1\u79fb&#xff0c;\u4f1a\u8e29\u4e09\u4e2a\u5751\u3002<\/p>\n<p>\u5751\u4e00&#xff1a;\u6570\u91cf\u5e26\u5c0f\u6570\u3002 \u6d41\u7a0b\u7cfb\u7edf\u91cc\u7684\u6570\u91cf\u662f\u6d6e\u70b9&#xff0c;\u642c\u8fc7\u6765\u4e4b\u540e quantity \u51fa\u73b0 0.5\u30011.25\u3002\u6e05\u6d17\u89c4\u5219\u8981\u63d0\u524d\u5b9a&#xff1a;\u8981\u4e48\u5411\u4e0a\u53d6\u6574&#xff0c;\u8981\u4e48\u5355\u72ec\u7acb\u4e00\u6761\u300c\u975e\u6cd5\u6570\u636e\u300d\u53f0\u8d26\u4eba\u5de5\u6838\u3002\u6084\u6084 round \u662f\u6700\u574f\u7684\u9009\u62e9\u3002<\/p>\n<p>\u5751\u4e8c&#xff1a;\u5de5\u5e8f\u6ca1\u6709 seq\u3002 \u6d41\u7a0b\u7cfb\u7edf\u7684\u5de5\u827a\u6bb5\u662f\u6a21\u677f&#xff0c;\u642c\u5230\u5de5\u5355\u4e0a\u8981\u751f\u6210\u5b9e\u9645\u7684\u5de5\u5355\u5de5\u5e8f\u3002\u5982\u679c\u6a21\u677f\u91cc\u6bb5\u7684\u987a\u5e8f\u4e0d\u660e\u786e&#xff0c;\u751f\u6210\u7684 seq \u4f1a\u4e71&#xff0c;\u4e32\u884c\u6821\u9a8c\u5168\u90e8\u5931\u6548\u3002\u8fc1\u79fb\u524d\u8981\u4eba\u5de5\u786e\u8ba4\u4e00\u904d\u6bb5\u5e8f\u3002<\/p>\n<p>\u5751\u4e09&#xff1a;\u6599\u53f7\u4e00\u5bf9\u591a\u3002 \u6d41\u7a0b\u7cfb\u7edf\u4e00\u4e2a\u6599\u53f7\u5bf9\u5e94\u4e00\u4e2a\u89c4\u683c&#xff1b;\u79bb\u6563\u5382\u7684\u5386\u53f2\u6570\u636e\u91cc&#xff0c;\u540c\u4e00\u4e2a\u6599\u53f7\u5e38\u5e38\u88ab\u7528\u5728\u591a\u4e2a\u4ef6\u53f7\u4e0a&#xff08;\u56e0\u4e3a\u5f53\u5e74\u6ca1\u6599\u53f7\u5c31\u968f\u624b\u586b\u4e86&#xff09;\u3002\u8fc1\u79fb\u6620\u5c04\u8868\u8981\u4e48\u6309\u300c\u6599\u53f7 &#043; \u4ef6\u53f7\u300d\u5efa&#xff0c;\u8981\u4e48\u627f\u8ba4\u8fd9\u90e8\u5206\u6210\u672c\u53ea\u80fd\u6309\u4f30\u7b97\u3002<\/p>\n<p>\u8fd9\u4e09\u4e2a\u5751\u7684\u5171\u540c\u70b9&#xff1a;\u90fd\u4e0d\u662f\u6280\u672f\u96be\u70b9&#xff0c;\u662f\u6570\u636e\u8d28\u91cf\u3002 \u6e05\u6d17\u811a\u672c\u597d\u5199&#xff0c;\u5224\u65ad\u6807\u51c6\u96be\u5b9a&#xff0c;\u6240\u4ee5\u5fc5\u987b\u4e1a\u52a1\u65b9\u53c2\u4e0e\u786e\u8ba4&#xff0c;\u4e0d\u80fd\u5168\u4ea4\u7ed9\u5f00\u53d1\u3002<\/p>\n<h3>\u516b\u3001\u591a\u79df\u6237\u4e0e\u6027\u80fd&#xff1a;\u4e24\u6761\u5bb9\u6613\u6f0f\u7684<\/h3>\n<p>\u591a\u79df\u6237\u9694\u79bb\u4e0e\u4e1a\u52a1\u6a21\u578b\u6b63\u4ea4&#xff0c;\u4f46\u6709\u4e24\u5904\u5bb9\u6613\u6f0f&#xff1a;<\/p>\n<li>\u6240\u6709\u552f\u4e00\u952e\u90fd\u8981\u5e26 tenant_id&#xff08;\u5355\u53f7\u3001\u6599\u53f7\u3001\u56fe\u53f7\u5728\u79df\u6237\u5185\u552f\u4e00&#xff0c;\u8de8\u79df\u6237\u4f1a\u91cd\u590d&#xff09;<\/li>\n<li>\u6240\u6709\u7edf\u8ba1\u67e5\u8be2\u7684 where \u5fc5\u987b\u5148\u5e26 tenant_id&#xff0c;\u5426\u5219\u7d22\u5f15\u8d70\u4e0d\u4e0a&#xff0c;\u8fd8\u53ef\u80fd\u8de8\u79df\u6237\u6c61\u67d3<\/li>\n<p>\u6210\u672c\u7edf\u8ba1\u8fd9\u7c7b\u805a\u5408\u67e5\u8be2\u5c24\u5176\u8981\u6ce8\u610f&#xff1a;<\/p>\n<p><span class=\"token comment\">&#8212; \u79df\u6237\u524d\u7f6e &#043; \u65f6\u95f4\u8303\u56f4 &#043; \u53ea\u7edf\u8ba1\u5df2\u5b8c\u5de5<\/span><br \/>\n<span class=\"token keyword\">select<\/span> <span class=\"token function\">count<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">coalesce<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">sum<\/span><span class=\"token punctuation\">(<\/span>c<span class=\"token punctuation\">.<\/span>total_cost<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n  <span class=\"token keyword\">from<\/span> work_order_costs c<br \/>\n  <span class=\"token keyword\">join<\/span> work_orders w<br \/>\n    <span class=\"token keyword\">on<\/span> w<span class=\"token punctuation\">.<\/span>id <span class=\"token operator\">&#061;<\/span> c<span class=\"token punctuation\">.<\/span>work_order_id <span class=\"token operator\">and<\/span> w<span class=\"token punctuation\">.<\/span>tenant_id <span class=\"token operator\">&#061;<\/span> c<span class=\"token punctuation\">.<\/span>tenant_id<br \/>\n <span class=\"token keyword\">where<\/span> c<span class=\"token punctuation\">.<\/span>tenant_id <span class=\"token operator\">&#061;<\/span> :tid<br \/>\n   <span class=\"token operator\">and<\/span> w<span class=\"token punctuation\">.<\/span><span class=\"token keyword\">status<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;completed&#039;<\/span><br \/>\n   <span class=\"token operator\">and<\/span> w<span class=\"token punctuation\">.<\/span>completed_at <span class=\"token operator\">&gt;&#061;<\/span> :<span class=\"token keyword\">from<\/span><br \/>\n   <span class=\"token operator\">and<\/span> w<span class=\"token punctuation\">.<\/span>completed_at <span class=\"token operator\">&lt;<\/span>  :<span class=\"token keyword\">to<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u6027\u80fd\u4e0a\u79bb\u6563\u7cfb\u7edf\u6709\u4e24\u4e2a\u70ed\u70b9&#xff1a;<\/p>\n<p>\u62a5\u5de5\u5199\u5165\u3002 \u8f66\u95f4\u96c6\u4e2d\u62a5\u5de5&#xff08;\u5348\u4f11\u3001\u4e0b\u73ed&#xff09;\u4f1a\u5f62\u6210\u5199\u5165\u5c16\u5cf0&#xff0c;\u7d22\u5f15\u4e0d\u8981\u5efa\u592a\u591a&#xff0c;work_report \u4e0a\u4e24\u4e09\u4e2a\u8db3\u591f&#xff08;\u6309\u5de5\u5e8f\u67e5\u3001\u6309\u65f6\u95f4\u67e5&#xff09;\u3002<\/p>\n<p>\u770b\u677f\u67e5\u8be2\u3002 \u770b\u677f\u662f\u9ad8\u9891\u53ea\u8bfb\u805a\u5408&#xff0c;\u6700\u597d\u505a\u4e00\u5c42\u7269\u5316\u89c6\u56fe\u6216\u7f13\u5b58&#xff0c;\u522b\u6bcf\u6b21\u90fd\u8dd1\u5168\u8868 count\u3002<\/p>\n<h3>\u4e5d\u3001\u6a21\u578b\u5bf9\u4e0d\u5bf9\u53e3&#xff0c;\u770b\u56db\u4e2a\u7ea6\u675f<\/h3>\n<p>\u7ed9\u505a\u9009\u578b\u8bc4\u5ba1\u6216\u4ee3\u7801\u8bc4\u5ba1\u7684\u4eba\u56db\u6761\u786c\u5224\u636e&#xff1a;<\/p>\n<li>\u5de5\u5355\u80fd\u5426\u53ea\u8868\u793a\u4e00\u4ef6\u6d3b&#xff08;\u6570\u91cf\u4e0b\u9650\u4e3a 1&#xff0c;\u4e0d\u8981\u6c42\u6807\u51c6\u4ea7\u54c1&#xff09;<\/li>\n<li>\u5de5\u5e8f\u80fd\u5426\u6302\u5728\u5de5\u5355\u4e0a\u3001\u6309 seq \u4e32\u884c\u63a8\u8fdb&#xff0c;\u4e14\u6bcf\u9053\u5de5\u5e8f\u53ef\u72ec\u7acb\u62a5\u5de5<\/li>\n<li>\u5916\u534f\u80fd\u5426\u6302\u5728\u300c\u5de5\u5355 &#043; \u5de5\u5e8f\u300d\u8fd9\u4e00\u5bf9\u4e0a&#xff0c;\u800c\u4e0d\u662f\u6302\u5728\u6279\u6b21\u4e0a<\/li>\n<li>\u6210\u672c\u80fd\u5426\u6309\u5355\u67e5\u8be2&#xff0c;\u4e14\u80fd\u660e\u786e\u8bf4\u51fa\u300c\u542b\u4ec0\u4e48\u3001\u4e0d\u542b\u4ec0\u4e48\u300d<\/li>\n<p>\u56db\u6761\u91cc\u4efb\u4e00\u6761\u4e0d\u6210\u7acb&#xff0c;\u8fd9\u5957\u6a21\u578b\u5c31\u4e0d\u662f\u79bb\u6563\u6a21\u578b&#xff0c;\u7528\u5b83\u7ba1\u8f66\u95f4\u5fc5\u7136\u591a\u4e00\u5c42\u7ffb\u8bd1\u3002<\/p>\n<p>\u4e0a\u9762\u8fd9\u4e9b\u7ea6\u675f\u4e0d\u662f\u7eb8\u4e0a\u63a8\u6f14\u2014\u2014\u5b83\u4eec\u6765\u81ea\u4e00\u5957\u771f\u5b9e\u5728\u8dd1\u7684\u79bb\u6563 MES \u7684\u6570\u636e\u7ed3\u6784&#xff08;\u6469\u6770\u65af\u7684 PMS5&#xff09;&#xff0c;\u5b57\u6bb5\u540d\u3001\u9ed8\u8ba4\u503c\u3001\u7ea6\u675f\u90fd\u80fd\u9010\u6761\u5bf9\u4e0a&#xff0c;\u5305\u62ec\u300c\u5ba2\u6237\u8ba2\u5355\u53d8\u66f4\u53ea\u5f00\u653e\u4e09\u7c7b\u300d\u8fd9\u79cd\u770b\u8d77\u6765\u522b\u626d\u3001\u5b9e\u9645\u662f\u62a4\u680f\u7684\u8bbe\u8ba1\u3002<\/p>\n<h3>FAQ<\/h3>\n<p>Q&#xff1a;\u4e3a\u4ec0\u4e48\u4e0d\u7528\u300c\u6279\u6b21\u300d\u505a\u4e3b\u8f74&#xff0c;\u628a\u6599\u548c\u6d3b\u4e32\u8d77\u6765&#xff1f;<br \/>\nA&#xff1a;\u6279\u6b21\u9002\u5408\u540c\u8d28\u6599\u7684\u8d28\u91cf\u8ffd\u6eaf&#xff08;\u6d41\u7a0b\u884c\u4e1a&#xff09;\u3002\u79bb\u6563\u7684\u975e\u6807\u4ef6\u6ca1\u6709\u7a33\u5b9a\u6279\u6b21\u8c31\u7cfb&#xff1a;\u4e00\u4ef6\u53ef\u80fd\u6765\u81ea\u4e09\u6279\u6599&#xff0c;\u4e00\u6279\u6599\u53ef\u80fd\u505a\u4e94\u4e2a\u56fe\u53f7\u3002\u6309\u6279\u6b21\u7ba1&#xff0c;\u8ffd\u6eaf\u4e0d\u51fa\u6709\u7528\u7684\u4fe1\u606f\u3002\u771f\u8981\u505a\u6279\u6b21\u7ea7\u8ffd\u6eaf&#xff0c;\u5f97\u5f15\u5165\u6279\u6b21\u53f7\u3001\u5148\u8fdb\u5148\u51fa\u3001\u6709\u6548\u671f\u8fd9\u4e00\u6574\u5957&#xff0c;\u6210\u672c\u548c\u7ef4\u62a4\u91cf\u662f\u53e6\u4e00\u4e2a\u91cf\u7ea7\u3002<\/p>\n<p>Q&#xff1a;\u5de5\u65f6\u80fd\u4e0d\u80fd\u76f4\u63a5\u7528\u5de5\u65f6\u5361\/\u8bbe\u5907\u91c7\u96c6\u66ff\u4ee3\u62a5\u5de5&#xff1f;<br \/>\nA&#xff1a;\u80fd\u8865&#xff0c;\u4f46\u66ff\u4ee3\u4e0d\u4e86\u3002\u62a5\u5de5\u8bb0\u5f55\u7684\u662f\u300c\u8fd9\u5f20\u5355\u7684\u8fd9\u9053\u5de5\u5e8f\u5b8c\u6210\u4e86\u591a\u5c11\u4ef6\u300d&#xff0c;\u8bbe\u5907\u91c7\u96c6\u901a\u5e38\u53ea\u6709\u8fd0\u884c\u65f6\u957f&#xff0c;\u6ca1\u6709\u4ef6\u6570\u4e0e\u5de5\u5e8f\u5f52\u5c5e\u3002\u4e24\u8005\u4e92\u8865&#xff1a;\u8bbe\u5907\u91c7\u96c6\u6821\u51c6\u65f6\u957f&#xff0c;\u62a5\u5de5\u63d0\u4f9b\u4ef6\u6570\u4e0e\u5f52\u5c5e\u3002<\/p>\n<p>Q&#xff1a;\u6210\u672c\u53e3\u5f84\u4e3a\u4ec0\u4e48\u4e0d\u80fd\u4e24\u5957\u5e76\u5b58&#xff08;\u6309\u5355 &#043; \u6309\u6279&#xff09;&#xff1f;<br \/>\nA&#xff1a;\u53ef\u4ee5\u5e76\u5b58&#xff0c;\u4f46\u5fc5\u987b\u5148\u660e\u786e\u54ea\u4e00\u5957\u662f\u51b3\u7b56\u53e3\u5f84\u3002\u4e24\u5957\u5e76\u884c\u65f6\u6700\u5e38\u89c1\u7684\u5931\u8d25\u662f\u62a5\u4ef7\u7528\u6309\u5355\u3001\u590d\u76d8\u7528\u6309\u6279&#xff0c;\u7136\u540e\u4e24\u8fb9\u6570\u6c38\u8fdc\u5bf9\u4e0d\u4e0a\u3002\u6280\u672f\u4e0a\u53ea\u662f qty_factor \u4e00\u4e2a\u5f00\u5173&#xff0c;\u7ba1\u7406\u4e0a\u662f\u4e00\u4e2a\u6001\u5ea6\u95ee\u9898\u3002<\/p>\n<p>Q&#xff1a;\u8fd9\u7c7b\u6a21\u578b\u80fd\u627f\u8f7d\u591a\u79df\u6237 SaaS \u5417&#xff1f;<br \/>\nA&#xff1a;\u80fd\u3002\u591a\u79df\u6237\u7684\u884c\u7ea7\u9694\u79bb&#xff08;tenant_id&#xff09;\u4e0e\u4e1a\u52a1\u6a21\u578b\u6b63\u4ea4&#xff0c;\u53ea\u8981\u6240\u6709\u67e5\u8be2\u90fd\u5e26\u79df\u6237\u4e0a\u4e0b\u6587\u3001\u552f\u4e00\u952e\u90fd\u5e26\u79df\u6237\u524d\u7f00&#xff0c;\u6a21\u578b\u672c\u8eab\u4e0d\u53d7\u5f71\u54cd\u3002\u771f\u6b63\u8981\u5c0f\u5fc3\u7684\u662f\u805a\u5408\u67e5\u8be2\u548c\u5bfc\u51fa\u2014\u2014\u8fd9\u4e24\u5904\u6700\u5bb9\u6613\u6f0f\u6389\u79df\u6237\u6761\u4ef6\u3002<\/p>\n<p>Q&#xff1a;\u79bb\u7ebf\u62a5\u5de5\u7684\u6570\u636e\u600e\u4e48\u4fdd\u8bc1\u4e0d\u91cd\u590d&#xff1f;<br \/>\nA&#xff1a;\u5ba2\u6237\u7aef\u751f\u6210 client_uuid&#xff0c;\u670d\u52a1\u7aef\u7528\u5b83\u5efa\u90e8\u5206\u552f\u4e00\u7d22\u5f15\u3002\u8865\u4f20\u65f6\u5148\u67e5\u540e\u63d2&#xff0c;\u6216\u8005\u76f4\u63a5\u4f9d\u8d56\u552f\u4e00\u7d22\u5f15\u51b2\u7a81\u5e76\u8fd4\u56de\u5df2\u6709\u8bb0\u5f55\u3002\u6ca1\u6709\u5e42\u7b49\u952e\u7684\u79bb\u7ebf\u8865\u4f20&#xff0c;\u8fdf\u65e9\u4f1a\u51fa\u73b0\u91cd\u590d\u62a5\u5de5\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u5148\u8bf4\u7ed3\u8bba&#xff1a;\u5206\u5c94\u53d1\u751f\u5728\u7b2c\u4e00\u5f20\u8868<br \/>\n\u505a\u8fc7\u6d41\u7a0b\u884c\u4e1a\u7cfb\u7edf\u7684\u4eba\u8f6c\u5230\u79bb\u6563\u5236\u9020&#xff0c;\u6700\u5bb9\u6613\u8e29\u7684\u5751\u662f\u300c\u4ee5\u4e3a\u53ea\u662f\u5b57\u6bb5\u4e0d\u540c\u300d\u3002<br \/>\n\u771f\u6b63\u4e0d\u540c\u7684\u662f\u4e3b\u5bf9\u8c61\u3002<br \/>\n\u6d41\u7a0b ERP \u7684\u4e3b\u5bf9\u8c61\u662f\u51ed\u8bc1&#xff08;voucher&#xff09;\u4e0e\u7269\u6599&#xff08;material&#xff09;&#xff1a;\u4e1a\u52a1\u53d1\u751f \u2192 \u51ed\u8bc1&#xff1b;\u7269\u6599\u79fb\u52a8 \u2192 \u5e93\u5b58\u4e8b\u52a1\u3002\u751f\u4ea7\u6267\u884c\u88ab\u538b\u7f29\u6210\u300c\u751f\u4ea7\u8ba2\u5355  \u6295\u6599\/\u4ea7\u51fa\u300d\u4e24\u4e2a\u52a8\u4f5c\u3002<br \/>\n\u79bb\u6563\u8f66\u95f4\u7684\u4e3b\u5bf9\u8c61\u662f\u5de5\u5355\u4e0e\u5de5\u5355\u5de5\u5e8f&#xff1a;\u4e00\u5f20\u5de5\u5355  \u4e00\u4e2a\u4ea7\u54c1<\/p>\n","protected":false},"author":2,"featured_media":119444,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1213,2606,44],"topic":[],"class_list":["post-119445","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-1213","tag-2606","tag-44"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/119445.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u4e00\u3001\u5148\u8bf4\u7ed3\u8bba&#xff1a;\u5206\u5c94\u53d1\u751f\u5728\u7b2c\u4e00\u5f20\u8868 \u505a\u8fc7\u6d41\u7a0b\u884c\u4e1a\u7cfb\u7edf\u7684\u4eba\u8f6c\u5230\u79bb\u6563\u5236\u9020&#xff0c;\u6700\u5bb9\u6613\u8e29\u7684\u5751\u662f\u300c\u4ee5\u4e3a\u53ea\u662f\u5b57\u6bb5\u4e0d\u540c\u300d\u3002 \u771f\u6b63\u4e0d\u540c\u7684\u662f\u4e3b\u5bf9\u8c61\u3002 \u6d41\u7a0b ERP \u7684\u4e3b\u5bf9\u8c61\u662f\u51ed\u8bc1&#xff08;voucher&#xff09;\u4e0e\u7269\u6599&#xff08;material&#xff09;&#xff1a;\u4e1a\u52a1\u53d1\u751f \u2192 \u51ed\u8bc1&#xff1b;\u7269\u6599\u79fb\u52a8 \u2192 \u5e93\u5b58\u4e8b\u52a1\u3002\u751f\u4ea7\u6267\u884c\u88ab\u538b\u7f29\u6210\u300c\u751f\u4ea7\u8ba2\u5355 \u6295\u6599\/\u4ea7\u51fa\u300d\u4e24\u4e2a\u52a8\u4f5c\u3002 \u79bb\u6563\u8f66\u95f4\u7684\u4e3b\u5bf9\u8c61\u662f\u5de5\u5355\u4e0e\u5de5\u5355\u5de5\u5e8f&#xff1a;\u4e00\u5f20\u5de5\u5355 \u4e00\u4e2a\u4ea7\u54c1\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/119445.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T09:24:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261029092447-6ae310dfd46e1.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/119445.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/119445.html\",\"name\":\"\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-10-29T09:24:49+00:00\",\"dateModified\":\"2026-10-29T09:24:49+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/119445.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/119445.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/119445.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/119445.html","og_locale":"zh_CN","og_type":"article","og_title":"\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u4e00\u3001\u5148\u8bf4\u7ed3\u8bba&#xff1a;\u5206\u5c94\u53d1\u751f\u5728\u7b2c\u4e00\u5f20\u8868 \u505a\u8fc7\u6d41\u7a0b\u884c\u4e1a\u7cfb\u7edf\u7684\u4eba\u8f6c\u5230\u79bb\u6563\u5236\u9020&#xff0c;\u6700\u5bb9\u6613\u8e29\u7684\u5751\u662f\u300c\u4ee5\u4e3a\u53ea\u662f\u5b57\u6bb5\u4e0d\u540c\u300d\u3002 \u771f\u6b63\u4e0d\u540c\u7684\u662f\u4e3b\u5bf9\u8c61\u3002 \u6d41\u7a0b ERP \u7684\u4e3b\u5bf9\u8c61\u662f\u51ed\u8bc1&#xff08;voucher&#xff09;\u4e0e\u7269\u6599&#xff08;material&#xff09;&#xff1a;\u4e1a\u52a1\u53d1\u751f \u2192 \u51ed\u8bc1&#xff1b;\u7269\u6599\u79fb\u52a8 \u2192 \u5e93\u5b58\u4e8b\u52a1\u3002\u751f\u4ea7\u6267\u884c\u88ab\u538b\u7f29\u6210\u300c\u751f\u4ea7\u8ba2\u5355 \u6295\u6599\/\u4ea7\u51fa\u300d\u4e24\u4e2a\u52a8\u4f5c\u3002 \u79bb\u6563\u8f66\u95f4\u7684\u4e3b\u5bf9\u8c61\u662f\u5de5\u5355\u4e0e\u5de5\u5355\u5de5\u5e8f&#xff1a;\u4e00\u5f20\u5de5\u5355 \u4e00\u4e2a\u4ea7\u54c1","og_url":"https:\/\/www.wsisp.com\/helps\/119445.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-10-29T09:24:49+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261029092447-6ae310dfd46e1.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/119445.html","url":"https:\/\/www.wsisp.com\/helps\/119445.html","name":"\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-10-29T09:24:49+00:00","dateModified":"2026-10-29T09:24:49+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/119445.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/119445.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/119445.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u79bb\u6563\u5236\u9020\u7cfb\u7edf\u7684\u6570\u636e\u5efa\u6a21\uff1a\u4e3a\u4ec0\u4e48\u6d41\u7a0b\u6a21\u578b\u5957\u4e0d\u4e0a\u8f66\u95f4"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/119445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=119445"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/119445\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/119444"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=119445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=119445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=119445"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=119445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}