Browse Source

【思拓微】【OA对接】【BOM成本接口】

wub 11 months ago
parent
commit
150aef8b38

+ 5 - 0
src/main/java/com/uas/eis/controller/STKController.java

@@ -41,4 +41,9 @@ public class STKController {
     public Result getProject(HttpServletRequest request, @RequestBody ProductPageDTO productPageDTO){
     public Result getProject(HttpServletRequest request, @RequestBody ProductPageDTO productPageDTO){
         return stkService.getProject(productPageDTO);
         return stkService.getProject(productPageDTO);
     }
     }
+
+    @PostMapping("/api/getBomCost")
+    public Result getBomCost(HttpServletRequest request, @RequestBody BomReq bomReq){
+        return stkService.getBomCost(bomReq);
+    }
 }
 }

+ 30 - 0
src/main/java/com/uas/eis/sdk/dto/BomCostDTO.java

@@ -0,0 +1,30 @@
+package com.uas.eis.sdk.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+/**
+ * dto说明
+ * */
+
+@Data
+@NoArgsConstructor
+public class BomCostDTO {
+
+    /**
+     *主键ID
+     * */
+    private String bs_level;
+    private String bs_soncode;
+    private String pr_detail;
+    private String pr_spec;
+    private String bd_location;
+    private Double pr_smtpoint;
+    private Double bs_baseqty;
+    private String bs_currency;
+    private Integer bs_rate;
+    private Double bs_purcprice;
+    private Double bs_m;
+    private String pr_brand;
+}

+ 142 - 1
src/main/java/com/uas/eis/service/Impl/STKServiceImpl.java

@@ -6,6 +6,7 @@ import com.uas.eis.convertor.BomDetailConvertor;
 import com.uas.eis.convertor.ProductConvertor;
 import com.uas.eis.convertor.ProductConvertor;
 import com.uas.eis.convertor.ProjectConvertor;
 import com.uas.eis.convertor.ProjectConvertor;
 import com.uas.eis.dao.BaseDao;
 import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
 import com.uas.eis.sdk.dto.*;
 import com.uas.eis.sdk.dto.*;
 import com.uas.eis.sdk.resp.*;
 import com.uas.eis.sdk.resp.*;
 import com.uas.eis.service.RequestSTKService;
 import com.uas.eis.service.RequestSTKService;
@@ -16,7 +17,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * @author
  * @author
@@ -97,7 +100,145 @@ public class STKServiceImpl implements STKService {
         }
         }
 
 
         List<ProjectResp> projectResps = ProjectConvertor.toProjectRespListByProjectDTOs(projectDTOList);
         List<ProjectResp> projectResps = ProjectConvertor.toProjectRespListByProjectDTOs(projectDTOList);
-        return Result.success(projectResps);
+
+        Map<String,Object> map = new HashMap<>();
+        map.put("pageNum", pageNum);
+        map.put("pageSize", pageSize);
+        map.put("size", projectDTOList.size());
+        map.put("list", projectResps);
+        return Result.success(map);
+    }
+
+    @Override
+    public Result getBomCost(BomReq bomReq) {
+        String bomId = bomReq.getBomId();
+        Object bo_mothercode = null;
+
+        if (bomId == null || Integer.valueOf(bomId) == 0){
+            return Result.error("BOMID不存在!");
+        }else{
+            bo_mothercode = baseDao.getFieldDataByCondition("bom", "bo_mothercode", "bo_id=" + bomId);
+        }
+        if(bo_mothercode==null){
+            return Result.error("BOM母件编号不存在!");
+        }
+        baseDao.procedure("SP_COSTCOUNT", new Object[] { bomId, bo_mothercode, "最新采购单价" });
+        bomPrint(Integer.valueOf(bomId),"BOM!BOMCostDetail!Print");
+
+        int pageNum = 1;
+        int pageSize = 20;
+        if (bomReq !=null){
+            pageNum = Integer.valueOf(bomReq.getPageNum());
+            pageSize = Integer.valueOf(bomReq.getPageSize());
+        }else{
+            return Result.error("参数错误!");
+        }
+
+        int start = ((pageNum - 1) * pageSize + 1);
+        int end = pageNum * pageSize;
+
+        List<BomCostDTO> bomCostDTOList = baseDao.query("select * from (select rownum rn,AA.* from ( " +
+                " select BS_LEVEL,BS_SONCODE,Product.PR_DETAIL,Product.PR_SPEC,bd_location,Product.PR_SMTPOINT,BS_BASEQTY,BS_CURRENCY, " +
+                " BS_RATE,case when BS_CURRENCY='RMB' then round(BS_PURCPRICE,8) else round(BS_PURCPRICE*CR_RATE,8) end BS_PURCPRICE,round(BS_M,8) BS_M,Product.pr_brand " +
+                " from  BOMStruct " +
+                " LEFT JOIN Currencys ON BOMStruct.BS_CURRENCY=Currencys.CR_NAME" +
+                " LEFT JOIN Vendor     ON BOMStruct.BS_VENDNAME=Vendor.VE_NAME" +
+                " LEFT JOIN Product     ON BOMStruct.BS_SONCODE=Product.PR_CODE" +
+                " LEFT JOIN BOM         ON BOMStruct.BS_TOPBOMID=BOM.BO_ID" +
+                " LEFT JOIN Product Product_1 ON BOM.BO_MOTHERCODE=Product_1.PR_CODE" +
+                " LEFT JOIN BOMDETAIL ON bd_bomid=bo_id AND Product.PR_CODE=BOMDETAIL.bd_soncode" +
+                " where bo_id=110059" +
+                " ORDER BY BOMStruct.BS_IDCODE " +
+                " ) AA ) where rn>="+start+" and rn<="+end , BomCostDTO.class);
+
+        if (bomCostDTOList.size() == 0 ){
+            return Result.error("BOM成本无数据!");
+        }
+        Map<String,Object> map = new HashMap<>();
+        map.put("pageNum", pageNum);
+        map.put("pageSize", pageSize);
+        map.put("size", bomCostDTOList.size());
+        map.put("list", bomCostDTOList);
+        return Result.success(map);
+    }
+
+    /**
+     * bom成本计算 打印前执行方法
+     * @param id
+     */
+    public void bomPrint(Integer id,String caller){
+        String SQLStr = null, thisMonthercode = null;
+        Object ob = baseDao.getFieldDataByCondition("bom", "bo_mothercode", "bo_id="+id);
+        if(ob != null){
+            thisMonthercode = ob.toString();
+        }
+        // 取出当月汇率
+        double ThisUSDRate =Double.parseDouble(baseDao.getFieldDataByCondition("Currencys","nvl(max(cr_rate),0)"," cr_name='USD' and nvl(cr_status,' ')<>'已禁用'").toString());
+        double ThisHKDRate =Double.parseDouble(baseDao.getFieldDataByCondition("Currencys","nvl(max(cr_rate),0)"," cr_name='HKD' and nvl(cr_status,' ')<>'已禁用'").toString());
+		/*if (ThisUSDRate == 0) {
+			BaseUtil.showError("币别表未设置美金汇率!");
+		}  xzx 2017090191号问题反馈*/
+        SQLStr = "update BomStruct  set bs_osprice=0 where bs_topbomid=" + id + " and bs_osprice is null ";
+        baseDao.execute(SQLStr);
+        SQLStr = "merge into BomStruct using (select cr_rate,cr_name from currencys where nvl(cr_status,' ')<>'已禁用') src on( bs_currency=cr_name) when matched then update set bs_l=(CASE WHEN bs_currency='RMB' then bs_purcprice/(1+bs_rate/100) ELSE bs_purcprice*cr_rate  END) where bs_topbomid="
+                + id + " and bs_topmothercode='"+thisMonthercode+"' and (nvl(bs_sonbomid,0)=0 or nvl(bs_sonbomid,0) in (select bo_id from bom left join bomlevel on bl_code=bo_level where nvl(bo_level,' ')='外购件BOM' or nvl(bl_ifpurchase,0)<>0 ))  ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_m=bs_l*bs_baseqty where bs_topbomid=" + id + " and bs_topmothercode='"+thisMonthercode+"' and (nvl(bs_sonbomid,0)=0 or nvl(bs_sonbomid,0) in (select bo_id from bom left join bomlevel on bl_code=bo_level where nvl(bo_level,' ')='外购件BOM' or nvl(bl_ifpurchase,0)<>0 ))";
+        baseDao.execute(SQLStr);
+        SQLStr = "merge into BomStruct using(select cr_rate,cr_name from currencys where nvl(cr_status,' ')<>'已禁用') src on(bs_currency=cr_name)when matched then update set bs_j=(CASE WHEN bs_currency='RMB' then bs_purcprice ELSE bs_purcprice*cr_rate END) where bs_topbomid="
+                + id + " and bs_topmothercode='"+thisMonthercode+"' and (nvl(bs_sonbomid,0)=0 or nvl(bs_sonbomid,0) in (select bo_id from bom left join bomlevel on bl_code=bo_level where nvl(bo_level,' ')='外购件BOM' or nvl(bl_ifpurchase,0)<>0 )) ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_k=bs_j*bs_baseqty where bs_topbomid=" + id + " and (nvl(bs_sonbomid,0)=0 or nvl(bs_sonbomid,0) in (select bo_id from bom left join bomlevel on bl_code=bo_level where nvl(bo_level,' ')='外购件BOM' or nvl(bl_ifpurchase,0)<>0 )) ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_n=CASE WHEN bs_currency='RMB' then bs_l ELSE bs_purcprice END where bs_topbomid=" + id + " and bs_topmothercode='"+thisMonthercode+"' and (nvl(bs_sonbomid,0)=0 or nvl(bs_sonbomid,0) in (select bo_id from bom left join bomlevel on bl_code=bo_level where nvl(bo_level,' ')='外购件BOM' or nvl(bl_ifpurchase,0)<>0 )) ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_o=bs_n*bs_baseqty where bs_topbomid=" + id + " and bs_topmothercode='"+thisMonthercode+"' and (nvl(bs_sonbomid,0)=0 or nvl(bs_sonbomid,0) in (select bo_id from bom left join bomlevel on bl_code=bo_level where nvl(bo_level,' ')='外购件BOM' or nvl(bl_ifpurchase,0)<>0 )) ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_remark='' where  bs_topbomid=" + id+" and bs_topmothercode='"+thisMonthercode+"' ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_usdrate=" + ThisUSDRate + ",bs_hkdrate=" + ThisHKDRate
+                + " where bs_topbomid=" + id+" and bs_topmothercode='"+thisMonthercode+"' ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_remark='father' where bs_topbomid=" + id + " and bs_topmothercode='"+thisMonthercode+"' and nvl(bs_sonbomid,0)>0 ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_remark='father' where bs_topbomid=" + id + " and bs_soncode='" + thisMonthercode + "' ";
+        baseDao.execute(SQLStr);
+        SQLStr = "update BomStruct set bs_currency='RMB',bs_purcprice=bs_osprice,bs_purcpricermb=0,bs_totalpurcpricermb=0,bs_totalpurcpriceusd=0 where bs_topbomid="
+                + id + " and bs_topmothercode='"+thisMonthercode+"' and (nvl(bs_sonbomid,0)>0 or bs_soncode='" + thisMonthercode + "') and nvl(bs_sonbomid,0) not in (select bo_id from bom left join bomlevel on bl_code=bo_level where nvl(bo_level,' ')='外购件BOM' or nvl(bl_ifpurchase,0)<>0 ) ";
+        baseDao.execute(SQLStr);
+        SQLStr = "select bs_idcode,bs_soncode from BomStruct where bs_topbomid=" + id
+                + " and bs_topmothercode='"+thisMonthercode+"' and nvl(bs_sonbomid,0)>0 and nvl(bs_sonbomid,0) not in (select bo_id from bom left join bomlevel on bl_code=bo_level where nvl(bo_level,' ')='外购件BOM' or nvl(bl_ifpurchase,0)<>0 ) ORDER BY bs_level";
+        SqlRowList rs = baseDao.queryForRowSet(SQLStr);
+        while (rs.next()) {//bs_osprice 在存储过程中计算出来的值是含税的委外单价
+            SQLStr = "SELECT sum(nvl(bs_m,0)),sum(nvl(bs_k,0)),sum(bs_o) from BomStruct WHERE bs_topbomid=" + id
+                    + " and bs_topmothercode='"+thisMonthercode+"' and  bs_mothercode='" + rs.getString("bs_soncode") + "' ";
+            SqlRowList rsthis = baseDao.queryForRowSet(SQLStr);
+            if (rsthis.next()) {
+                SQLStr = "update bomstruct set bs_m=round((" + rsthis.getString(1) + "+nvl(bs_osprice,0)/(1+nvl(bs_rate,0)/100)),8)*bs_baseqty,bs_k=round((" + rsthis.getString(2) + "+nvl(bs_osprice,0)),8)*bs_baseqty,bs_o="
+                        + rsthis.getString(3) + " where bs_topbomid="+id+" and bs_idcode=" + rs.getString("bs_idcode");
+                baseDao.execute(SQLStr);
+            }
+        }
+        // 当前计算的主件自身
+        SQLStr = "SELECT bs_topmothercode from BomStruct WHERE bs_topbomid=" + id
+                + " and bs_topmothercode='"+thisMonthercode+"' and bs_mothercode='" + thisMonthercode + "' ";
+        SqlRowList rss = baseDao.queryForRowSet(SQLStr);
+        if (rss.next()) {//bs_m 不含税成本 ,bs_k 含税成本
+            Object a = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_m,0)),8)", " bs_topbomid=" + id
+                    + " and bs_mothercode='" + thisMonthercode + "'");
+            Object b = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_k,0)),8)", " bs_topbomid=" + id
+                    + " and bs_mothercode='" + thisMonthercode + "'");
+            Object c = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_o,0)),8)", " bs_topbomid=" + id
+                    + " and bs_mothercode='" + thisMonthercode + "'");
+            SQLStr = "update bomstruct set bs_m=round((?+nvl(bs_osprice,0)/(1+nvl(bs_rate,0)/100)),8)*bs_baseqty,bs_k=round((?+nvl(bs_osprice,0)),8)*bs_baseqty,bs_o=? where bs_topbomid="+id+" and bs_soncode='"
+                    + thisMonthercode + "' ";
+            baseDao.execute(SQLStr,new Object[]{a,b,c});
+        }
+        SQLStr = "update BomStruct set bs_m=0 where bs_topbomid=" + id + " and bs_m is null ";
+        baseDao.execute(SQLStr);
+        //调用存储过程每个客户特殊的代码更新
+        baseDao.procedure("SP_COSTCOUNT_AFTER", new Object[] { id});
+
     }
     }
 
 
 }
 }

+ 2 - 0
src/main/java/com/uas/eis/service/STKService.java

@@ -19,4 +19,6 @@ public interface STKService {
     Result getBom(BomReq bomReq);
     Result getBom(BomReq bomReq);
 
 
     Result getProject(ProductPageDTO productPageDTO);
     Result getProject(ProductPageDTO productPageDTO);
+
+    Result getBomCost(BomReq bomReq);
 }
 }