/**   
 * @Title: ProcessYieldServiceImpl.java 
 * @Package com.sw.mes.webservice.service.impl 
 * @Description: TODO(用一句话描述该文件做什么) 
 * @author 中环 keily  
 * @date 2022年2月28日 上午10:34:15 
 * @version V1.0   
 */   
     
package com.sw.mes.webservice.service.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.sw.mes.core.utils.DateUtil;
import com.sw.mes.third.entity.ActualWorkingHours;
import com.sw.mes.third.enums.SapStaticEnum;
import com.sw.mes.third.service.SapGrService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sw.mes.webservice.service.ProcessYieldAndHourService;
import com.sw.mes.webservice.service.SendYieldAndHourToSapService;

import lombok.extern.slf4j.Slf4j;

/** 
 * @ClassName: ProcessYieldServiceImpl 
 * @Description: 向sap传送工序【产量|工时】数据
 * @author 中环 keily
 * @date 2022年2月28日 上午10:34:15 
 *  
 */
@Service
@Transactional
@Slf4j
public class ProcessYieldAndHourServiceImpl implements ProcessYieldAndHourService {
	
	@Autowired
    private SapGrService sapGrService;
	
	@Autowired
    private SendYieldAndHourToSapService sendYieldAndHourToSapService;

	/* (非 Javadoc) 
	 *  
	 *  
	 * @param date
	 * @return 
	 * @see com.sw.mes.webservice.service.ProcessYieldService#queryCrystalPullingData(java.util.Date) 
	 */
	@Override
	public void queryAndSendCrystalPullingData(Date date, String sapDate, String sapTime, String sapOrderDate) throws Exception {
		log.debug("执行时间：" + DateUtil.formatDate(date, DateUtil.longFormat));
		//1.查询数据
		List<Map<String, Object>> queryList = new ArrayList<Map<String,Object>>();
		Map<String, Object> itemMap = new HashMap<String, Object>();
		itemMap.put("ZMESID", UUID.randomUUID().toString()); // MES DATA Key ID Number
		itemMap.put("AUFNR", "sap_order_no_001"); // SAP生产订单编码
		itemMap.put("MATNR", "product_no_001"); //  产品物料编码
		itemMap.put("WERKS", SapStaticEnum.SapFactoryId.六期工厂ID.getValue()); // 工厂编码
		itemMap.put("ME_OPERATION_ID", "ProcessYield_crystalPulling_id"); // 工序ID
		itemMap.put("LTXA1", "工序产量-拉晶"); // 工序描述
		itemMap.put("EQTYPE", "crystalPulling_001"); // 设备类型编码
		itemMap.put("MENGE", new BigDecimal(123.123)); // 生产实际数量
		itemMap.put("MEINS", "KG"); //产品物料的基本单位
		itemMap.put("VGW01", new BigDecimal(456.1)); // 生产实际工时
		itemMap.put("MEINS1", "MIN"); // 工时的单位 
		itemMap.put("PRODATE", sapDate); // 工序生产日期
		itemMap.put("LTXA2", "班组"); // 班组
		itemMap.put("PROTIME", sapTime); // 工序生产完成时间 六位时间：HHMMSS
		queryList.add(itemMap);
		
		if (queryList != null && queryList.size() > 0) {
			// 2.组装数据
			List<ActualWorkingHours> list = new ArrayList<>();
			for (Map<String, Object> map : queryList) {
				if (map.get("MENGE") != null && map.get("AUFNR") != null && map.get("MATNR") != null
						&& map.get("VGW01") != null && StringUtils.isNotBlank(map.get("MENGE").toString())
						&& StringUtils.isNotBlank(map.get("AUFNR").toString())
						&& StringUtils.isNotBlank(map.get("MATNR").toString())
						&& StringUtils.isNotBlank(map.get("VGW01").toString())
						&& new BigDecimal(map.get("MENGE").toString()).compareTo(new BigDecimal(0)) > 0
						&& new BigDecimal(map.get("VGW01").toString()).compareTo(new BigDecimal(0)) > 0) {
					ActualWorkingHours actualWorkingHours = new ActualWorkingHours();
					actualWorkingHours.setZMESID(map.get("ZMESID").toString());
					actualWorkingHours.setWERKS(map.get("WERKS").toString());
					actualWorkingHours.setAUFNR(map.get("AUFNR").toString());
					actualWorkingHours.setEQTYPE(map.get("EQTYPE").toString());
					actualWorkingHours.setLTXA1(map.get("LTXA1").toString());
					actualWorkingHours.setLTXA2(map.get("LTXA2").toString());
					actualWorkingHours.setMATNR(map.get("MATNR").toString());
					actualWorkingHours.setME_OPERATION_ID(map.get("ME_OPERATION_ID").toString());
					actualWorkingHours.setMEINS(map.get("MEINS").toString());
					actualWorkingHours.setMEINS1(map.get("MEINS1").toString());
					actualWorkingHours.setMENGE(map.get("MENGE").toString());
					actualWorkingHours.setPRODATE(sapDate);// 日期 yyyymmdd
					actualWorkingHours.setPROTIME(sapTime);// 时间 HHmmss
					actualWorkingHours.setVGW01(map.get("VGW01").toString());
					list.add(actualWorkingHours);
				}
			}

			// 3.发送数据
			if (list.size() > 0) {
				try {
					for (ActualWorkingHours actualWorkingHours : list) {
						String newAUFNR = sapGrService.getNowSapOrderNo(actualWorkingHours.getAUFNR(), sapOrderDate);
						if (StringUtils.isNotBlank(newAUFNR)) {
							actualWorkingHours.setAUFNR(newAUFNR);
						}
					}

					sendYieldAndHourToSapService.mesToSap(list, 300000);
				} catch (Exception e) {
					e.printStackTrace();
					throw new Exception(e.getMessage());
				}
			}
		}
		
		
		
	}

}
