STKServiceImpl.java 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. package com.uas.eis.service.Impl;
  2. import com.uas.eis.beans.result.Result;
  3. import com.uas.eis.convertor.*;
  4. import com.uas.eis.dao.BaseDao;
  5. import com.uas.eis.dao.SqlRowList;
  6. import com.uas.eis.sdk.dto.*;
  7. import com.uas.eis.sdk.resp.*;
  8. import com.uas.eis.service.RequestSTKService;
  9. import com.uas.eis.service.STKService;
  10. import com.uas.eis.utils.BaseUtil;
  11. import org.apache.commons.collections.CollectionUtils;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import javax.servlet.http.HttpServletRequest;
  17. import java.math.BigDecimal;
  18. import java.util.ArrayList;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.stream.Collectors;
  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 getDepartmentList(ProductPageDTO productPageDTO) {
  36. int pageNum = 1;
  37. int pageSize = 20;
  38. if (productPageDTO !=null){
  39. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  40. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  41. }else{
  42. return Result.error("参数错误!");
  43. }
  44. int start = ((pageNum - 1) * pageSize + 1);
  45. int end = pageNum * pageSize;
  46. List<DepartmentDTO> departmentDTOS = baseDao.query("select * from (select rownum rn,AA.* from (select dp_id,dp_code,dp_name,dp_isleaf,dp_status,dp_headmancode,dp_headmanname,dp_pcode,dp_parentdpname,dp_level,dp_subof,dp_statuscode from department order by dp_id desc) AA ) where rn>="+start+" and rn<="+end , DepartmentDTO.class);
  47. if (departmentDTOS.size() == 0 ){
  48. return Result.error("部门资料无数据!");
  49. }
  50. int count = baseDao.getCount("select count(1) from department");
  51. List<DepartmentResp> departmentResps = DepartmentConvertor.toDepartmentRespListByDepartmentDTOS(departmentDTOS);
  52. Map<String,Object> map = new HashMap<>();
  53. map.put("pageNum", pageNum);
  54. map.put("pageSize", pageSize);
  55. map.put("size", count);
  56. map.put("list", departmentResps);
  57. return Result.success(map);
  58. }
  59. @Override
  60. public Result getEmployeeList(ProductPageDTO productPageDTO) {
  61. int pageNum = 1;
  62. int pageSize = 20;
  63. if (productPageDTO !=null){
  64. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  65. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  66. }else{
  67. return Result.error("参数错误!");
  68. }
  69. int start = ((pageNum - 1) * pageSize + 1);
  70. int end = pageNum * pageSize;
  71. List<EmployeeDTO> employeeDTOS = baseDao.query("select * from (select rownum rn,AA.* from (select em_code,em_name,em_sex,em_depart,em_defaultorname,em_position,em_cscode,em_cop,em_class,em_status,em_type,em_mobile,em_id,em_indate,em_recorder,em_departmentcode,em_defaultorcode,em_qywx,em_password from employee where em_class<>'离职' and em_statuscode='AUDITED' order by em_id desc) AA ) where rn>="+start+" and rn<="+end , EmployeeDTO.class);
  72. if (employeeDTOS.size() == 0 ){
  73. return Result.error("员工资料无数据!");
  74. }
  75. int count = baseDao.getCount("select count(1) from employee where em_class<>'离职' and em_statuscode='AUDITED'");
  76. List<EmployeeResp> employeeResps = EmployeeConvertor.toEmployeeRespListByEmployeeDTOS(employeeDTOS);
  77. Map<String,Object> map = new HashMap<>();
  78. map.put("pageNum", pageNum);
  79. map.put("pageSize", pageSize);
  80. map.put("size", count);
  81. map.put("list", employeeResps);
  82. return Result.success(map);
  83. }
  84. @Override
  85. public Result getBusinessChanceList(ProductPageDTO productPageDTO) {
  86. int pageNum = 1;
  87. int pageSize = 20;
  88. if (productPageDTO !=null){
  89. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  90. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  91. }else{
  92. return Result.error("参数错误!");
  93. }
  94. int start = ((pageNum - 1) * pageSize + 1);
  95. int end = pageNum * pageSize;
  96. List<BusinessChanceDTO> businessChanceDTOS = baseDao.query("select * from (select rownum rn,AA.* from (select bc_code,bc_description,bc_lockstatus,bc_khlx_user,bc_nichehouse,bc_currentprocess,bc_status,bc_agency,bt_tel,bc_desc8,bc_doman,bc_lastdate,bc_custname,bc_position,bc_recorder,bc_recorddate,bc_id,bc_recorderid,bc_statuscode,bc_remark,bc_contact,bc_desc4,bc_tel,bc_desc5,bc_attach,bc_address,bc_desc6,bc_domancode,bc_lockdate,bc_decisionmanphone,bc_designname,bc_domandepart,bc_from from BusinessChance where bc_statuscode in ('AUDITED','FINISH') order by bc_id desc) AA ) where rn>="+start+" and rn<="+end , BusinessChanceDTO.class);
  97. if (businessChanceDTOS.size() == 0 ){
  98. return Result.error("商机资料无数据!");
  99. }
  100. int count = baseDao.getCount("select count(1) from BusinessChance where bc_statuscode in ('AUDITED','FINISH')");
  101. List<BusinessChanceResp> businessChanceResps = BusinessChanceConvertor.toBusinessChanceRespListByBusinessChanceDTOS(businessChanceDTOS);
  102. Map<String,Object> map = new HashMap<>();
  103. map.put("pageNum", pageNum);
  104. map.put("pageSize", pageSize);
  105. map.put("size", count);
  106. map.put("list", businessChanceResps);
  107. return Result.success(map);
  108. }
  109. @Override
  110. public Result getCustomerList(ProductPageDTO productPageDTO) {
  111. int pageNum = 1;
  112. int pageSize = 20;
  113. if (productPageDTO !=null){
  114. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  115. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  116. }else{
  117. return Result.error("参数错误!");
  118. }
  119. int start = ((pageNum - 1) * pageSize + 1);
  120. int end = pageNum * pageSize;
  121. List<CustomerDTO> customerDTOS = baseDao.query("select * from (select rownum rn,AA.* from (select cu_code,cu_name,cu_agency,cu_shortname,cu_auditstatus,cu_status,cu_kind,cu_sellercode,cu_sellername,cu_currency,cu_taxrate,cu_payments,cu_arname,cu_shcustname,cu_add1,cu_recordman,cu_recorddate,cu_cop,cu_remark,cu_id,cu_enablecredit,cu_credit,cu_uu,cu_contact2,cu_tel2 from customer where cu_auditstatuscode in ('AUDITED','DISABLE') order by cu_id desc) AA ) where rn>="+start+" and rn<="+end , CustomerDTO.class);
  122. if (customerDTOS.size() == 0 ){
  123. return Result.error("员工资料无数据!");
  124. }
  125. int count = baseDao.getCount("select count(1) from customer where cu_auditstatuscode in ('AUDITED','DISABLE')");
  126. List<CustomerResp> customerResps = CustomerConvertor.toCustomerRespListByCustomerDTOS(customerDTOS);
  127. Map<String,Object> map = new HashMap<>();
  128. map.put("pageNum", pageNum);
  129. map.put("pageSize", pageSize);
  130. map.put("size", count);
  131. map.put("list", customerResps);
  132. return Result.success(map);
  133. }
  134. @Override
  135. public Result getSaleList(ProductPageDTO productPageDTO) {
  136. int pageNum = 1;
  137. int pageSize = 20;
  138. if (productPageDTO !=null){
  139. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  140. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  141. }else{
  142. return Result.error("参数错误!");
  143. }
  144. int start = ((pageNum - 1) * pageSize + 1);
  145. int end = pageNum * pageSize;
  146. List<SaleDTO> saleDTOS = baseDao.query("select * from (select rownum rn,AA.* from (select sa_code,sa_date,sa_transport,sa_kind,sa_status,sa_custcode,sa_custname,sa_currency,sa_rate,sa_salemethod,sa_apcustcode,sa_apcustname,sa_need4,sa_need10,sa_paymentscode,sa_payments,sa_shcustcode,sa_shcustname,sa_toplace,sa_contact,sa_contacttel,sa_pocode,sa_cop,sa_departmentcode,sa_departmentname,sa_need11,sa_need5,sa_quyu_user,sa_sellercode,sa_seller,sa_need2,sa_need3,sa_need1,sa_chfs,sa_prepayamount,sa_sourcecode,sa_sourcetype,sa_turnstatus,sa_sendstatus,sa_printstatus,sa_count,sa_recorder,sa_recorddate,sa_updateman,sa_updatedate,sa_auditman,sa_auditdate,sa_remark,sa_getprice,sa_custid,sa_statuscode,sa_id,sa_sourceid,sa_recorderid,sa_paymentsid,sa_sync,sa_bcid,sa_minus,sa_b2cpucode,sa_total,sa_ts_user,sa_1_user from Sale where sa_statuscode in ('AUDITED','FINISH') order by sa_id desc) AA ) where rn>="+start+" and rn<="+end , SaleDTO.class);
  147. if (saleDTOS.size() == 0 ){
  148. return Result.error("销售订单无数据!");
  149. }
  150. // 4. 批量查询订单明细
  151. List<SaleDetailDTO> saleDetailDTOS = baseDao.query("select sd_id,sd_said,sd_detno,sd_prodcode,pr_detail,pr_spec,pr_unit,sd_qty,sd_purcprice,sd_price,sd_discount,sd_total,sd_taxrate,sd_remark,sd_costprice,sd_taxtotal,sd_costingprice,sd_isspecial,sd_bonded,sd_delivery,sd_pmcdate,sd_pmcremark,sd_atpdelivery,sd_custprodcode,sd_custproddetail,sd_prodcustcode,pr_vendprodcode,sd_noforecast,sd_forecastcode,sd_forecastdetno,sd_yqty,sd_sendqty,sd_qty-nvl(sd_sendqty,0) sd_leaveassign,sd_leadtime,sd_bgprice,sd_description,sd_remark2,sd_bomid,sd_originaldetno,sd_originalqty,sd_status,sd_barcode,sd_tomakeqty,sd_packagedate,sd_vendorrate,sd_bodycost,sd_minus,sd_bomprice,pr_location from SaleDetail left join Product on sd_prodcode=pr_code where sd_said in (select sa_id from (select rownum rn,AA.* from (select * from Sale where sa_statuscode in ('AUDITED','FINISH') order by sa_id desc) AA) where rn>="+start+" and rn<="+end+") order by sd_said desc,sd_detno" , SaleDetailDTO.class);
  152. // 5. 按订单ID分组订单明细
  153. Map<BigDecimal, List<SaleDetailDTO>> saleDetailMap = saleDetailDTOS.stream().collect(Collectors.groupingBy(SaleDetailDTO::getSd_said));
  154. // 6. 组装数据
  155. List<SaleResp> saleResps = assembleOrderData(saleDTOS, saleDetailMap);
  156. int count = baseDao.getCount("select count(1) from Sale where sa_statuscode in ('AUDITED','FINISH')");
  157. Map<String,Object> map = new HashMap<>();
  158. map.put("pageNum", pageNum);
  159. map.put("pageSize", pageSize);
  160. map.put("size", count);
  161. map.put("list", saleResps);
  162. return Result.success(map);
  163. }
  164. /**
  165. * 组装订单主从表数据
  166. */
  167. private List<SaleResp> assembleOrderData(List<SaleDTO> orders, Map<BigDecimal, List<SaleDetailDTO>> itemsMap) {
  168. return orders.stream()
  169. .map(order -> {
  170. SaleResp saleListResp = convertToVO(order);
  171. // 设置订单明细
  172. List<SaleDetailDTO> items = itemsMap.get(order.getSa_id());
  173. if (!CollectionUtils.isEmpty(items)) {
  174. List<SaleDetailResp> itemVOS = items.stream()
  175. .map(this::convertToItemVO)
  176. .collect(Collectors.toList());
  177. saleListResp.setSaleItems(itemVOS);
  178. } else {
  179. saleListResp.setSaleItems(new ArrayList<>());
  180. }
  181. return saleListResp;
  182. })
  183. .collect(Collectors.toList());
  184. }
  185. /**
  186. * 转换订单主表为VO
  187. */
  188. private SaleResp convertToVO(SaleDTO order) {
  189. return SaleConvertor.toSaleResp(order);
  190. }
  191. /**
  192. * 转换订单明细为VO
  193. */
  194. private SaleDetailResp convertToItemVO(SaleDetailDTO item) {
  195. return SaleDetailConvertor.toSaleDetailResp(item);
  196. }
  197. @Override
  198. public Result getProduct(HttpServletRequest request, ProductReq req) {
  199. String code = req.getCode();
  200. // int pageNum = Integer.valueOf(req.getPageNum());
  201. // int pageSize = Integer.valueOf(req.getPageSize());
  202. // int start = ((pageNum - 1) * pageSize + 1);
  203. // int end = pageNum * pageSize;
  204. 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,pr_leadtime " +
  205. " from Product WHERE pr_code in ('"+code+"') order by pr_id desc)" , ProductDTO.class);
  206. if (productDTOS.size() == 0 ){
  207. return Result.error("物料资料不存在");
  208. }
  209. ProdcutResp prodcutResp = ProductConvertor.toProdcutRespByProductDTOs(productDTOS);
  210. return Result.success(prodcutResp);
  211. }
  212. @Override
  213. public Result getBom(BomReq bomReq) {
  214. String bomId = bomReq.getBomId();
  215. 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 " +
  216. " from Bom LEFT JOIN Product ON bo_mothercode=pr_code WHERE bo_id in ("+bomId+") order by bo_id desc)" , BomDTO.class);
  217. if (bomDTOList.size() == 0 ){
  218. return Result.error("BOM资料不存在");
  219. }
  220. BomResp bomResp = BomConvertor.toBomRespListByBomDTOs(bomDTOList);
  221. BomReadResp bomReadResp = new BomReadResp();
  222. bomReadResp.setMain(bomResp);
  223. 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 " +
  224. " from BomDetail WHERE bd_bomid in ("+bomId+") order by bd_detno)" , BomDetailDTO.class);
  225. if (bomDTOList.size() > 0 ){
  226. List<BomDetailResp> bomDetailResps = BomDetailConvertor.toBomDetailRespListByBomDetailDTOs(bomDetailDTOList);
  227. bomReadResp.setDetail(bomDetailResps);
  228. }
  229. return Result.success(bomReadResp);
  230. }
  231. @Override
  232. public Result getBomList(ProductPageDTO productPageDTO) {
  233. int pageNum = 1;
  234. int pageSize = 20;
  235. if (productPageDTO !=null){
  236. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  237. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  238. }else{
  239. return Result.error("参数错误!");
  240. }
  241. int start = ((pageNum - 1) * pageSize + 1);
  242. int end = pageNum * pageSize;
  243. 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 " +
  244. " from Bom LEFT JOIN Product ON bo_mothercode=pr_code order by bo_id desc) AA ) where rn>="+start+" and rn<="+end , BomDTO.class);
  245. if (bomDTOList.size() == 0 ){
  246. return Result.error("BOM资料无数据!");
  247. }
  248. int count = baseDao.getCount("select count(1) from Bom");
  249. Map<String,Object> map = new HashMap<>();
  250. map.put("pageNum", pageNum);
  251. map.put("pageSize", pageSize);
  252. map.put("size", count);
  253. map.put("list", bomDTOList);
  254. return Result.success(map);
  255. }
  256. @Override
  257. public Result getProject(ProductPageDTO productPageDTO) {
  258. int pageNum = 1;
  259. int pageSize = 20;
  260. if (productPageDTO !=null){
  261. pageNum = Integer.valueOf(productPageDTO.getPageNum());
  262. pageSize = Integer.valueOf(productPageDTO.getPageSize());
  263. }else{
  264. return Result.error("参数错误!");
  265. }
  266. int start = ((pageNum - 1) * pageSize + 1);
  267. int end = pageNum * pageSize;
  268. List<ProjectDTO> projectDTOList = baseDao.query("select * from (select rownum rn,AA.* from ( " +
  269. " 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 " +
  270. " ) AA ) where rn>="+start+" and rn<="+end , ProjectDTO.class);
  271. if (projectDTOList.size() == 0 ){
  272. return Result.error("项目申请单无数据!");
  273. }
  274. int count = baseDao.getCount("select count(1) from Project");
  275. List<ProjectResp> projectResps = ProjectConvertor.toProjectRespListByProjectDTOs(projectDTOList);
  276. Map<String,Object> map = new HashMap<>();
  277. map.put("pageNum", pageNum);
  278. map.put("pageSize", pageSize);
  279. map.put("size", count);
  280. map.put("list", projectResps);
  281. return Result.success(map);
  282. }
  283. @Override
  284. public Result getBomCost(BomReq bomReq) {
  285. String bomId = bomReq.getBomId();
  286. Object bo_mothercode = null;
  287. if (bomId == null || Integer.valueOf(bomId) == 0){
  288. return Result.error("BOMID不存在!");
  289. }else{
  290. bo_mothercode = baseDao.getFieldDataByCondition("bom", "bo_mothercode", "bo_id=" + bomId);
  291. }
  292. if(bo_mothercode==null){
  293. return Result.error("BOM母件编号不存在!");
  294. }
  295. int count = baseDao.getCount("select count(1) from bomcostMsgLog where trunc(costcountdate_)=trunc(sysdate) and bomid_=" + bomId);
  296. if (count==0) {
  297. baseDao.procedure("SP_COSTCOUNT", new Object[] { bomId, bo_mothercode, "最新采购单价" });
  298. bomPrint(Integer.valueOf(bomId),"BOM!BOMCostDetail!Print");
  299. }
  300. int pageNum = 1;
  301. int pageSize = 20;
  302. if (bomReq !=null){
  303. pageNum = Integer.valueOf(bomReq.getPageNum());
  304. pageSize = Integer.valueOf(bomReq.getPageSize());
  305. }else{
  306. return Result.error("参数错误!");
  307. }
  308. int start = ((pageNum - 1) * pageSize + 1);
  309. int end = pageNum * pageSize;
  310. List<BomCostDTO> bomCostDTOList = baseDao.query("select * from (select rownum rn,AA.* from ( " +
  311. " select BS_LEVEL,BS_SONCODE,Product.PR_DETAIL,Product.PR_SPEC,bd_location,Product.PR_SMTPOINT,BS_BASEQTY,BS_CURRENCY, " +
  312. " 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," +
  313. " (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 " +
  314. " from BOMStruct " +
  315. " LEFT JOIN Currencys ON BOMStruct.BS_CURRENCY=Currencys.CR_NAME" +
  316. " LEFT JOIN Vendor ON BOMStruct.BS_VENDNAME=Vendor.VE_NAME" +
  317. " LEFT JOIN Product ON BOMStruct.BS_SONCODE=Product.PR_CODE" +
  318. " LEFT JOIN BOM ON BOMStruct.BS_TOPBOMID=BOM.BO_ID" +
  319. " LEFT JOIN Product Product_1 ON BOM.BO_MOTHERCODE=Product_1.PR_CODE" +
  320. " LEFT JOIN BOMDETAIL ON bd_bomid=bo_id AND Product.PR_CODE=BOMDETAIL.bd_soncode" +
  321. " where bo_id="+bomId+
  322. " ORDER BY BOMStruct.BS_IDCODE " +
  323. " ) AA ) ", BomCostDTO.class);
  324. if (bomCostDTOList.size() == 0 ){
  325. return Result.error("BOM成本无数据!");
  326. }
  327. Map<String,Object> map = new HashMap<>();
  328. map.put("pageNum", pageNum);
  329. map.put("pageSize", pageSize);
  330. map.put("size", bomCostDTOList.size());
  331. map.put("list", bomCostDTOList);
  332. return Result.success(map);
  333. }
  334. @Override
  335. public Result insertOrUpdateAppraise(AppraiseReq appraiseReq) {
  336. String code = appraiseReq.getCode();
  337. String recorder = appraiseReq.getRecorder();
  338. if(code==null){
  339. return Result.error("估价申请编号参数错误!");
  340. }
  341. List<String> sqls = new ArrayList<String>();
  342. List<AppraiseDetailDTO> items = appraiseReq.getItems();
  343. int count = baseDao.getCount("select count(1) from CUSTOMTABLE where ct_caller='STW-0005' and ct_code='" + code + "'");
  344. if (count>0) {
  345. count = baseDao.getCount("select count(1) from CUSTOMTABLE where ct_statuscode='ENTERING' and ct_caller='STW-0005' and ct_code='" + code + "'");
  346. //修改
  347. if (count>0) {
  348. Object ctid = baseDao.getFieldDataByCondition("CUSTOMTABLE", "ct_id", "ct_statuscode='ENTERING' and ct_caller='STW-0005' and ct_code='" + code + "'");
  349. Object cd_detno_max = baseDao.getFieldDataByCondition("CUSTOMTABLEDETAIL", "max(cd_detno)", "cd_ctid=" + ctid);
  350. int detno = 1;
  351. for(AppraiseDetailDTO detailDTO : items){
  352. if(detailDTO.getCd_id()>0){
  353. 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()+
  354. "',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()+
  355. " 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+"')";
  356. sqls.add(DetailSql);
  357. }else{
  358. //新增
  359. if (cd_detno_max !=null && detno == 1){
  360. detno = Integer.valueOf(cd_detno_max.toString()) + 1 ;
  361. }
  362. 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)" +
  363. " values(CUSTOMTABLEDETAIL_seq.nextval,"+ctid+","+detno+",'"+detailDTO.getCd_varchar50_2()+"','"+detailDTO.getCd_varchar50_3()+"','"+detailDTO.getCd_varchar50_1()+
  364. "',"+detailDTO.getCd_number_1()+","+detailDTO.getCd_number_2()+","+detailDTO.getCd_number_3()+","+detailDTO.getCd_number_4()+")";
  365. sqls.add(DetailSql);
  366. detno++;
  367. }
  368. }
  369. }
  370. }else{
  371. //新增
  372. int ct_id = baseDao.getSeqId("CUSTOMTABLE_SEQ");
  373. int detno = 1;
  374. String FormSql= "insert into CUSTOMTABLE(CT_ID,CT_CALLER,CT_STATUSCODE,CT_STATUS,CT_CODE,ct_recorder,ct_sourcekind,ct_recorddate)" +
  375. " values("+ct_id+",'STW-0005','ENTERING','在录入','"+code+"','"+recorder+"','估价申请',sysdate)";
  376. sqls.add(FormSql);
  377. for(AppraiseDetailDTO detailDTO : items){
  378. 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)" +
  379. " values(CUSTOMTABLEDETAIL_seq.nextval,"+ct_id+","+detno+",'"+detailDTO.getCd_varchar50_2()+"','"+detailDTO.getCd_varchar50_3()+"','"+detailDTO.getCd_varchar50_1()+
  380. "',"+detailDTO.getCd_number_1()+","+detailDTO.getCd_number_2()+","+detailDTO.getCd_number_3()+","+detailDTO.getCd_number_4()+")";
  381. sqls.add(DetailSql);
  382. detno++;
  383. }
  384. }
  385. baseDao.execute(sqls);
  386. return Result.success();
  387. }
  388. @Override
  389. public Result getBomAndSon(BomReq bomReq) {
  390. String bomId = bomReq.getBomId();
  391. Object bo_mothercode = null;
  392. if (bomId == null || Integer.valueOf(bomId) == 0){
  393. return Result.error("BOMID不存在!");
  394. }else{
  395. bo_mothercode = baseDao.getFieldDataByCondition("bom", "bo_mothercode", "bo_id=" + bomId);
  396. }
  397. if(bo_mothercode==null){
  398. return Result.error("BOM母件编号不存在!");
  399. }
  400. if (bomId != null && !bomId.equals("") && bomId.matches("\\d*") && bo_mothercode != null && !bo_mothercode.equals("")) {
  401. SqlRowList rs = baseDao
  402. .queryForRowSet("select bo_id,pr_specdescription from product left join bom on (pr_code=bo_mothercode or pr_refno=bo_mothercode) where"
  403. + " pr_code='" + bo_mothercode + "' and bo_id=" + bomId);
  404. if (rs.next()) {
  405. String res = baseDao.callProcedure("MM_SetProdBomStruct",
  406. new Object[] { rs.getInt("bo_id"), rs.getString("pr_specdescription") });
  407. if (res != null && res.length() > 0) {
  408. BaseUtil.showError(res);
  409. }
  410. } else {
  411. return Result.error("BOM母件编号不存在!");
  412. }
  413. }
  414. 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 " +
  415. " from MA_BOMSTRUCT_VIEW where bs_topbomid="+bomId+" AND (bs_topmothercode='"+bo_mothercode+"') " +
  416. " order by bs_topbomid,bs_idcode,ifrep desc,bs_soncode )" , BomStructDTO.class);
  417. if (bomStructDTOList.size() > 0 ){
  418. return Result.success(bomStructDTOList);
  419. }else{
  420. return Result.error("BOM母件编号不存在!");
  421. }
  422. }
  423. /**
  424. * bom成本计算 打印前执行方法
  425. * @param id
  426. */
  427. public void bomPrint(Integer id,String caller){
  428. String SQLStr = null, thisMonthercode = null;
  429. Object ob = baseDao.getFieldDataByCondition("bom", "bo_mothercode", "bo_id="+id);
  430. if(ob != null){
  431. thisMonthercode = ob.toString();
  432. }
  433. // 取出当月汇率
  434. double ThisUSDRate =Double.parseDouble(baseDao.getFieldDataByCondition("Currencys","nvl(max(cr_rate),0)"," cr_name='USD' and nvl(cr_status,' ')<>'已禁用'").toString());
  435. double ThisHKDRate =Double.parseDouble(baseDao.getFieldDataByCondition("Currencys","nvl(max(cr_rate),0)"," cr_name='HKD' and nvl(cr_status,' ')<>'已禁用'").toString());
  436. /*if (ThisUSDRate == 0) {
  437. BaseUtil.showError("币别表未设置美金汇率!");
  438. } xzx 2017090191号问题反馈*/
  439. SQLStr = "update BomStruct set bs_osprice=0 where bs_topbomid=" + id + " and bs_osprice is null ";
  440. baseDao.execute(SQLStr);
  441. 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="
  442. + 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 )) ";
  443. baseDao.execute(SQLStr);
  444. 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 ))";
  445. baseDao.execute(SQLStr);
  446. 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="
  447. + 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 )) ";
  448. baseDao.execute(SQLStr);
  449. 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 )) ";
  450. baseDao.execute(SQLStr);
  451. 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 )) ";
  452. baseDao.execute(SQLStr);
  453. 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 )) ";
  454. baseDao.execute(SQLStr);
  455. SQLStr = "update BomStruct set bs_remark='' where bs_topbomid=" + id+" and bs_topmothercode='"+thisMonthercode+"' ";
  456. baseDao.execute(SQLStr);
  457. SQLStr = "update BomStruct set bs_usdrate=" + ThisUSDRate + ",bs_hkdrate=" + ThisHKDRate
  458. + " where bs_topbomid=" + id+" and bs_topmothercode='"+thisMonthercode+"' ";
  459. baseDao.execute(SQLStr);
  460. SQLStr = "update BomStruct set bs_remark='father' where bs_topbomid=" + id + " and bs_topmothercode='"+thisMonthercode+"' and nvl(bs_sonbomid,0)>0 ";
  461. baseDao.execute(SQLStr);
  462. SQLStr = "update BomStruct set bs_remark='father' where bs_topbomid=" + id + " and bs_soncode='" + thisMonthercode + "' ";
  463. baseDao.execute(SQLStr);
  464. SQLStr = "update BomStruct set bs_currency='RMB',bs_purcprice=bs_osprice,bs_purcpricermb=0,bs_totalpurcpricermb=0,bs_totalpurcpriceusd=0 where bs_topbomid="
  465. + 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 ) ";
  466. baseDao.execute(SQLStr);
  467. SQLStr = "select bs_idcode,bs_soncode from BomStruct where bs_topbomid=" + id
  468. + " 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";
  469. SqlRowList rs = baseDao.queryForRowSet(SQLStr);
  470. while (rs.next()) {//bs_osprice 在存储过程中计算出来的值是含税的委外单价
  471. SQLStr = "SELECT sum(nvl(bs_m,0)),sum(nvl(bs_k,0)),sum(bs_o) from BomStruct WHERE bs_topbomid=" + id
  472. + " and bs_topmothercode='"+thisMonthercode+"' and bs_mothercode='" + rs.getString("bs_soncode") + "' ";
  473. SqlRowList rsthis = baseDao.queryForRowSet(SQLStr);
  474. if (rsthis.next()) {
  475. 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="
  476. + rsthis.getString(3) + " where bs_topbomid="+id+" and bs_idcode=" + rs.getString("bs_idcode");
  477. baseDao.execute(SQLStr);
  478. }
  479. }
  480. // 当前计算的主件自身
  481. SQLStr = "SELECT bs_topmothercode from BomStruct WHERE bs_topbomid=" + id
  482. + " and bs_topmothercode='"+thisMonthercode+"' and bs_mothercode='" + thisMonthercode + "' ";
  483. SqlRowList rss = baseDao.queryForRowSet(SQLStr);
  484. if (rss.next()) {//bs_m 不含税成本 ,bs_k 含税成本
  485. Object a = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_m,0)),8)", " bs_topbomid=" + id
  486. + " and bs_mothercode='" + thisMonthercode + "'");
  487. Object b = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_k,0)),8)", " bs_topbomid=" + id
  488. + " and bs_mothercode='" + thisMonthercode + "'");
  489. Object c = baseDao.getFieldDataByCondition("BomStruct", "round(sum(nvl(bs_o,0)),8)", " bs_topbomid=" + id
  490. + " and bs_mothercode='" + thisMonthercode + "'");
  491. 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='"
  492. + thisMonthercode + "' ";
  493. baseDao.execute(SQLStr,new Object[]{a,b,c});
  494. }
  495. SQLStr = "update BomStruct set bs_m=0 where bs_topbomid=" + id + " and bs_m is null ";
  496. baseDao.execute(SQLStr);
  497. //调用存储过程每个客户特殊的代码更新
  498. baseDao.procedure("SP_COSTCOUNT_AFTER_MSG", new Object[] { id});
  499. }
  500. }