STKServiceImpl.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. package com.uas.eis.service.Impl;
  2. import com.uas.eis.beans.result.Result;
  3. import com.uas.eis.convertor.BomConvertor;
  4. import com.uas.eis.convertor.BomDetailConvertor;
  5. import com.uas.eis.convertor.ProductConvertor;
  6. import com.uas.eis.convertor.ProjectConvertor;
  7. import com.uas.eis.dao.BaseDao;
  8. import com.uas.eis.dao.SqlRowList;
  9. import com.uas.eis.sdk.dto.*;
  10. import com.uas.eis.sdk.resp.*;
  11. import com.uas.eis.service.RequestSTKService;
  12. import com.uas.eis.service.STKService;
  13. import com.uas.eis.utils.BaseUtil;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import javax.servlet.http.HttpServletRequest;
  19. import java.util.ArrayList;
  20. import java.util.HashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23. /**
  24. * @author
  25. * @date 2024-10-12
  26. */
  27. @Service
  28. public class STKServiceImpl implements STKService {
  29. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  30. @Autowired
  31. private BaseDao baseDao;
  32. @Autowired
  33. private RequestSTKService requestSTKService;
  34. @Override
  35. public Result getProduct(HttpServletRequest request, ProductReq req) {
  36. String code = req.getCode();
  37. // int pageNum = Integer.valueOf(req.getPageNum());
  38. // int pageSize = Integer.valueOf(req.getPageSize());
  39. // int start = ((pageNum - 1) * pageSize + 1);
  40. // int end = pageNum * pageSize;
  41. List<ProductDTO> productDTOS = baseDao.query("select * from ( SELECT pr_status,pr_serial,pr_code,pr_detail,pr_spec,pr_speccs,pr_remark_warehouse,pr_remark_sale,pr_unit,pr_kind,pr_manutype,pr_dhzc,pr_supplytype,pr_material,pr_level,pr_acceptmethod,pr_whcode,pr_ifbarcodecheck,pr_planner,pr_buyername,pr_cop,pr_recordman,pr_docdate,pr_sourcecode,pr_checkstatus,pr_id,pr_uuid,pr_sendstatus,pr_stockcatecode,pr_smtpoint,pr_safetystock,pr_zxbzs,pr_zxdhl,pr_purcmergedays,pr_stockcatename,pr_tracekind,pr_brand " +
  42. " from Product WHERE pr_code in ('"+code+"') order by pr_id desc)" , ProductDTO.class);
  43. if (productDTOS.size() == 0 ){
  44. return Result.error("物料资料不存在");
  45. }
  46. ProdcutResp prodcutResp = ProductConvertor.toProdcutRespByProductDTOs(productDTOS);
  47. return Result.success(prodcutResp);
  48. }
  49. @Override
  50. public Result getBom(BomReq bomReq) {
  51. String bomId = bomReq.getBomId();
  52. List<BomDTO> bomDTOList = baseDao.query("select * from ( SELECT bo_id,bo_version,bo_status,bo_level,bo_mothercode,pr_detail,pr_spec,pr_unit,bo_remark,bo_wcname,bo_ispast,bo_cop,bo_recorder,bo_date,bo_auditman,bo_auditdate,bo_isextend,bo_refbomid,bo_refcode,bo_refname,bo_refspec,bo_style,bo_flowstyle " +
  53. " from Bom LEFT JOIN Product ON bo_mothercode=pr_code WHERE bo_id in ("+bomId+") order by bo_id desc)" , BomDTO.class);
  54. if (bomDTOList.size() == 0 ){
  55. return Result.error("BOM资料不存在");
  56. }
  57. BomResp bomResp = BomConvertor.toBomRespListByBomDTOs(bomDTOList);
  58. BomReadResp bomReadResp = new BomReadResp();
  59. bomReadResp.setMain(bomResp);
  60. List<BomDetailDTO> bomDetailDTOList = baseDao.query("select * from ( SELECT bd_id,bd_bomid,bd_detno,bd_soncode,bd_baseqty,bd_location,bd_remark,bd_ecncode,bd_ifrep,bd_repcode,bd_usestatus " +
  61. " from BomDetail WHERE bd_bomid in ("+bomId+") order by bd_detno)" , BomDetailDTO.class);
  62. if (bomDTOList.size() > 0 ){
  63. List<BomDetailResp> bomDetailResps = BomDetailConvertor.toBomDetailRespListByBomDetailDTOs(bomDetailDTOList);
  64. bomReadResp.setDetail(bomDetailResps);
  65. }
  66. return Result.success(bomReadResp);
  67. }
  68. @Override
  69. public Result getBomList(ProductPageDTO productPageDTO) {
  70. int pageNum = 1;
  71. int pageSize = 20;
  72. if (productPageDTO !=null){
  73. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  74. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  75. }else{
  76. return Result.error("参数错误!");
  77. }
  78. int start = ((pageNum - 1) * pageSize + 1);
  79. int end = pageNum * pageSize;
  80. List<BomDTO> bomDTOList = baseDao.query("select * from (select rownum rn,AA.* from ( SELECT bo_id,bo_version,bo_status,bo_level,bo_mothercode,pr_detail,pr_spec,pr_unit,bo_remark,bo_wcname,bo_ispast,bo_cop,bo_recorder,bo_date,bo_auditman,bo_auditdate,bo_isextend,bo_refbomid,bo_refcode,bo_refname,bo_refspec,bo_style,bo_flowstyle " +
  81. " from Bom LEFT JOIN Product ON bo_mothercode=pr_code order by bo_id desc) AA ) where rn>="+start+" and rn<="+end , BomDTO.class);
  82. if (bomDTOList.size() == 0 ){
  83. return Result.error("BOM资料无数据!");
  84. }
  85. int count = baseDao.getCount("select count(1) from Bom");
  86. Map<String,Object> map = new HashMap<>();
  87. map.put("pageNum", pageNum);
  88. map.put("pageSize", pageSize);
  89. map.put("size", count);
  90. map.put("list", bomDTOList);
  91. return Result.success(map);
  92. }
  93. @Override
  94. public Result getProject(ProductPageDTO productPageDTO) {
  95. int pageNum = 1;
  96. int pageSize = 20;
  97. if (productPageDTO !=null){
  98. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  99. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  100. }else{
  101. return Result.error("参数错误!");
  102. }
  103. int start = ((pageNum - 1) * pageSize + 1);
  104. int end = pageNum * pageSize;
  105. List<ProjectDTO> projectDTOList = baseDao.query("select * from (select rownum rn,AA.* from ( " +
  106. " select prj_id,prj_code,prj_name,prj_sourcecode,prj_customername,prj_sourcetype,prj_customercode,prj_status,prj_producttype,prj_person,prj_assignto,prj_description,prj_start,prj_end,prj_recordate,prj_auditstatus,prj_remark,pt_code from Project left join ProjectMainTask on prj_code=pt_prjcode order by prj_id desc " +
  107. " ) AA ) where rn>="+start+" and rn<="+end , ProjectDTO.class);
  108. if (projectDTOList.size() == 0 ){
  109. return Result.error("项目申请单无数据!");
  110. }
  111. int count = baseDao.getCount("select count(1) from Project");
  112. List<ProjectResp> projectResps = ProjectConvertor.toProjectRespListByProjectDTOs(projectDTOList);
  113. Map<String,Object> map = new HashMap<>();
  114. map.put("pageNum", pageNum);
  115. map.put("pageSize", pageSize);
  116. map.put("size", count);
  117. map.put("list", projectResps);
  118. return Result.success(map);
  119. }
  120. @Override
  121. public Result getBomCost(BomReq bomReq) {
  122. String bomId = bomReq.getBomId();
  123. Object bo_mothercode = null;
  124. if (bomId == null || Integer.valueOf(bomId) == 0){
  125. return Result.error("BOMID不存在!");
  126. }else{
  127. bo_mothercode = baseDao.getFieldDataByCondition("bom", "bo_mothercode", "bo_id=" + bomId);
  128. }
  129. if(bo_mothercode==null){
  130. return Result.error("BOM母件编号不存在!");
  131. }
  132. int count = baseDao.getCount("select count(1) from bomcostMsgLog where trunc(costcountdate_)=trunc(sysdate) and bomid_=" + bomId);
  133. if (count==0) {
  134. baseDao.procedure("SP_COSTCOUNT", new Object[] { bomId, bo_mothercode, "最新采购单价" });
  135. bomPrint(Integer.valueOf(bomId),"BOM!BOMCostDetail!Print");
  136. }
  137. int pageNum = 1;
  138. int pageSize = 20;
  139. if (bomReq !=null){
  140. pageNum = Integer.valueOf(bomReq.getPageNum());
  141. pageSize = Integer.valueOf(bomReq.getPageSize());
  142. }else{
  143. return Result.error("参数错误!");
  144. }
  145. int start = ((pageNum - 1) * pageSize + 1);
  146. int end = pageNum * pageSize;
  147. List<BomCostDTO> bomCostDTOList = baseDao.query("select * from (select rownum rn,AA.* from ( " +
  148. " select BS_LEVEL,BS_SONCODE,Product.PR_DETAIL,Product.PR_SPEC,bd_location,Product.PR_SMTPOINT,BS_BASEQTY,BS_CURRENCY, " +
  149. " 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," +
  150. " (select pd_price from (select pd_price,pd_prodcode prodcode,row_number() over(partition by pd_prodcode order by pu_auditdate desc) row_number from purchasedetail left join purchase on pd_puid=pu_id where pu_statuscode in ('AUDITED','FINISH')) t where row_number=1 and prodcode=Product.pr_code) price " +
  151. " from BOMStruct " +
  152. " LEFT JOIN Currencys ON BOMStruct.BS_CURRENCY=Currencys.CR_NAME" +
  153. " LEFT JOIN Vendor ON BOMStruct.BS_VENDNAME=Vendor.VE_NAME" +
  154. " LEFT JOIN Product ON BOMStruct.BS_SONCODE=Product.PR_CODE" +
  155. " LEFT JOIN BOM ON BOMStruct.BS_TOPBOMID=BOM.BO_ID" +
  156. " LEFT JOIN Product Product_1 ON BOM.BO_MOTHERCODE=Product_1.PR_CODE" +
  157. " LEFT JOIN BOMDETAIL ON bd_bomid=bo_id AND Product.PR_CODE=BOMDETAIL.bd_soncode" +
  158. " where bo_id="+bomId+
  159. " ORDER BY BOMStruct.BS_IDCODE " +
  160. " ) AA ) ", BomCostDTO.class);
  161. if (bomCostDTOList.size() == 0 ){
  162. return Result.error("BOM成本无数据!");
  163. }
  164. Map<String,Object> map = new HashMap<>();
  165. map.put("pageNum", pageNum);
  166. map.put("pageSize", pageSize);
  167. map.put("size", bomCostDTOList.size());
  168. map.put("list", bomCostDTOList);
  169. return Result.success(map);
  170. }
  171. @Override
  172. public Result insertOrUpdateAppraise(AppraiseReq appraiseReq) {
  173. String code = appraiseReq.getCode();
  174. String recorder = appraiseReq.getRecorder();
  175. if(code==null){
  176. return Result.error("估价申请编号参数错误!");
  177. }
  178. List<String> sqls = new ArrayList<String>();
  179. List<AppraiseDetailDTO> items = appraiseReq.getItems();
  180. int count = baseDao.getCount("select count(1) from CUSTOMTABLE where ct_caller='STW-0005' and ct_code='" + code + "'");
  181. if (count>0) {
  182. count = baseDao.getCount("select count(1) from CUSTOMTABLE where ct_statuscode='ENTERING' and ct_caller='STW-0005' and ct_code='" + code + "'");
  183. //修改
  184. if (count>0) {
  185. Object ctid = baseDao.getFieldDataByCondition("CUSTOMTABLE", "ct_id", "ct_statuscode='ENTERING' and ct_caller='STW-0005' and ct_code='" + code + "'");
  186. Object cd_detno_max = baseDao.getFieldDataByCondition("CUSTOMTABLEDETAIL", "max(cd_detno)", "cd_ctid=" + ctid);
  187. int detno = 1;
  188. for(AppraiseDetailDTO detailDTO : items){
  189. if(detailDTO.getCd_id()>0){
  190. String DetailSql ="update CUSTOMTABLEDETAIL set cd_varchar50_2='"+detailDTO.getCd_number_2()+"',cd_varchar50_3='"+detailDTO.getCd_varchar50_3()+"',cd_varchar50_1='"+detailDTO.getCd_varchar50_1()+
  191. "',cd_number_1="+detailDTO.getCd_number_1()+",cd_number_2="+detailDTO.getCd_number_2()+",cd_number_3="+detailDTO.getCd_number_3()+",cd_number_4="+detailDTO.getCd_number_4()+
  192. " where cd_id="+detailDTO.getCd_id()+" and exists (select 1 from CUSTOMTABLE where ct_id=cd_ctid and ct_statuscode='ENTERING' and ct_caller='STW-0005' and ct_code='"+code+"')";
  193. sqls.add(DetailSql);
  194. }else{
  195. //新增
  196. if (cd_detno_max !=null && detno == 1){
  197. detno = Integer.valueOf(cd_detno_max.toString()) + 1 ;
  198. }
  199. String DetailSql = "insert into CUSTOMTABLEDETAIL(cd_id,cd_ctid,cd_detno,cd_varchar50_2,cd_varchar50_3,cd_varchar50_1,cd_number_1,cd_number_2,cd_number_3,cd_number_4)" +
  200. " values(CUSTOMTABLEDETAIL_seq.nextval,"+ctid+","+detno+",'"+detailDTO.getCd_varchar50_2()+"','"+detailDTO.getCd_varchar50_3()+"','"+detailDTO.getCd_varchar50_1()+
  201. "',"+detailDTO.getCd_number_1()+","+detailDTO.getCd_number_2()+","+detailDTO.getCd_number_3()+","+detailDTO.getCd_number_4()+")";
  202. sqls.add(DetailSql);
  203. detno++;
  204. }
  205. }
  206. }
  207. }else{
  208. //新增
  209. int ct_id = baseDao.getSeqId("CUSTOMTABLE_SEQ");
  210. int detno = 1;
  211. String FormSql= "insert into CUSTOMTABLE(CT_ID,CT_CALLER,CT_STATUSCODE,CT_STATUS,CT_CODE,ct_recorder,ct_sourcekind,ct_recorddate)" +
  212. " values("+ct_id+",'STW-0005','ENTERING','在录入','"+code+"','"+recorder+"','估价申请',sysdate)";
  213. sqls.add(FormSql);
  214. for(AppraiseDetailDTO detailDTO : items){
  215. String DetailSql = "insert into CUSTOMTABLEDETAIL(cd_id,cd_ctid,cd_detno,cd_varchar50_2,cd_varchar50_3,cd_varchar50_1,cd_number_1,cd_number_2,cd_number_3,cd_number_4)" +
  216. " values(CUSTOMTABLEDETAIL_seq.nextval,"+ct_id+","+detno+",'"+detailDTO.getCd_varchar50_2()+"','"+detailDTO.getCd_varchar50_3()+"','"+detailDTO.getCd_varchar50_1()+
  217. "',"+detailDTO.getCd_number_1()+","+detailDTO.getCd_number_2()+","+detailDTO.getCd_number_3()+","+detailDTO.getCd_number_4()+")";
  218. sqls.add(DetailSql);
  219. detno++;
  220. }
  221. }
  222. baseDao.execute(sqls);
  223. return Result.success();
  224. }
  225. @Override
  226. public Result getBomAndSon(BomReq bomReq) {
  227. String bomId = bomReq.getBomId();
  228. Object bo_mothercode = null;
  229. if (bomId == null || Integer.valueOf(bomId) == 0){
  230. return Result.error("BOMID不存在!");
  231. }else{
  232. bo_mothercode = baseDao.getFieldDataByCondition("bom", "bo_mothercode", "bo_id=" + bomId);
  233. }
  234. if(bo_mothercode==null){
  235. return Result.error("BOM母件编号不存在!");
  236. }
  237. if (bomId != null && !bomId.equals("") && bomId.matches("\\d*") && bo_mothercode != null && !bo_mothercode.equals("")) {
  238. SqlRowList rs = baseDao
  239. .queryForRowSet("select bo_id,pr_specdescription from product left join bom on (pr_code=bo_mothercode or pr_refno=bo_mothercode) where"
  240. + " pr_code='" + bo_mothercode + "' and bo_id=" + bomId);
  241. if (rs.next()) {
  242. String res = baseDao.callProcedure("MM_SetProdBomStruct",
  243. new Object[] { rs.getInt("bo_id"), rs.getString("pr_specdescription") });
  244. if (res != null && res.length() > 0) {
  245. BaseUtil.showError(res);
  246. }
  247. } else {
  248. return Result.error("BOM母件编号不存在!");
  249. }
  250. }
  251. List<BomStructDTO> bomStructDTOList = baseDao.query("select * from (select bs_idcode,bs_level,bs_bomid,bs_sonbomid,bs_mothercode,bs_bddetno,bs_soncode,pr_detail,pr_spec,pr_speccs,pr_unit,bs_baseqty,bs_location,bs_usestatus,bs_ecncode,bs_remark,bs_ifrep,ifrep,pr_lossrate,pr_leadtime,pr_zxdhl,po_onhand-nvl(po_defectonhand,0) po_onhand,PR_STANDARDIZED,pr_material,pr_sqrq,bo_level,bo_wccode,bo_ispast " +
  252. " from MA_BOMSTRUCT_VIEW where bs_topbomid="+bomId+" AND (bs_topmothercode='"+bo_mothercode+"') " +
  253. " order by bs_topbomid,bs_idcode,ifrep desc,bs_soncode )" , BomStructDTO.class);
  254. if (bomStructDTOList.size() > 0 ){
  255. return Result.success(bomStructDTOList);
  256. }else{
  257. return Result.error("BOM母件编号不存在!");
  258. }
  259. }
  260. /**
  261. * bom成本计算 打印前执行方法
  262. * @param id
  263. */
  264. public void bomPrint(Integer id,String caller){
  265. String SQLStr = null, thisMonthercode = null;
  266. Object ob = baseDao.getFieldDataByCondition("bom", "bo_mothercode", "bo_id="+id);
  267. if(ob != null){
  268. thisMonthercode = ob.toString();
  269. }
  270. // 取出当月汇率
  271. double ThisUSDRate =Double.parseDouble(baseDao.getFieldDataByCondition("Currencys","nvl(max(cr_rate),0)"," cr_name='USD' and nvl(cr_status,' ')<>'已禁用'").toString());
  272. double ThisHKDRate =Double.parseDouble(baseDao.getFieldDataByCondition("Currencys","nvl(max(cr_rate),0)"," cr_name='HKD' and nvl(cr_status,' ')<>'已禁用'").toString());
  273. /*if (ThisUSDRate == 0) {
  274. BaseUtil.showError("币别表未设置美金汇率!");
  275. } xzx 2017090191号问题反馈*/
  276. SQLStr = "update BomStruct set bs_osprice=0 where bs_topbomid=" + id + " and bs_osprice is null ";
  277. baseDao.execute(SQLStr);
  278. 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="
  279. + 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 )) ";
  280. baseDao.execute(SQLStr);
  281. 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 ))";
  282. baseDao.execute(SQLStr);
  283. 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="
  284. + 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 )) ";
  285. baseDao.execute(SQLStr);
  286. 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 )) ";
  287. baseDao.execute(SQLStr);
  288. 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 )) ";
  289. baseDao.execute(SQLStr);
  290. 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 )) ";
  291. baseDao.execute(SQLStr);
  292. SQLStr = "update BomStruct set bs_remark='' where bs_topbomid=" + id+" and bs_topmothercode='"+thisMonthercode+"' ";
  293. baseDao.execute(SQLStr);
  294. SQLStr = "update BomStruct set bs_usdrate=" + ThisUSDRate + ",bs_hkdrate=" + ThisHKDRate
  295. + " where bs_topbomid=" + id+" and bs_topmothercode='"+thisMonthercode+"' ";
  296. baseDao.execute(SQLStr);
  297. SQLStr = "update BomStruct set bs_remark='father' where bs_topbomid=" + id + " and bs_topmothercode='"+thisMonthercode+"' and nvl(bs_sonbomid,0)>0 ";
  298. baseDao.execute(SQLStr);
  299. SQLStr = "update BomStruct set bs_remark='father' where bs_topbomid=" + id + " and bs_soncode='" + thisMonthercode + "' ";
  300. baseDao.execute(SQLStr);
  301. SQLStr = "update BomStruct set bs_currency='RMB',bs_purcprice=bs_osprice,bs_purcpricermb=0,bs_totalpurcpricermb=0,bs_totalpurcpriceusd=0 where bs_topbomid="
  302. + 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 ) ";
  303. baseDao.execute(SQLStr);
  304. SQLStr = "select bs_idcode,bs_soncode from BomStruct where bs_topbomid=" + id
  305. + " 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";
  306. SqlRowList rs = baseDao.queryForRowSet(SQLStr);
  307. while (rs.next()) {//bs_osprice 在存储过程中计算出来的值是含税的委外单价
  308. SQLStr = "SELECT sum(nvl(bs_m,0)),sum(nvl(bs_k,0)),sum(bs_o) from BomStruct WHERE bs_topbomid=" + id
  309. + " and bs_topmothercode='"+thisMonthercode+"' and bs_mothercode='" + rs.getString("bs_soncode") + "' ";
  310. SqlRowList rsthis = baseDao.queryForRowSet(SQLStr);
  311. if (rsthis.next()) {
  312. 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="
  313. + rsthis.getString(3) + " where bs_topbomid="+id+" and bs_idcode=" + rs.getString("bs_idcode");
  314. baseDao.execute(SQLStr);
  315. }
  316. }
  317. // 当前计算的主件自身
  318. SQLStr = "SELECT bs_topmothercode from BomStruct WHERE bs_topbomid=" + id
  319. + " and bs_topmothercode='"+thisMonthercode+"' and bs_mothercode='" + thisMonthercode + "' ";
  320. SqlRowList rss = baseDao.queryForRowSet(SQLStr);
  321. if (rss.next()) {//bs_m 不含税成本 ,bs_k 含税成本
  322. Object a = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_m,0)),8)", " bs_topbomid=" + id
  323. + " and bs_mothercode='" + thisMonthercode + "'");
  324. Object b = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_k,0)),8)", " bs_topbomid=" + id
  325. + " and bs_mothercode='" + thisMonthercode + "'");
  326. Object c = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_o,0)),8)", " bs_topbomid=" + id
  327. + " and bs_mothercode='" + thisMonthercode + "'");
  328. 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='"
  329. + thisMonthercode + "' ";
  330. baseDao.execute(SQLStr,new Object[]{a,b,c});
  331. }
  332. SQLStr = "update BomStruct set bs_m=0 where bs_topbomid=" + id + " and bs_m is null ";
  333. baseDao.execute(SQLStr);
  334. //调用存储过程每个客户特殊的代码更新
  335. baseDao.procedure("SP_COSTCOUNT_AFTER_MSG", new Object[] { id});
  336. }
  337. }