Переглянути джерело

物料工单定时任务中间表上传

koul 4 роки тому
батько
коміт
eb85ba6b31

+ 65 - 0
src/main/java/com/uas/eis/core/support/SpringDynamicCronTask.java

@@ -0,0 +1,65 @@
+package com.uas.eis.core.support;
+
+
+import com.uas.eis.task.ScheduleTask;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+@Configuration
+@EnableScheduling
+@Component
+public class SpringDynamicCronTask implements SchedulingConfigurer {
+
+	private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private ScheduleTask scheduleTask;
+
+	@Override
+	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+		String activeProFiles = env.getActiveProfiles()[0];
+		if("prod".equals(activeProFiles)) {
+			logger.info(String.format("运行环境:%s;注册TASK:%s",activeProFiles,env.getProperty("Task.SyncProductsMethod")));
+			taskRegistrar.addCronTask(() -> {
+				//业务逻辑
+				try {
+					Method method = scheduleTask.getClass().getMethod(env.getProperty("Task.SyncProductsMethod"));
+					method.invoke(scheduleTask);
+				}catch (Exception e){
+					e.printStackTrace();
+				}
+			}, env.getProperty("Task.SyncProductsCron"));
+            taskRegistrar.addCronTask(() -> {
+                //业务逻辑
+                try {
+                    Method method = scheduleTask.getClass().getMethod(env.getProperty("Task.SyncMakeBasesMethod"));
+                    method.invoke(scheduleTask);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }, env.getProperty("Task.SyncMakeBasesCron"));
+            taskRegistrar.addCronTask(() -> {
+                //业务逻辑
+                try {
+                    Method method = scheduleTask.getClass().getMethod(env.getProperty("Task.SyncMakeBaseDetailsMethod"));
+                    method.invoke(scheduleTask);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }, env.getProperty("Task.SyncMakeBaseDetailsCron"));
+		}
+	}
+}

+ 5 - 5
src/main/java/com/uas/eis/entity/Make.java

@@ -40,7 +40,7 @@ public class Make {
     @JSONField(name = "version")
     private int ma_version;
     @JSONField(name = "finterid")
-    private String ma_id;
+    private String erpid;
     @JSONField(name = "fWorkShop")
     private String wc_id;
     @JSONField(name = "fCostOBJID")
@@ -200,12 +200,12 @@ public class Make {
         this.ma_version = ma_version;
     }
 
-    public String getMa_id() {
-        return ma_id;
+    public String getErpid() {
+        return erpid;
     }
 
-    public void setMa_id(String ma_id) {
-        this.ma_id = ma_id;
+    public void setErpid(String erpid) {
+        this.erpid = erpid;
     }
 
     public String getWc_id() {

+ 2 - 3
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -37,7 +37,7 @@ public class ERPServiceImpl implements ERPService {
                 "nvl(pr_unit,'PCS') pr_unit,nvl(pr_cop,'BYT') pr_cop,nvl(pr_version,'0') pr_version," +
                 "nvl(pr_serial,'') pr_serial ,nvl(pr_validdays,'0') pr_validdays ,nvl(pr_msdlevel,'') pr_msdlevel ,nvl(pr_fhelpcode,'') pr_fhelpcode ," +
                         "nvl(pr_f_115,'') pr_f_115 ,nvl(pr_f_116,'') pr_f_116 ,nvl(pr_f_102,'') pr_f_102" +
-                " ,nvl(pr_kind,'') pr_kind ,nvl(pr_whcode,'') pr_whcode from product where pr_id=?",
+                " ,nvl(pr_kind,'') pr_kind ,nvl(wh_mesc_user,'') pr_whcode,wh_mesn_user pr_whname from product left join Warehouse on pr_whcode=wh_code where pr_id=?",
                 new BeanPropertyRowMapper<Product>(Product.class),store.get("pr_id"));
         product.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1")));
         product.setMesUser(tokenConfig.get("mesUser"));
@@ -72,8 +72,7 @@ public class ERPServiceImpl implements ERPService {
     @Override
     public ApiResult<String> syncUpdateReceiveByErp(String data) {
         Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
-        VerifyApply verifyApply = baseDao.getJdbcTemplate().queryForObject("select va_id,va_mescode,va_code,to_char(va_date,'yyyy-MM-dd HH24:mi:ss') va_date,va_vendcode,va_vendname,va_currency,va_rate,va_paymentscode,va_payments,va_transport,va_sendcode,va_emcode,va_emname,va_whcode,va_whname,va_departmentcode,va_department,va_recorder,nvl(va_cop,'BYT') va_cop,va_remark,va_ancode,va_factory,0 version,va_custcode,va_custname,va_type,va_pucode,case when nvl(va_pucode,' ')=' ' then 0 else (select pu_id from purchase where pu_code=va_pucode) end pu_id,va_status,1 posted,to_char(va_auditdate,'yyyy-MM-dd HH24:mi:ss') va_auditdate,va_auditman " +
-                        "from VerifyApply where va_statuscode='AUDITED' and va_mescode=?",
+        VerifyApply verifyApply = baseDao.getJdbcTemplate().queryForObject("select va_id,va_mescode,va_code,to_char(va_date,'yyyy-MM-dd HH24:mi:ss') va_date,va_vendcode,va_vendname,va_currency,va_rate,va_paymentscode,va_payments,va_transport,va_sendcode,va_emcode,va_emname,wh_mesc_user va_whcode,wh_mesn_user va_whname,va_departmentcode,va_department,va_recorder,nvl(va_cop,'BYT') va_cop,va_remark,va_ancode,va_factory,0 version,va_custcode,va_custname,va_type,va_pucode,case when nvl(va_pucode,' ')=' ' then 0 else (select pu_id from purchase where pu_code=va_pucode) end pu_id,va_status,1 posted,to_char(va_auditdate,'yyyy-MM-dd HH24:mi:ss') va_auditdate,va_auditman from VerifyApply left join Warehouse on va_whcode=wh_code where va_statuscode='AUDITED' and va_mescode=?",
                 new BeanPropertyRowMapper<VerifyApply>(VerifyApply.class), store.get("mesCode"));
         verifyApply.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
         verifyApply.setMesUser(tokenConfig.get("mesUser"));

+ 133 - 0
src/main/java/com/uas/eis/service/Impl/ScheduleTaskServiceImpl.java

@@ -0,0 +1,133 @@
+package com.uas.eis.service.Impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.uas.eis.core.support.TokenProperties;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.entity.Make;
+import com.uas.eis.entity.MakeMaterial;
+import com.uas.eis.entity.Product;
+import com.uas.eis.service.ScheduleTaskService;
+import com.uas.eis.utils.MD5Util;
+import com.uas.eis.utils.PSHttpUtils;
+import com.uas.eis.utils.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-23 15:30
+ */
+@Service
+public class ScheduleTaskServiceImpl implements ScheduleTaskService {
+    private static Map<String,String> tokenConfig = TokenProperties.getAllProperty();
+
+    @Autowired
+    private BaseDao baseDao;
+
+    /**
+     * STATUS(W等待执行,F执行失败,D已执行)
+     *
+     */
+    @Override
+    public void syncProducts() {
+        SqlRowList rs = baseDao.queryForRowSet("select id from mes_product where status='W'");
+        while (rs.next()){
+            Product product = baseDao.getJdbcTemplate().queryForObject("select pr_kh_user,pr_code ,pr_detail ," +
+                            "pr_spec ,nvl(pr_unit,'PCS') pr_unit,nvl(pr_cop,'BYT') pr_cop,nvl(pr_version,'0') " +
+                            "pr_version,pr_serial,nvl(pr_validdays,'0') pr_validdays,pr_msdlevel ,pr_fhelpcode ," +
+                            "pr_f_115 ,pr_f_116 ,pr_f_102,pr_kind,wh_mesc_user pr_whcode,wh_mesn_user pr_whname,flag," +
+                            "pr_statuscode,pr_status from mes_product left join Warehouse on pr_whcode=wh_code where id=?",
+                    new BeanPropertyRowMapper<Product>(Product.class),
+                    rs.getInt("id"));
+            product.setMesUser(tokenConfig.get("mesUser"));
+            product.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
+            Map<String, Object> map = syncMES(JSON.toJSONString(product, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncProduct"));
+            if (map!=null){
+                int code = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1"));
+                if (code==0){
+                    baseDao.updateByCondition("mes_product","status='D'","status='W' and id="+rs.getInt("id"));
+                }else {
+                    baseDao.updateByCondition("mes_product","status='F'","status='W' and id="+rs.getInt("id"));
+                    baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode) values (MESERRORLOG_SEQ.NEXTVAL,'"+tokenConfig.get("syncProduct")+"','"+StringUtil.nvl(map.get("msg"),"")+"',sysdate,'"+product.getPr_code()+"')");
+                }
+            }
+        }
+    }
+
+    @Override
+    public void syncMakeBases() {
+        SqlRowList rs = baseDao.queryForRowSet("select id from mes_make where status='W'");
+        while (rs.next()){
+            Make make = baseDao.getJdbcTemplate().queryForObject("select id,ma_code,ma_prodcode,ma_qty,ma_custcode,pr_unit,pr_detail,pr_spec,ma_salecode,to_char(ma_planbegindate,'yyyy-MM-dd') ma_planbegindate,to_char(ma_planenddate,'yyyy-MM-dd') ma_planenddate,nvl(ma_cop,'BYT') ma_cop,'S' status,to_char(ma_date,'yyyy-MM-dd HH24:mi:ss') ma_date,ma_recorder,nvl(ma_version,0) ma_version,erpid,wc_id,pr_id,to_char(ma_modifydate,'yyyy-MM-dd HH24:mi:ss') ma_modifydate,ma_modifier,flag from mes_make left join product on ma_prodcode=pr_code left join workcenter on ma_wccode=wc_code where id=?",
+                    new BeanPropertyRowMapper<Make>(Make.class),rs.getInt("id"));
+            make.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
+            make.setMesUser(tokenConfig.get("mesUser"));
+            Map<String, Object> map = syncMES(JSON.toJSONString(make, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBase"));
+            if (map!=null){
+                int code = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1"));
+                if (code==0){
+                    baseDao.updateByCondition("mes_make","status='D'","status='W' and id="+rs.getInt("id"));
+                }else {
+                    baseDao.updateByCondition("mes_make","status='F'","status='W' and id="+rs.getInt("id"));
+                    baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode) values (MESERRORLOG_SEQ.NEXTVAL,'"+tokenConfig.get("syncMakeBase")+"','"+StringUtil.nvl(map.get("msg"),"")+"',sysdate,'"+make.getMa_code()+"')");
+                }
+            }
+        }
+    }
+
+    @Override
+    public void syncMakeBaseDetails() {
+        SqlRowList rs = baseDao.queryForRowSet("select id,mm_code,mm_detno from mes_makematerial where status='W'");
+        while (rs.next()){
+            int count = baseDao.getCount("select count(1) from mes_make where status='D' and action<>'D' and ma_code='" + rs.getGeneralString("mm_code") + "'");
+            if (count>0) {
+                MakeMaterial makeMaterial = baseDao.getJdbcTemplate().queryForObject("select mm_code,erpid,mm_prodcode,pr_detail,pr_spec,pr_unit,mm_oneuseqty qty,mm_qty,mm_oneuseqty,case when mm_ifrep=-1 then 'alternative' else 'main' end type,bo_recorder,to_char(bo_date,'yyyy-MM-dd HH24:mi:ss') bo_date,nvl(bo_version,0) bo_version,nvl(bo_cop,'BYT') bo_cop,mm_repprodcode,mm_balance,ma_custcode,to_char(mc_indate,'yyyy-MM-dd HH24:mi:ss') mc_indate,mc_recorder,flag from mes_makematerial left join make on ma_id=mm_maid left join Product on mm_prodcode=pr_code left join bom on bo_id=mm_bomid left join MakeMaterialChangeDet on md_makecode=ma_code and md_mmdetno=mm_detno left join MakeMaterialChange on mc_id=md_mcid where id=? order by mm_detno", new BeanPropertyRowMapper<MakeMaterial>(MakeMaterial.class), rs.getInt("id"));
+                makeMaterial.setMesUser(tokenConfig.get("mesUser"));
+                makeMaterial.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
+                Map<String, Object> map = syncMES(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBaseDetail"));
+                if (map != null) {
+                    int code = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1"));
+                    if (code == 0) {
+                        baseDao.updateByCondition("mes_makematerial", "status='D'", "status='W' and id=" + rs.getInt("id"));
+                    } else {
+                        baseDao.updateByCondition("mes_makematerial", "status='F'", "status='W' and id=" + rs.getInt("id"));
+                        baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode,mel_djdetno) values(MESERRORLOG_SEQ.NEXTVAL,'" + tokenConfig.get("syncMakeBaseDetail") + "','" + StringUtil.nvl(map.get("msg"), "") + "',sysdate,'" + rs.getGeneralString("mm_code") + "',"+rs.getInt("mm_detno")+")");
+                    }
+                }
+            }
+        }
+    }
+
+    private Map<String, Object> syncMES(String params,String url){
+        Map<String, Object> map = new HashMap<>();
+        map.put("code",-1);
+        System.err.println(params);
+        try {
+            String post = PSHttpUtils.sendPost(tokenConfig.get("mesHttp") + url, params);
+            JSONObject jsonObject = JSON.parseObject(post);
+            int code = jsonObject.getIntValue("result");
+            if (code==0){
+                map.put("code",code);
+                map.put("msg","同步MES成功");
+            }else if(code==1){
+                map.put("code",code);
+                map.put("msg",jsonObject.getString("message"));
+            }else {
+                map.put("code",-1);
+                map.put("msg","接口调用异常,请联系MES处理!");
+            }
+        }catch (Exception e){
+            map.put("msg","接口调用异常,请联系MES处理!");
+            e.printStackTrace();
+        }
+        return map;
+    }
+}

+ 17 - 0
src/main/java/com/uas/eis/service/ScheduleTaskService.java

@@ -0,0 +1,17 @@
+package com.uas.eis.service;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-23 15:27
+ */
+public interface ScheduleTaskService {
+
+    void syncProducts();
+
+    void syncMakeBases();
+
+    void syncMakeBaseDetails();
+
+
+}

+ 57 - 0
src/main/java/com/uas/eis/task/ScheduleTask.java

@@ -0,0 +1,57 @@
+package com.uas.eis.task;
+
+import com.uas.eis.service.ScheduleTaskService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @author koul
+ * @email koul@usoftchina.com
+ * @date 2021-12-23 15:27
+ */
+@Component("scheduleTask")
+public class ScheduleTask {
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Autowired
+    private ScheduleTaskService scheduleTaskService;
+
+
+    /**
+     * 同步物料资料
+     */
+    public void syncProducts() {
+        logger.info("同步物料资料开始");
+        Date date = new Date();
+        scheduleTaskService.syncProducts();
+        logger.info("同步物料资料结束:用时" + ((System.currentTimeMillis() - date.getTime()) / 1000));
+
+    }
+
+    /**
+     * 同步工单
+     */
+    public void syncMakeBases() {
+        logger.info("同步工单开始");
+        Date date = new Date();
+        scheduleTaskService.syncMakeBases();
+        logger.info("同步工单结束:用时" + ((System.currentTimeMillis() - date.getTime()) / 1000));
+
+    }
+
+    /**
+     * 同步工单BOM
+     */
+    public void syncMakeBaseDetails() {
+        logger.info("同步工单BOM开始");
+        Date date = new Date();
+        scheduleTaskService.syncMakeBaseDetails();
+        logger.info("同步工单BOM:用时" + ((System.currentTimeMillis() - date.getTime()) / 1000));
+
+    }
+
+}

+ 35 - 0
src/main/resources/application-prod.yml

@@ -0,0 +1,35 @@
+spring:
+    datasource:
+        type: org.apache.tomcat.jdbc.pool.DataSource
+        driverClassName: oracle.jdbc.OracleDriver
+        username: BOYT
+        password: select!#%*(
+        url: jdbc:oracle:thin:@192.168.16.243:1521:orcl
+    redis:
+        host: 10.1.81.208
+        port: 26379
+server:
+    tomcat:
+        uri_encoding: UTF-8
+    context-path:
+        /EIS
+
+Task:
+    SyncProductsMethod: syncProducts
+    SyncProductsCron: 0 1/5 * * * ?
+    SyncMakeBasesMethod: syncMakeBases
+    SyncMakeBasesCron: 0 2/5 * * * ?
+    SyncMakeBaseDetailsMethod: syncMakeBaseDetails
+    SyncMakeBaseDetailsCron: 0 3/5 * * * ?
+
+action:
+    api_action: /EIS/api,/EIS/mes,/EIS/erp
+    public_actions: /EIS/logout,/EIS/hello1
+
+extral:
+    kingdee:
+        url: http://183.62.131.97:9880/k3cloud/
+        dbId: 614562cfb7a481
+        uid: admin1
+        pwd: 123456789
+        lang: 2052

+ 2 - 26
src/main/resources/application.yml

@@ -1,10 +1,6 @@
 spring:
-    datasource:
-        type: org.apache.tomcat.jdbc.pool.DataSource
-        driverClassName: oracle.jdbc.OracleDriver
-        username: BOYT
-        password: select!#%*(
-        url: jdbc:oracle:thin:@192.168.16.243:1521:orcl
+    profiles:
+        active: prod
     http:
         encoding:
             force: true
@@ -12,23 +8,3 @@ spring:
             enabled: true
     message:
         encoding: UTF-8
-    redis:
-        host: 10.1.81.208
-        port: 26379
-server:
-    tomcat:
-        uri_encoding: UTF-8
-    context-path:
-        /EIS
-
-action:
-    api_action: /EIS/api,/EIS/mes,/EIS/erp
-    public_actions: /EIS/logout,/EIS/hello1
-
-extral:
-    kingdee:
-        url: http://183.62.131.97:9880/k3cloud/
-        dbId: 614562cfb7a481
-        uid: admin1
-        pwd: 123456789
-        lang: 2052