package com.sunda.spmsweb.ordercontroller;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sunda.spmscommon.ConstantWhsOther;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmsuser.entity.SpmsUser;
import com.sunda.spmsuser.service.ISpmsUserService;
import com.sunda.spmsweb.util.MD5Utils;
import com.sunda.spmswms.entity.WhsOtherUnload;
import com.sunda.spmswms.service.IWhsOtherUnloadService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * <p>
 * SAP推送装箱单接口数据到SPMS
 * </p>
 *
 * @author 黄志聪
 * @since 2023-08-07
 */
@RestController
@RequestMapping("/zxdSpms")
@Api(tags = "SAP推送装箱单接口数据到SPMS", description = "SAP推送装箱单接口数据到SPMS")
public class ZxdSpmsController {
	
    @Autowired
    ISpmsUserService iSpmsUserService;

    @Autowired
    IWhsOtherUnloadService iWhsOtherUnloadService;

	@RequestMapping("/ZXD_IF_SPMS_09")
    @ApiOperation(value = "SAP（非自管仓）将卸货实际传输至SPMS", httpMethod = "POST")
    public ResponseResult sendMailCode(@RequestBody JSONObject doc) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat sdfs = new SimpleDateFormat("yyyyMMdd");
            JSONArray item = new JSONArray();
            //JSONObject SendData = doc.getJSONObject("SendData");
            JSONObject jsonHead = doc.getJSONObject("HEAD");
            JSONArray jsonItem = doc.getJSONArray("ITEM");
            if(jsonHead!=null && jsonHead.get("MBLNR")!=null && jsonHead.get("LYDJH")!=null){
                String MBLNR = jsonHead.getString("MBLNR");//物料凭证
                String MJAHR = jsonHead.getString("MJAHR");//物料凭证年份
                String LYDJH = jsonHead.getString("LYDJH");//SPMS单号

                WhsOtherUnload whsOtherTask = new WhsOtherUnload();
                whsOtherTask.setTaskStatus("4");//"单据状态 1=待处理；2=已保存；3=已提交；4=已获取SAP凭证；5=已完成；6=关闭作废"
                whsOtherTask.setSapVoucherNumber(MBLNR);
                whsOtherTask.setSapVoucherYear(MJAHR);
                whsOtherTask.setSpmsId(LYDJH);
                iWhsOtherUnloadService.updateWhsOtherTask(whsOtherTask, "SAP");
                return ResponseResult.success().add("SPMSID",LYDJH);
            }else{
                String werks = "";
                String whsLocationCode = "";
                String packageList = "";
                String date = "";
                String goodsType = "";
                int it = 1;
                for (int i = 0; i < jsonItem.size(); i++) {
                    JSONObject oObj = jsonItem.getJSONObject(i);
                    JSONObject jobj = new JSONObject();
                    if(oObj.get("XAWERKS")!=null && oObj.get("XAWERKS").toString().length()>0){
                        werks = oObj.get("XAWERKS").toString();
                    }else{
                        throw new Exception("工厂不能为空！");
                    }
                    if(oObj.get("XALGORT")!=null && oObj.get("XALGORT").toString().length()>0){
                        whsLocationCode = oObj.get("XALGORT").toString();
                    }else{
                        throw new Exception("仓库不能为空！");
                    }
                    if(oObj.get("XDNUM")!=null && oObj.get("XDNUM").toString().length()>0){
                        packageList = oObj.get("XDNUM").toString();
                    }else{
                        throw new Exception("装箱单号不能为空！");
                    }
                    if(oObj.get("X_ERDAT")!=null && oObj.get("X_ERDAT").toString().length()>0){
                        date = oObj.get("X_ERDAT").toString();//卸货日期
                        date = sdf.format(sdfs.parse(date));
                    }
                    if(oObj.get("MATNR")!=null && oObj.get("MATNR").toString().length()>0){
                    }else{
                        throw new Exception("物料不能为空！");
                    }

                    if(oObj.get("XALENG")!=null && oObj.get("XALENG").toString().length()>0){
                    }else{
                        throw new Exception("数量不能为空！");
                    }
                    //jobj.put("", oObj.get("LYDJH"));//SPMS单据号
                    jobj.put("packageList", oObj.get("XDNUM"));//装箱单号
                    jobj.put("packageRowId", oObj.get("POSNR_2"));//装柜实际行项目号
                    jobj.put("werks", oObj.get("XAWERKS"));//卸货工厂（移入工厂）
                    jobj.put("whsLocationCode", oObj.get("XALGORT"));//卸货仓库（移入仓库）
                    jobj.put("materialNo", oObj.getString("MATNR").replaceFirst("^0*", ""));//物料编码
                    jobj.put("boxNote", oObj.get("BOX_CODE"));//箱码
                    if(oObj.get("BOX_CODE")!=null && oObj.get("BOX_CODE").toString().length()>0){
                        goodsType = "X";//有箱码标识备件货
                    }else{
                        goodsType = "M";//贸易或
                    }
                    jobj.put("operateQty", oObj.get("XALENG"));//数量
                    jobj.put("basicUnit", oObj.get("MEINS"));//基本单位
                    jobj.put("packageQty", oObj.get("XALMNG"));//件数=包装数量
                    jobj.put("packageUnit", oObj.get("VRKME"));//包装单位
                    jobj.put("unitSales", oObj.get("VRKME"));//销售单位
                    //jobj.put("", oObj.get("X_ERDAT"));//卸货日期
                    jobj.put("netWeight", oObj.get("XNTGEW"));//净重
                    jobj.put("grossWeight", oObj.get("XBRGEW"));//毛重
                    jobj.put("weightUnit", oObj.get("GEWEI"));//重量单位
                    jobj.put("volumeQty", oObj.get("XVOLUM"));//体积
                    jobj.put("volumeUnit", oObj.get("VOLEH"));//体积单位
                    jobj.put("charg", oObj.get("CHARG"));//批次
                    //jobj.put("", oObj.get("LOEKZ"));//删除标识
                    jobj.put("goodsType", goodsType);
                    jobj.put("autoId", i+1);
                    jobj.put("rowId", it+"0");
                    it ++;
                    item.add(jobj);
                }
                JSONObject head = new JSONObject();
                head.put("movementType", ConstantWhsOther.InHouseUnload);
                head.put("sapMovementType", ConstantWhsOther.InHouseUnload);
                head.put("movementTypeDesc", "卸货入库");
                head.put("werks", werks);
                head.put("whsLocationCode", whsLocationCode);
                head.put("packageList", packageList);
                head.put("actualLoadingDate", date);
                head.put("createDate", date);
                head.put("postingDate", date);
                head.put("dateOfLoading",date );

                head.put("targetStatus", "1");
                head.put("taskStatus", "1");
                head.put("currentStatus", "1");
                head.put("taskStatusDesc", "草稿");
                head.put("createUserid", "SAP");
                head.put("goodsType", goodsType);
                if("M".equals(goodsType)){
                    head.put("goodsTypeDesc", "贸易货");
                }else{
                    head.put("goodsTypeDesc", "备件货");
                }
                JSONObject whsOther = new JSONObject();
                whsOther.put("whsOther", head);
                whsOther.put("whsOtherDtl", item);
                ResponseResult result = iWhsOtherUnloadService.onSaveWhsOther(whsOther, "SAP");
                WhsOtherUnload ts = (WhsOtherUnload)result.getData().get("whsOther");
                return ResponseResult.success().add("SPMSID", ts.getSpmsId());
            }

        } catch (Exception e) {
            e.printStackTrace();
            return ResponseResult.error("请求数据失败").add("error", e.getMessage());
        }
    }

}
