ProductTask.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. package com.uas.eis.task;
  2. import com.uas.eis.beans.result.BaseResult;
  3. import com.uas.eis.beans.result.CrmAddResult;
  4. import com.uas.eis.beans.result.Product;
  5. import com.uas.eis.dao.BaseDao;
  6. import com.uas.eis.dao.SqlRowList;
  7. import com.uas.eis.manager.ProductManager;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.scheduling.annotation.EnableAsync;
  12. import org.springframework.scheduling.annotation.EnableScheduling;
  13. import org.springframework.scheduling.annotation.Scheduled;
  14. import org.springframework.stereotype.Component;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. @Component
  18. @EnableAsync
  19. @EnableScheduling
  20. public class ProductTask {
  21. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  22. @Autowired
  23. private BaseDao baseDao;
  24. @Autowired
  25. private ProductManager productManager;
  26. @Scheduled(cron = "0 0/15 * * * ?")
  27. public void syncProducts() {
  28. SqlRowList rs = baseDao.queryForRowSet("select * from (select * from product where nvl(pr_statuscode,' ')='AUDITED' and nvl(pr_sfjszy_user,' ')<>'是' and upper(nvl(pr_brand,' ')) <> 'EASYDETEK' and nvl(pr_sendstatus,' ')='待上传' order by pr_id) where rownum<=200");
  29. while (rs.next()){
  30. Product product = setProduct(rs);
  31. product.set_id("");
  32. try {
  33. CrmAddResult crmAddResult = productManager.addProducts(product);
  34. int errorCode = crmAddResult.getErrorCode();
  35. String dataId = crmAddResult.getDataId();
  36. if(errorCode == 0){
  37. baseDao.execute("update product set pr_sendstatus='已上传',PR_FXXKDATAID='"+dataId+"' where pr_id="+rs.getInt("pr_id"));
  38. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'物料资料上传成功','物料资料上传','"+rs.getString("pr_code")+"')");
  39. }else{
  40. baseDao.execute("update product set pr_sendstatus='未上传成功' where pr_id="+rs.getInt("pr_id"));
  41. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+crmAddResult.getErrorMessage()+"','物料资料上传','"+rs.getString("pr_code")+"')");
  42. logger.info("异常信息:"+crmAddResult.getErrorMessage());
  43. }
  44. }catch (Exception e){
  45. baseDao.execute("update product set pr_sendstatus='未上传成功' where pr_id="+rs.getInt("pr_id"));
  46. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+e.getMessage()+"','物料资料上传','"+rs.getString("pr_code")+"')");
  47. logger.info("异常信息:"+e.getMessage());
  48. e.printStackTrace();
  49. }
  50. }
  51. }
  52. @Scheduled(cron = "0 0/10 * * * ?")
  53. public void syncBannedProducts() {
  54. SqlRowList rs = baseDao.queryForRowSet("select * from (select * from product where nvl(pr_statuscode,' ')='DISABLE' and nvl(pr_sendstatus,' ')='待上传' order by pr_id) where rownum<=200");
  55. while (rs.next()){
  56. Product product = setProduct(rs);
  57. try {
  58. BaseResult baseResult = productManager.invalidProduct(product.get_id());
  59. int errorCode = baseResult.getErrorCode();
  60. if(errorCode == 0){
  61. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'物料资料作废成功','物料资料作废','"+rs.getString("pr_code")+"')");
  62. }else{
  63. baseDao.execute("update product set pr_sendstatus='未上传成功' where pr_id="+rs.getInt("pr_id"));
  64. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+baseResult.getErrorMessage()+"','物料资料作废','"+rs.getString("pr_code")+"')");
  65. logger.info("异常信息:"+baseResult.getErrorMessage());
  66. }
  67. List<String> idList = new ArrayList<>();
  68. idList.add(product.get_id());
  69. BaseResult baseResult_del = productManager.deleteProducts(idList);
  70. int errorCode_del = baseResult_del.getErrorCode();
  71. if(errorCode_del == 0){
  72. baseDao.execute("update product set pr_sendstatus='已上传' where pr_id="+rs.getInt("pr_id"));
  73. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'物料资料删除成功','物料资料删除','"+rs.getString("pr_code")+"')");
  74. }else{
  75. baseDao.execute("update product set pr_sendstatus='未上传成功' where pr_id="+rs.getInt("pr_id"));
  76. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+baseResult_del.getErrorMessage()+"','物料资料删除','"+rs.getString("pr_code")+"')");
  77. logger.info("异常信息:"+baseResult_del.getErrorMessage());
  78. }
  79. }catch (Exception e){
  80. baseDao.execute("update product set pr_sendstatus='未上传成功' where pr_id="+rs.getInt("pr_id"));
  81. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+e.getMessage()+"','物料资料作废或删除','"+rs.getString("pr_code")+"')");
  82. logger.info("异常信息:"+e.getMessage());
  83. e.printStackTrace();
  84. }
  85. }
  86. }
  87. @Scheduled(cron = "0 0 19 * * ?")
  88. public void syncUpdateProducts() {
  89. SqlRowList rs = baseDao.queryForRowSet("select * from (select distinct pis_prodcode from productInfoSync where trunc(pis_date)=trunc(sysdate) and pis_updatedate is null and PIS_ERROR is null) left join product on pis_prodcode=pr_code where nvl(pr_statuscode,' ')='AUDITED' and nvl(pr_sfjszy_user,' ')<>'是' and upper(nvl(pr_brand,' ')) <> 'EASYDETEK' order by pr_id");
  90. while (rs.next()){
  91. Product product = setProduct(rs);
  92. try {
  93. BaseResult baseResult = productManager.updateGoods(product);
  94. int errorCode = baseResult.getErrorCode();
  95. if(errorCode == 0){
  96. baseDao.execute("update productInfoSync set pis_updatestatus='已更新',pis_updatedate=sysdate where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  97. }else{
  98. baseDao.execute("update productInfoSync set pis_error='"+baseResult.getErrorMessage()+"' where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  99. logger.info("异常信息:"+baseResult.getErrorMessage());
  100. }
  101. }catch (Exception e){
  102. baseDao.execute("update productInfoSync set pis_error='"+e.getMessage()+"' where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  103. logger.info("异常信息:"+e.getMessage());
  104. e.printStackTrace();
  105. }
  106. }
  107. }
  108. @Scheduled(cron = "0 0 1-6 * * ?")
  109. public void syncUpdateProductsAgain() {
  110. SqlRowList rs = baseDao.queryForRowSet("select * from (select distinct pis_prodcode from productInfoSync where 1=2 and trunc(pis_date)=trunc(sysdate)-1 and pis_updatedate is null and PIS_ERROR is null) left join product on pis_prodcode=pr_code where nvl(pr_statuscode,' ')='AUDITED' and nvl(pr_sfjszy_user,' ')<>'是' and upper(nvl(pr_brand,' ')) <> 'EASYDETEK' order by pr_id");
  111. while (rs.next()){
  112. Product product = setProduct(rs);
  113. try {
  114. BaseResult baseResult = productManager.updateGoods(product);
  115. int errorCode = baseResult.getErrorCode();
  116. if(errorCode == 0){
  117. baseDao.execute("update productInfoSync set pis_updatestatus='已更新',pis_updatedate=sysdate where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  118. }else{
  119. baseDao.execute("update productInfoSync set pis_error='"+baseResult.getErrorMessage()+"' where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  120. logger.info("异常信息:"+baseResult.getErrorMessage());
  121. }
  122. }catch (Exception e){
  123. baseDao.execute("update productInfoSync set pis_error='"+e.getMessage()+"' where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  124. logger.info("异常信息:"+e.getMessage());
  125. e.printStackTrace();
  126. }
  127. }
  128. }
  129. //是否寄售专用 由否改为是时定时报废CRM对应的物料
  130. @Scheduled(cron = "0 30 23 * * ?")
  131. public void syncUpdateProductsOnSFJSZY() {
  132. SqlRowList rs = baseDao.queryForRowSet("select * from (select distinct pis_prodcode from productInfoSync where trunc(pis_date)=trunc(sysdate) and pis_updatedate is null) left join product on pis_prodcode=pr_code where nvl(pr_statuscode,' ')='AUDITED' and nvl(pr_sendstatus,' ')='已上传' and nvl(pr_sfjszy_user,' ')='是' order by pr_id");
  133. while (rs.next()){
  134. Product product = setProduct(rs);
  135. try {
  136. BaseResult baseResult = productManager.invalidProduct(product.get_id());
  137. int errorCode = baseResult.getErrorCode();
  138. if(errorCode == 0){
  139. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'物料资料作废成功','物料资料作废','"+rs.getString("pr_code")+"')");
  140. List<String> idList = new ArrayList<>();
  141. idList.add(product.get_id());
  142. BaseResult baseResult_del = productManager.deleteProducts(idList);
  143. int errorCode_del = baseResult_del.getErrorCode();
  144. if(errorCode_del == 0){
  145. baseDao.execute("update product set pr_sendstatus='待上传' where pr_id="+rs.getInt("pr_id"));
  146. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'物料资料删除成功','物料资料删除','"+rs.getString("pr_code")+"')");
  147. baseDao.execute("update productInfoSync set pis_updatestatus='已更新',pis_updatedate=sysdate where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  148. }else{
  149. baseDao.execute("update product set pr_sendstatus='未报废成功' where pr_id="+rs.getInt("pr_id"));
  150. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+baseResult_del.getErrorMessage()+"','物料资料删除','"+rs.getString("pr_code")+"')");
  151. baseDao.execute("update productInfoSync set pis_error='"+baseResult_del.getErrorMessage()+"' where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  152. logger.info("异常信息:"+baseResult_del.getErrorMessage());
  153. }
  154. }else{
  155. baseDao.execute("update product set pr_sendstatus='未报废成功' where pr_id="+rs.getInt("pr_id"));
  156. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+baseResult.getErrorMessage()+"','物料资料作废','"+rs.getString("pr_code")+"')");
  157. baseDao.execute("update productInfoSync set pis_error='"+baseResult.getErrorMessage()+"' where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  158. logger.info("异常信息:"+baseResult.getErrorMessage());
  159. }
  160. }catch (Exception e){
  161. baseDao.execute("update product set pr_sendstatus='未报废成功' where pr_id="+rs.getInt("pr_id"));
  162. baseDao.execute("insert into FXXKDockingErrorlog(ml_id,ml_date,ml_result,ml_type,ml_code) values(FXXKDOCKINGERRORLOG_SEQ.nextval,sysdate,'"+e.getMessage()+"','物料资料作废或删除','"+rs.getString("pr_code")+"')");
  163. baseDao.execute("update productInfoSync set pis_error='"+e.getMessage()+"' where pis_prodcode='"+rs.getGeneralString("pis_prodcode")+"' and trunc(pis_date)=trunc(sysdate) and pis_updatedate is null");
  164. logger.info("异常信息:"+e.getMessage());
  165. e.printStackTrace();
  166. }
  167. }
  168. }
  169. private Product setProduct(SqlRowList rs){
  170. Product product = new Product();
  171. product.setDataObjectApiName("ProductObj");
  172. product.set_id(rs.getGeneralString("pr_fxxkdataid"));
  173. product.setField_ea4Nh__c("祥瑞微".equals(rs.getGeneralString("pr_brand")) || "Easydetek".equals(rs.getGeneralString("pr_brand")) || "EasyDetek".equals(rs.getGeneralString("pr_brand")) ? null : rs.getGeneralDouble("pr_lasttaxpurcprice_user"));
  174. product.setField_i0v47__c(rs.getGeneralString("pr_YPstock"));
  175. product.setField_iW998__c(rs.getGeneralString("pr_PLstock"));
  176. product.setField_dioys__c(rs.getGeneralString("pr_wlfl_user"));
  177. product.setProduct_code(rs.getGeneralString("pr_code"));
  178. product.setUDSText1__c(rs.getGeneralString("pr_brand"));
  179. product.setField_cwppk__c(rs.getGeneralString("pr_fz_user"));
  180. product.setField_r02le__c(rs.getGeneralString("pr_zxbzs"));
  181. product.setUnit(rs.getGeneralString("pr_unit"));
  182. product.setName(rs.getGeneralString("pr_brand")+"~"+rs.getGeneralString("pr_spec"));
  183. product.setPrice(rs.getGeneralDouble("pr_standardprice"));
  184. product.setCategory("6");
  185. product.setField_uwFmi__c(rs.getGeneralString("pr_aflypstock_user"));//艾富利样品仓库存
  186. product.setField_ehcac__c(rs.getGeneralString("pr_aflplstock_user"));//艾富利批量仓库存
  187. product.setField_f0qjS__c("祥瑞微".equals(rs.getGeneralString("pr_brand")) || "Easydetek".equals(rs.getGeneralString("pr_brand")) ? null : rs.getGeneralDouble("pr_afllasttaxpurcprice_user"));//艾富利成本(含税)
  188. product.setField_rY1jT__c(rs.getGeneralString("pr_yjhhkplstock_user"));//越加红(香港)仓批量库存
  189. product.setField_CN00a__c(rs.getGeneralString("pr_tjxz_user"));//推荐星值
  190. product.setField_1WO33__c(rs.getGeneralString("pr_abc"));
  191. product.setField_2llh1__c(rs.getGeneralString("pr_kind2"));//物料中类
  192. product.setField_a13W6__c(rs.getGeneralDouble("pr_zdj_user"));//指导价
  193. return product;
  194. }
  195. }