fix(customer): 修复客户数据查询中的空值问题并优化生产订单状态管理
- 在CustomerMapper.xml中为sales_ledger表添加customer_id非空条件以避免空值导致的计算错误
- 修复ProductionProductMainServiceImpl中生产订单状态设置逻辑,确保非最后工序不会覆盖已完成状态
- 添加天津地区食品和药品行业客户拜访数据脚本,包含12条真实客户拜访记录
- 完善订单状态流转控制,确保RUNNING状态仅在适当条件下设置
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- å®¢æ·æè®¿æ°æ®æå
¥èæ¬ |
| | | -- æè®¿äººï¼å¼ æ·é |
| | | -- 客æ·ï¼å¤©æ´¥çé£ååè¯åè¡ä¸ |
| | | -- çææ¥æï¼2026-06-12 |
| | | -- æè®¿æ¶é´èå´ï¼2026-05-03 è³ 2026-06-12 |
| | | |
| | | -- 天津é£åè¡ä¸å®¢æ·æè®¿æ°æ®ï¼6æ¡ï¼ |
| | | INSERT INTO customer_visits (customer_name, contact, contact_phone, location, visiting_people, purpose_visit, purpose_date, visit_address, remark, create_time, tenant_id, dept_id) VALUES |
| | | ('天津康å¸å
é£åæéå
¬å¸', 'æç»ç', '022-58901234', 'å¤©æ´¥å¸æ»¨æµ·æ°åº', 'å¼ æ·é', 'äº§åæ¨å¹¿æ´½è°', '2026-05-03', 'å¤©æ´¥å¸æ»¨æµ·æ°åºç»æµææ¯å¼ååºç¬¬å大è¡66å·', '客æ·å¯¹æ°åé
±æ²¹ç³»åæå
´è¶£ï¼éåç»è·è¿éæ ·', NOW(), 1, 100), |
| | | ('å¤©æ´¥çæµ·åéé£åæéå
¬å¸', 'çæ»ç', '022-65432198', 'å¤©æ´¥å¸æ²³è¥¿åº', 'å¼ æ·é', '年度ååç»ç¾', '2026-05-10', 'å¤©æ´¥å¸æ²³è¥¿åºè§£æ¾åè·¯256å·', 'ç»ç¾ååå·²è°å¦¥ï¼ä¸å£åº¦å¼å§æ§è¡æ°ä»·æ ¼', NOW(), 1, 100), |
| | | ('å¤©æ´¥æµ·æ²³ä¹³ä¸æéå
¬å¸', '赵主任', '022-23456789', 'å¤©æ´¥å¸æ´¥ååº', 'å¼ æ·é', 'æ°åå使´½è°', '2026-05-18', 'å¤©æ´¥å¸æ´¥ååºå港éå·¥ä¸ååº', 'ä¹³å¶åè°å³åå使åæç¡®ï¼éæäº¤æ ·å', NOW(), 1, 100), |
| | | ('天津æ¡é¡ºæé£åæéå
¬å¸', 'åç»ç', '022-87654321', '天津å¸åå¼åº', 'å¼ æ·é', 'ä¿éæ´»å¨æ²é', '2026-05-25', '天津å¸åå¼åºé¿æ±é88å·', '端åèä¿éæ¹æ¡å·²ç¡®è®¤ï¼é
å客æ·ä¸æ¶', NOW(), 1, 100), |
| | | ('天津天é£é£åæéå
¬å¸', 'åéè´', '022-12345678', '天津å¸ä¸ä¸½åº', 'å¼ æ·é', 'äº§åæ¥ä»·æ²é', '2026-06-02', '天津å¸ä¸ä¸½åºç©ºæ¸¯ç»æµåº', 'æ¥ä»·å·²åéï¼çå¾
客æ·ç¡®è®¤', NOW(), 1, 100), |
| | | ('天津å©è¾¾ç²®æ²¹æéå
¬å¸', 'é主管', '022-98765432', '天津å¸è¥¿éåº', 'å¼ æ·é', 'ä¾åºé¾åä½', '2026-06-10', '天津å¸è¥¿éåºæ¨æ³ééå·¥ä¸å', '粮油产åå使¡æ¶å·²è¾¾æ', NOW(), 1, 100); |
| | | |
| | | -- 天津è¯åè¡ä¸å®¢æ·æè®¿æ°æ®ï¼6æ¡ï¼ |
| | | INSERT INTO customer_visits (customer_name, contact, contact_phone, location, visiting_people, purpose_visit, purpose_date, visit_address, remark, create_time, tenant_id, dept_id) VALUES |
| | | ('天津åä»å è¯ä¸è¡ä»½æéå
¬å¸', 'å¼ ç»ç', '022-54321098', '天津å¸åå¹³åº', 'å¼ æ·é', 'ä¸è¯æéè´æ´½è°', '2026-05-05', '天津å¸åå¹³åºå京路189å·', 'ä¸è¯æéè´æåæç¡®ï¼éæä¾äº§å°è¯æ', NOW(), 1, 100), |
| | | ('天津è¯ä¸é墿éå
¬å¸', 'å´æ»ç', '022-76543210', '天津å¸åè¾°åº', 'å¼ æ·é', 'åæä¾åºåä½', '2026-05-15', '天津å¸åè¾°åºç§æååº', 'åæä¾åºååå·²ç¾çº¦ï¼ä¸æå¼å§ä¾è´§', NOW(), 1, 100), |
| | | ('天津红æ¥è¯ä¸è¡ä»½æéå
¬å¸', 'å¨ä¸»ä»»', '022-34567890', 'å¤©æ´¥å¸æ¦æ¸
åº', 'å¼ æ·é', 'æ°è¯ç ååä½', '2026-05-22', 'å¤©æ´¥å¸æ¦æ¸
å¼ååº', 'æ°è¯ç ååæéæ±å·²ç¡®è®¤', NOW(), 1, 100), |
| | | ('天津ä¸å¤®è¯ä¸æéå
¬å¸', 'ééè´', '022-45678901', 'å¤©æ´¥å¸æ²³ååº', 'å¼ æ·é', 'å£åº¦éè´è®¡å', '2026-05-28', 'å¤©æ´¥å¸æ²³ååºä¸å±±è·¯120å·', 'ä¸å£åº¦éè´è®¡åå·²æ²éï¼è®¢åéé¢è®¡å¢é¿20%', NOW(), 1, 100), |
| | | ('天津太平æ´å¶è¯æéå
¬å¸', 'å¯ç»ç', '022-56789012', '天津å¸å®å»åº', 'å¼ æ·é', '产åä»£çæ´½è°', '2026-06-05', '天津å¸å®å»ç»æµå¼ååº', '代çå使å强ï¼éåå¤èµè´¨ææ', NOW(), 1, 100), |
| | | ('天津天士åå¶è¯éå¢è¡ä»½æéå
¬å¸', 'æ¹ä¸»ç®¡', '022-67890123', 'å¤©æ´¥å¸æ´¥ååº', 'å¼ æ·é', 'æç¥åä½ä¼ä¼´ä¼è®®', '2026-06-12', 'å¤©æ´¥å¸æ´¥ååºåé¸å£å·¥ä¸å', 'æç¥å使¡æ¶åè®®ç¾è®¢', NOW(), 1, 100); |
| | | |
| | | -- æ¥è¯¢æå
¥çæ°æ® |
| | | SELECT * FROM customer_visits WHERE visiting_people = 'å¼ æ·é' ORDER BY purpose_date DESC; |
| | |
| | | productionOrder.setStartTime(LocalDateTime.now()); |
| | | } |
| | | // 订åç¶æç±æåä¸éå·¥åºçåæ ¼äº§åºæ¨å¨ï¼é¿å
ä¸é´å·¥åºæåå®å·¥ã |
| | | productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode()); |
| | | if (isLastOperation) { |
| | | productionOrder.setCompleteQuantity(defaultDecimal(productionOrder.getCompleteQuantity()).add(productQty)); |
| | | if (productionOrder.getQuantity() != null |
| | | && productionOrder.getCompleteQuantity().compareTo(productionOrder.getQuantity()) >= 0) { |
| | | productionOrder.setEndTime(LocalDateTime.now()); |
| | | productionOrder.setStatus(ProductOrderStatusEnum.FINISHED.getCode()); |
| | | } else { |
| | | productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode()); |
| | | } |
| | | } else { |
| | | // éæåä¸éå·¥åºæ¥å·¥ï¼æ£æ¥è®¢åæ¯å¦å·²å®å·¥ï¼é¿å
è¦çå·²å®å·¥ç¶æ |
| | | if (!Integer.valueOf(ProductOrderStatusEnum.FINISHED.getCode()).equals(productionOrder.getStatus())) { |
| | | productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode()); |
| | | } |
| | | } |
| | | productionOrderMapper.updateById(productionOrder); |
| | |
| | | T1.contractAmounts, |
| | | IFNULL(T2.receiptPaymentAmount, 0) AS receiptPaymentAmount, |
| | | IFNULL(T3.outboundAmount, 0) - IFNULL(T4.returnAmount, 0) AS receiptableAmount |
| | | from (select customer_id, sum(contract_amount) as contractAmounts from sales_ledger group by customer_id) T1 |
| | | from (select customer_id, sum(contract_amount) as contractAmounts from sales_ledger where customer_id is not null group by customer_id) T1 |
| | | left join (select customer_id, sum(collection_amount) as receiptPaymentAmount from account_sales_collection group by customer_id) T2 on T1.customer_id = T2.customer_id |
| | | left join ( |
| | | SELECT |