Ver código fonte

项目成本——材料费明细对比

LLL 1 ano atrás
pai
commit
e715668caf

+ 86 - 4
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/controller/WzOutboundOrderHController.java

@@ -10,19 +10,25 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.projectCost.service.IProjectCostService;
+import org.jeecg.modules.wzOutboundOrder.convert.WzOutboundOrderBConvert;
 import org.jeecg.modules.wzOutboundOrder.entity.WzOutboundOrderH;
 import org.jeecg.modules.wzOutboundOrder.service.IWzOutboundOrderBService;
 import org.jeecg.modules.wzOutboundOrder.service.IWzOutboundOrderHService;
+import org.jeecg.modules.wzOutboundOrder.vo.CLFCompareListVO;
 import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBDetailListVO;
+import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBWLBMListVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -37,10 +43,86 @@ import java.util.stream.Collectors;
 @Slf4j
 public class WzOutboundOrderHController extends JeecgController<WzOutboundOrderH, IWzOutboundOrderHService> {
 	@Autowired
+	@SuppressWarnings("all")
 	private IWzOutboundOrderHService wzOutboundOrderHService;
 	@Autowired
+	@SuppressWarnings("all")
 	private IWzOutboundOrderBService bService;
+	@Autowired
+	@SuppressWarnings("all")
+	private IProjectCostService projectCostService;
+
+
+	/**
+	 * 项目成本——材料费详情对比
+	 */
+	@ApiOperation(value="项目成本——材料费详情对比", notes="项目成本——材料费详情对比")
+	@GetMapping(value = "/compareCLFDetailList")
+	public List<CLFCompareListVO> compareCLFDetailList(String tasknos) {
+		List<String> tasknoList = Arrays.asList(tasknos.split(","));
+		List<WzOutboundOrderH> hList =wzOutboundOrderHService.getCKDHByTasknos(tasknoList);//根据任务号列表查询所有出库单号
+
+		List<WzOutboundOrderH> list1 = new ArrayList<>();//正常出库单集合
+		List<WzOutboundOrderBWLBMListVO> wlbmList = new ArrayList<>();//所有物料编码集合
+		if (hList!=null && !hList.isEmpty()) {
+			for (WzOutboundOrderH h:hList){
+				//出库单号对应的物料单数量——大于5000被认为是异常数据,舍弃
+				Integer count = bService.getckDetailDataCountByCkdh(h.getCkdh());
+				if(count>5000) continue;
+				list1.add(h);//留下正常数据
+			}
+		}
+		if(!list1.isEmpty()){
+			List<String> ckdhList = list1.stream().map(i->i.getCkdh()).collect(Collectors.toList());//出库单号集合
+			if(!list1.isEmpty()) wlbmList = bService.selectWLBMList(ckdhList);//根据出库单号查询物料编码及单价、数量等
+		}
 
+		BigDecimal clf = BigDecimal.valueOf(0);//材料费
+		String rwh = ""; //任务号
+		String wlbm = ""; //物料编码
+		BigDecimal zsl = new BigDecimal(0); //总数量
+		BigDecimal zje = new BigDecimal(0); //总金额
+		List<CLFCompareListVO> bList = new ArrayList<>();//返回结果集合
+		int i = -1;
+		for (WzOutboundOrderBWLBMListVO bwlbmListVO : wlbmList){
+
+			BigDecimal cgdj = bwlbmListVO.getCgdj(); //采购单价
+			BigDecimal nbdj = bwlbmListVO.getNbdj(); //内部单价
+			BigDecimal sfzsl = bwlbmListVO.getSfzsl(); //实发主数量
+
+			/*如果实发主数量为空,则给默认值0*/
+			Optional<BigDecimal> sfzsl1 = Optional.ofNullable(sfzsl);
+			sfzsl = sfzsl1.orElse(BigDecimal.valueOf(0));
+
+			/*计算:采购单价或内部单价*实发主数量 (若没有采购单价,则使用内部单价)*/
+			BigDecimal wlf = BigDecimal.valueOf(0);
+			if (cgdj != null) {
+				wlf = cgdj.multiply(sfzsl);
+			} else if (nbdj != null) {
+				wlf = nbdj.multiply(sfzsl);
+			}
+			clf = wlf;
+
+			zsl = sfzsl; //总数量
+			zje = clf; //总金额
+
+			//相同,则与上一个累加
+			if(bwlbmListVO.getRwh().equals(rwh) && bwlbmListVO.getWlbm().equals(wlbm)){
+				CLFCompareListVO vo = bList.get(i);
+				vo.setZje(vo.getZje().add(zje));
+				vo.setZsl(vo.getZsl().add(zsl));
+			}else { //不相同,直接加入集合
+				CLFCompareListVO clfCompareListVO = WzOutboundOrderBConvert.INSTANCE.toCLFCompareListVO(bwlbmListVO.getWlbm(), bwlbmListVO.getRwh(), zsl, zje);
+				bList.add(clfCompareListVO);
+				i++;
+			}
+
+			rwh = bwlbmListVO.getRwh();
+			wlbm = bwlbmListVO.getWlbm();
+		}
+
+		return bList;
+	}
 
 	 /**
 	  * 材料费详情
@@ -49,15 +131,15 @@ public class WzOutboundOrderHController extends JeecgController<WzOutboundOrderH
 	 @GetMapping(value = "/getCLFList")
 	 public List<WzOutboundOrderBDetailListVO> getCLFList(String taskno) {
 
-		 List<WzOutboundOrderBDetailListVO> bList = new ArrayList<>();
+	 	List<WzOutboundOrderBDetailListVO> bList = new ArrayList<>();
 
 	 	QueryWrapper<WzOutboundOrderH> wrapper = new QueryWrapper<>();
 	 	wrapper.eq("rwh",taskno);
 	 	List<WzOutboundOrderH> list =wzOutboundOrderHService.list(wrapper);
 	 	List<WzOutboundOrderH> list1 = new ArrayList<>();
-	 	if (!list.isEmpty()) {
+	 	if (list!=null && !list.isEmpty()) {
 			for (WzOutboundOrderH h:list){
-				//出库单号对应的物料单数量
+				//出库单号对应的物料单数量——大于5000被认为是异常数据,舍弃
 				Integer count = bService.getckDetailDataCountByCkdh(h.getCkdh());
 				if(count>5000) continue;
 				list1.add(h);
@@ -65,7 +147,7 @@ public class WzOutboundOrderHController extends JeecgController<WzOutboundOrderH
 			}
 			if(!list1.isEmpty()){
 				List<String> list2 = list1.stream().map(i->i.getCkdh()).collect(Collectors.toList());
-				bList = bService.wzDetailList(list2);
+				if(!list2.isEmpty()) bList = bService.wzDetailList(list2);
 			}
 		}
 

+ 19 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/convert/WzOutboundOrderBConvert.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.wzOutboundOrder.convert;
+
+import org.jeecg.modules.wzOutboundOrder.vo.CLFCompareListVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.util.stream.Collectors;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,imports ={ CollectionUtils.class, Collectors.class})
+public interface WzOutboundOrderBConvert {
+
+    WzOutboundOrderBConvert INSTANCE = Mappers.getMapper(WzOutboundOrderBConvert.class);
+
+    CLFCompareListVO toCLFCompareListVO(String wlbm, String rwh, BigDecimal zsl, BigDecimal zje);
+
+}

+ 5 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/mapper/WzOutboundOrderBMapper.java

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Select;
 import org.jeecg.modules.wzOutboundOrder.entity.WzOutboundOrderB;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBDetailListVO;
+import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBWLBMListVO;
 
 /**
  * @Description: 物资出库明细
@@ -16,6 +17,10 @@ import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBDetailListVO;
  */
 public interface WzOutboundOrderBMapper extends BaseMapper<WzOutboundOrderB> {
 
+
+    /**根据出库单号查物料编码*/
+    List<WzOutboundOrderBWLBMListVO> selectWLBMList(List<String> ckdhList);
+
     /**查出库单号对应的物料单数量*/
     @Select("select count(1) from wz_outbound_order_b where ckdh = #{ckdh}")
     public Integer getckDetailDataCountByCkdh(String ckdh);

+ 3 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/mapper/WzOutboundOrderHMapper.java

@@ -15,6 +15,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface WzOutboundOrderHMapper extends BaseMapper<WzOutboundOrderH> {
 
+    /**根据任务号列表查询所有出库单号*/
+    public List<WzOutboundOrderH> getCKDHByTasknos(List<String> tasknoList);
+
     /**根据任务号查询出库单号集合*/
     @Select("select h.ckdh from wz_outbound_order_h h where h.rwh = #{taskNo}")
     public List<String> getCKDHList(@Param("taskNo") String taskNo);

+ 10 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/mapper/xml/WzOutboundOrderBMapper.xml

@@ -9,6 +9,16 @@
         <result column="sfzsl" property="sfzsl" jdbcType="VARCHAR"/>
     </resultMap>
 
+    <!-- 根据出库单号查物料编码 -->
+    <select id="selectWLBMList" resultType="org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBWLBMListVO">
+        select b.wlbm, h.rwh, b.cgdj, b.nbdj, b.sfzsl from wz_outbound_order_b b
+        left join wz_outbound_order_h h on h.ckdh = b.ckdh
+        where b.ckdh in
+        <foreach collection="ckdhList" index="index" item="ckdh" open="(" separator="," close=")">
+            #{ckdh}
+        </foreach>
+        order by wlbm asc, rwh asc
+    </select>
 
     <!-- 根据出库单号集合查询物资出库明细 -->
     <select id="wzDetailList" resultMap="WzOutboundOrderBDetailListVO">

+ 11 - 1
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/mapper/xml/WzOutboundOrderHMapper.xml

@@ -2,4 +2,14 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.wzOutboundOrder.mapper.WzOutboundOrderHMapper">
 
-</mapper>
+
+
+    <!-- 根据任务号列表查询所有出库单号 -->
+    <select id="getCKDHByTasknos" resultType="org.jeecg.modules.wzOutboundOrder.entity.WzOutboundOrderH">
+        select * from wz_outbound_order_h where rwh in
+        <foreach collection="tasknoList" index="index" item="taskno" open="(" separator="," close=")">
+            #{taskno}
+        </foreach>
+    </select>
+
+</mapper>

+ 4 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/service/IWzOutboundOrderBService.java

@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.wzOutboundOrder.entity.WzOutboundOrderB;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBDetailListVO;
+import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBWLBMListVO;
 
 import java.util.List;
 
@@ -15,6 +16,9 @@ import java.util.List;
  */
 public interface IWzOutboundOrderBService extends IService<WzOutboundOrderB> {
 
+    /**根据出库单号查物料编码*/
+    public List<WzOutboundOrderBWLBMListVO> selectWLBMList(List<String> ckdhList);
+
     /**查出库单号对应的物料单数量*/
     public Integer getckDetailDataCountByCkdh(String ckdh);
 

+ 5 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/service/IWzOutboundOrderHService.java

@@ -3,6 +3,8 @@ package org.jeecg.modules.wzOutboundOrder.service;
 import org.jeecg.modules.wzOutboundOrder.entity.WzOutboundOrderH;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 物资出库单
  * @Author: jeecg-boot
@@ -11,4 +13,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IWzOutboundOrderHService extends IService<WzOutboundOrderH> {
 
+    /**根据任务号列表查询所有出库单号*/
+    public List<WzOutboundOrderH> getCKDHByTasknos(List<String> tasknoList);
+
 }

+ 6 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/service/impl/WzOutboundOrderBServiceImpl.java

@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.wzOutboundOrder.entity.WzOutboundOrderB;
 import org.jeecg.modules.wzOutboundOrder.mapper.WzOutboundOrderBMapper;
 import org.jeecg.modules.wzOutboundOrder.service.IWzOutboundOrderBService;
+import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBWLBMListVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.jeecg.modules.wzOutboundOrder.vo.WzOutboundOrderBDetailListVO;
@@ -25,6 +26,11 @@ public class WzOutboundOrderBServiceImpl extends ServiceImpl<WzOutboundOrderBMap
     @SuppressWarnings("all")
     private WzOutboundOrderBMapper bMapper;
 
+    /**根据出库单号查物料编码*/
+    public List<WzOutboundOrderBWLBMListVO> selectWLBMList(List<String> ckdhList){
+        return bMapper.selectWLBMList(ckdhList);
+    }
+
     /**查出库单号对应的物料单数量*/
     public Integer getckDetailDataCountByCkdh(String ckdh){
         return bMapper.getckDetailDataCountByCkdh(ckdh);

+ 12 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/service/impl/WzOutboundOrderHServiceImpl.java

@@ -3,10 +3,13 @@ package org.jeecg.modules.wzOutboundOrder.service.impl;
 import org.jeecg.modules.wzOutboundOrder.entity.WzOutboundOrderH;
 import org.jeecg.modules.wzOutboundOrder.mapper.WzOutboundOrderHMapper;
 import org.jeecg.modules.wzOutboundOrder.service.IWzOutboundOrderHService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.List;
+
 /**
  * @Description: 物资出库单
  * @Author: jeecg-boot
@@ -16,4 +19,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class WzOutboundOrderHServiceImpl extends ServiceImpl<WzOutboundOrderHMapper, WzOutboundOrderH> implements IWzOutboundOrderHService {
 
+    @Autowired
+    @SuppressWarnings("all")
+    private WzOutboundOrderHMapper hMapper;
+
+    /**根据任务号列表查询所有出库单号*/
+    public List<WzOutboundOrderH> getCKDHByTasknos(List<String> tasknoList){
+        return hMapper.getCKDHByTasknos(tasknoList);
+    }
+
 }

+ 28 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/vo/CLFCompareListVO.java

@@ -0,0 +1,28 @@
+package org.jeecg.modules.wzOutboundOrder.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+
+@Data
+public class CLFCompareListVO {
+
+    /**物料编码*/
+    @Excel(name = "物料编码", width = 15)
+    @ApiModelProperty(value = "物料编码")
+    private java.lang.String wlbm;
+    /**任务号*/
+    @Excel(name = "任务号", width = 15)
+    @ApiModelProperty(value = "任务号")
+    private java.lang.String rwh;
+    /**总金额*/
+    @Excel(name = "总金额", width = 15)
+    @ApiModelProperty(value = "总金额")
+    private java.math.BigDecimal zje;
+    /**总数量*/
+    @Excel(name = "总数量", width = 15)
+    @ApiModelProperty(value = "总数量")
+    private java.math.BigDecimal zsl;
+
+}

+ 33 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/vo/WzOutboundOrderBWLBMListVO.java

@@ -0,0 +1,33 @@
+package org.jeecg.modules.wzOutboundOrder.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+@Data
+public class WzOutboundOrderBWLBMListVO {
+
+    /**物料编码*/
+    @Excel(name = "物料编码", width = 15)
+    @ApiModelProperty(value = "物料编码")
+    private java.lang.String wlbm;
+    /**任务号*/
+    @Excel(name = "任务号", width = 15)
+    @ApiModelProperty(value = "任务号")
+    private java.lang.String rwh;
+    /**采购单价*/
+    @Excel(name = "采购单价", width = 15)
+    @ApiModelProperty(value = "采购单价")
+    private java.math.BigDecimal cgdj;
+    /**内部单价*/
+    @Excel(name = "内部单价", width = 15)
+    @ApiModelProperty(value = "内部单价")
+    private java.math.BigDecimal nbdj;
+    /**实发主数量*/
+    @Excel(name = "实发主数量", width = 15)
+    @ApiModelProperty(value = "实发主数量")
+    private java.math.BigDecimal sfzsl;
+
+}