Fancy
2024-08-22 4d1a30da0ec4d37694baeb129a9a21aa29c157b7
fix order complete Rate
2个文件已修改
122 ■■■■■ 已修改文件
pms-parent/pms-global/src/main/resources/mapper/PrOrderMapper.xml 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/order/OrderSv.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
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依次跟上一个比较,如果产品相同,则上一个记录complete_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);