Fancy
2024-08-26 2757ea108a2e870a72978f9957c8454af605176c
pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/order/OrderSv.java
@@ -1,25 +1,22 @@
package com.dy.pmsProduct.order;
import cn.hutool.core.codec.Base64;
import com.dy.common.webFilter.UserTokenContext;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pmsGlobal.daoOth.OthFileMapper;
import com.dy.pmsGlobal.daoPr.*;
import com.dy.pmsGlobal.dyFile.FileOperate;
import com.dy.pmsGlobal.pojoPlt.PltProduct;
import com.dy.pmsGlobal.pojoBa.BaUser;
import com.dy.pmsGlobal.pojoPr.*;
import com.dy.pmsGlobal.util.QrCodeUtil;
import com.dy.pmsGlobal.util.UserUtil;
import com.dy.pmsProduct.process.QueryVo;
import com.google.zxing.WriterException;
import com.dy.pmsProduct.taskPlan.PlanStatusEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
@@ -29,10 +26,7 @@
    private PrOrderMapper orderDao;
    private PrOrderItemMapper orderItemDao;
    private UserUtil userUtil;
    private FileOperate fileOperate;
    private OthFileMapper othFileMapper;
    @Value("${dy.webFile.fmUrl}")
    private String fmUrl;
    @Autowired
    public void setOrderDao(PrOrderMapper orderDao) {
        this.orderDao = orderDao;
@@ -47,43 +41,42 @@
    public void setUserUtil(UserUtil userUtil) {
        this.userUtil = userUtil;
    }
    @Autowired
    public void setFileOperate(FileOperate fileOperate) {
        this.fileOperate = fileOperate;
    }
    @Autowired
    public void setOthFileMapper(OthFileMapper othFileMapper) {
        this.othFileMapper = othFileMapper;
    }
    @Transactional
    public int save(PrOrder p) {
        p.id = null;
        //判断产品不能重名
        if (orderDao.exists(p.name, p.id)) {
            throw new RuntimeException("订单名称不能重复");
        }
        p.setDeleted(false);
        BaUser loginUser = userUtil.getUser(UserTokenContext.get());
        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);
            }
        });
@@ -91,6 +84,7 @@
    /**
     * 逻辑删除实体
     *
     * @param id 实体ID
     * @return 影响记录数量
     */
@@ -100,7 +94,8 @@
    }
    public PrOrder selectById(String proId) {
        PrOrder pro=orderDao.selectByPrimaryKey(Long.valueOf(proId));
        PrOrder pro = orderDao.selectByPrimaryKey(Long.valueOf(proId));
        changeRate(pro);
        return pro;
    }
@@ -117,13 +112,84 @@
        //计算分页等信息
        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;
                }
            }
        }
    }
    public List<PrOrder> selectAll(QueryVo queryVo) {
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
        return orderDao.selectAll(params);
        List<PrOrder> orderList = orderDao.selectAll(params);
        for (PrOrder prOrder : orderList) {
            changeRate(prOrder);
        }
        return orderList;
    }
    /**
     * 只更新状态,不更新其他字段
     * @param order
     * 更新状态  如果有在执行中的任务,不让暂停
     * @return
     */
   @Transactional
    public int updateStatus(PrOrder order) {
        if(order.status == OrderStatusEnum.NORMAL.getCode()){
            PrOrder prOrder = orderDao.selectByPrimaryKey(order.id);
            prOrder.status = order.status;
            //extractedCheck(prOrder);
        }
       PrOrder param = new PrOrder();
        param.id =order.id;
        param.status = order.status;
        return orderDao.updateByPrimaryKeySelective(param);
    }
    /*private void extractedCheck(PrOrder order) {
        PrProductionProcess process = processDao.selectByPrimaryKey(plan.processId);
        if(process == null || !process.proId.equals(plan.proId)){
            throw new RuntimeException("产品与生产流程不匹配");
        }
        //开始日期要小于结束日期
        if(plan.startDate.compareTo(plan.endDate) > 0){
            throw new RuntimeException("开始日期不能大于结束日期");
        }
        //Fancy add 2024/07/09   如果状态为执行 ,则结束日期必须大于等于当前日期
        if(plan.status == PlanStatusEnum.NORMAL.getCode()){
            String endDateStr = plan.getEndDate();
            LocalDate endDate = LocalDate.parse(endDateStr, DateTimeFormatter.ISO_LOCAL_DATE);
            LocalDate nextDay = endDate.plusDays(1);
            LocalDate today = LocalDate.now(); // 获取当前日期
            if (nextDay.isBefore(today)) {
                throw new RuntimeException("执行状态结束日期必须大于等于当前日期,请修改结束日期");
            }
        }
    }*/
}