From 4d1a30da0ec4d37694baeb129a9a21aa29c157b7 Mon Sep 17 00:00:00 2001
From: Fancy <Fancy.fx@outlook.com>
Date: 星期四, 22 八月 2024 10:19:15 +0800
Subject: [PATCH] fix order complete Rate

---
 pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/order/OrderSv.java |   56 +++++++++++++++---
 pms-parent/pms-global/src/main/resources/mapper/PrOrderMapper.xml             |   66 +++++++++++-----------
 2 files changed, 80 insertions(+), 42 deletions(-)

diff --git a/pms-parent/pms-global/src/main/resources/mapper/PrOrderMapper.xml b/pms-parent/pms-global/src/main/resources/mapper/PrOrderMapper.xml
index 38ea656..705cb10 100644
--- a/pms-parent/pms-global/src/main/resources/mapper/PrOrderMapper.xml
+++ b/pms-parent/pms-global/src/main/resources/mapper/PrOrderMapper.xml
@@ -46,27 +46,27 @@
         <include refid="Base_Column_List" />
         from pr_order p
         where p.deleted!=1
-        <trim prefix="and " suffixOverrides="and">
+        <trim prefix="and" suffixOverrides="and">
             <if test="name != null and name != ''">
-                and  name like concat('%', #{name}, '%')
+                  name like concat('%', #{name}, '%') and
             </if>
             <if test="customerName != null and customerName != ''">
-                and customer_name like concat('%', #{customerName}, '%')
+                 customer_name like concat('%', #{customerName}, '%') and
             </if>
             <if test="projectName != null and projectName != ''">
-                and project_name like concat('%', #{projectName}, '%')
+                 project_name like concat('%', #{projectName}, '%') and
             </if>
             <if test="director != null and director != ''">
-                and director like concat('%', #{director}, '%')
+                 director like concat('%', #{director}, '%') and
             </if>
-            <if test="startDate != null">
-                and delivery_date <![CDATA[ > ]]> #{startDate,jdbcType=VARCHAR}
+            <if test="startDate != null and startDate != ''">
+                 delivery_date <![CDATA[ > ]]> #{startDate,jdbcType=VARCHAR} and
             </if>
-            <if test="endDate != null">
-                and delivery_date <![CDATA[ < ]]> #{endDate,jdbcType=VARCHAR}
+            <if test="endDate != null and endDate != ''">
+                 delivery_date <![CDATA[ < ]]> #{endDate,jdbcType=VARCHAR} and
             </if>
-            <if test="status != null">
-                and status = #{status,jdbcType=TINYINT}
+            <if test="status != null and status != ''">
+                 status = #{status,jdbcType=TINYINT} and
             </if>
         </trim>
         order by id desc
@@ -81,27 +81,27 @@
         select count(1)
         from pr_order p
         where p.deleted!=1
-        <trim prefix="and " suffixOverrides="and">
+        <trim prefix="and" suffixOverrides="and">
             <if test="name != null and name != ''">
-                and  name like concat('%', #{name}, '%')
+                 name like concat('%', #{name}, '%') and
             </if>
             <if test="customerName != null and customerName != ''">
-                and customer_name like concat('%', #{customerName}, '%')
+                 customer_name like concat('%', #{customerName}, '%') and
             </if>
             <if test="projectName != null and projectName != ''">
-                and project_name like concat('%', #{projectName}, '%')
+                 project_name like concat('%', #{projectName}, '%') and
             </if>
             <if test="director != null and director != ''">
-                and director like concat('%', #{director}, '%')
+                 director like concat('%', #{director}, '%') and
             </if>
-            <if test="startDate != null">
-                and delivery_date <![CDATA[ > ]]> #{startDate,jdbcType=VARCHAR}
+            <if test="startDate != null and startDate != ''">
+                 delivery_date <![CDATA[ > ]]> #{startDate,jdbcType=VARCHAR} and
             </if>
-            <if test="endDate != null">
-                and delivery_date <![CDATA[ < ]]> #{endDate,jdbcType=VARCHAR}
+            <if test="endDate != null and endDate != ''">
+                 delivery_date <![CDATA[ < ]]> #{endDate,jdbcType=VARCHAR} and
             </if>
-            <if test="status != null">
-                and status = #{status,jdbcType=TINYINT}
+            <if test="status != null and status != ''">
+                 status = #{status,jdbcType=TINYINT} and
             </if>
         </trim>
     </select>
@@ -110,27 +110,27 @@
         <include refid="Base_Column_List" />
         from pr_order p
         where p.deleted!=1
-        <trim prefix="and " suffixOverrides="and">
+        <trim prefix="and" suffixOverrides="and">
             <if test="name != null and name != ''">
-                and name like concat('%', #{name}, '%')
+                 name like concat('%', #{name}, '%') and
             </if>
             <if test="customerName != null and customerName != ''">
-                and customer_name like concat('%', #{customerName}, '%')
+                 customer_name like concat('%', #{customerName}, '%') and
             </if>
             <if test="projectName != null and projectName != ''">
-                and project_name like concat('%', #{projectName}, '%')
+                 project_name like concat('%', #{projectName}, '%') and
             </if>
             <if test="director != null and director != ''">
-                and director like concat('%', #{director}, '%')
+                 director like concat('%', #{director}, '%') and
             </if>
-            <if test="startDate != null">
-                and delivery_date <![CDATA[ > ]]> #{startDate,jdbcType=VARCHAR}
+            <if test="startDate != null and startDate != ''">
+                 delivery_date <![CDATA[ > ]]> #{startDate,jdbcType=VARCHAR} and
             </if>
-            <if test="endDate != null">
-                and delivery_date <![CDATA[ < ]]> #{endDate,jdbcType=VARCHAR}
+            <if test="endDate != null and endDate != ''">
+                 delivery_date <![CDATA[ < ]]> #{endDate,jdbcType=VARCHAR} and
             </if>
-            <if test="status != null">
-                and status = #{status,jdbcType=TINYINT}
+            <if test="status != null and status != ''">
+                 status = #{status,jdbcType=TINYINT} and
             </if>
         </trim>
         order by id desc
diff --git a/pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/order/OrderSv.java b/pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/order/OrderSv.java
index d0140b4..c50b240 100644
--- a/pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/order/OrderSv.java
+++ b/pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/order/OrderSv.java
@@ -19,6 +19,8 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 import java.util.Map;
 
@@ -32,6 +34,7 @@
     private OthFileMapper othFileMapper;
     @Value("${dy.webFile.fmUrl}")
     private String fmUrl;
+
     @Autowired
     public void setOrderDao(PrOrderMapper orderDao) {
         this.orderDao = orderDao;
@@ -66,29 +69,33 @@
         }
         p.setDeleted(false);
         BaUser loginUser = userUtil.getUser(UserTokenContext.get());
-        if(loginUser!=null){
+        if (loginUser != null) {
             p.creator = loginUser.id;
         }
         int count = orderDao.insertSelective(p);
         saveOrderItems(p);
         return count;
     }
+
     @Transactional
     public int update(PrOrder p) {
         if (orderDao.exists(p.name, p.id)) {
             throw new RuntimeException("璁㈠崟鍚嶇О涓嶈兘閲嶅");
         }
         int count = orderDao.updateByPrimaryKeySelective(p);
-        saveOrderItems(p);
+        if (count > 0) {
+            saveOrderItems(p);
+        }
         return count;
     }
+
     private void saveOrderItems(PrOrder p) {
-        p.items.forEach(param->{
-            param.orderId=p.id;
-            if(param.id !=null){
+        p.items.forEach(param -> {
+            param.orderId = p.id;
+            if (param.id != null) {
                 orderItemDao.updateByPrimaryKeySelective(param);
-            }else{
-                param.deleted=false;
+            } else {
+                param.deleted = false;
                 orderItemDao.insert(param);
             }
         });
@@ -96,6 +103,7 @@
 
     /**
      * 閫昏緫鍒犻櫎瀹炰綋
+     *
      * @param id 瀹炰綋ID
      * @return 褰卞搷璁板綍鏁伴噺
      */
@@ -105,7 +113,7 @@
     }
 
     public PrOrder selectById(String proId) {
-        PrOrder pro=orderDao.selectByPrimaryKey(Long.valueOf(proId));
+        PrOrder pro = orderDao.selectByPrimaryKey(Long.valueOf(proId));
         return pro;
     }
 
@@ -122,11 +130,41 @@
         //璁$畻鍒嗛〉绛変俊鎭�
         rsVo.calculateAndSet(itemTotal, params);
 
+        List<PrOrder> orderList = orderDao.selectSome(params);
+        for (PrOrder prOrder : orderList) {
+            changeRate(prOrder);
+        }
         //鏌ヨ绗﹀悎鏉′欢鐨勮褰�
-        rsVo.obj = orderDao.selectSome(params);
+        rsVo.obj = orderList;
         return rsVo;
     }
 
+    private void changeRate(PrOrder prOrder) {
+        List<PrOrderItem> items = prOrder.items;
+        for (int i = 1; i < items.size(); i++) {
+            for (int j = i - 1; j >= 0; j--) {
+                //鎷跨潃i渚濇璺熶笂涓�涓瘮杈�,濡傛灉浜у搧鐩稿悓,鍒欎笂涓�涓褰昪omplete_number - number 濡傛灉 > 0 鍒嗙粰i ,濡傛灉 < 0 鍒欏皢 complete_number 缃负0
+                if (items.get(j).getProId().intValue() == items.get(i).getProId().intValue()) {
+                    int remainNumber = items.get(j).getCompleteNumber() - items.get(j).getNumber();
+                    if (remainNumber > 0) {
+                        items.get(j).setCompleteNumber(items.get(j).getNumber());
+                        items.get(j).setCompleteRate("100.00%");
+                        items.get(i).setCompleteNumber(remainNumber);
+                        BigDecimal remainBig = new BigDecimal(remainNumber * 100);
+                        BigDecimal iNumberBig = new BigDecimal(items.get(i).getNumber());
+                        BigDecimal result = remainBig.divide(iNumberBig, 2, RoundingMode.HALF_UP);
+                        items.get(i).setCompleteRate(result.toString() +"%");
+                    }else{
+                        items.get(i).setCompleteNumber(0);
+                        items.get(i).setCompleteRate("0.00%");
+                    }
+                    break;
+                }
+            }
+        }
+        prOrder.setItems(items);
+    }
+
     public List<PrOrder> selectAll(QueryVo queryVo) {
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
         return orderDao.selectAll(params);

--
Gitblit v1.8.0