253 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Java
		
	
	
	
		
		
			
		
	
	
			253 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Java
		
	
	
	
| 
								 | 
							
								package tqq9.lc123.cloud.app.api.controller;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import com.alibaba.fastjson.JSONArray;
							 | 
						|||
| 
								 | 
							
								import com.alibaba.fastjson.JSONObject;
							 | 
						|||
| 
								 | 
							
								import com.drew.lang.annotations.NotNull;
							 | 
						|||
| 
								 | 
							
								import kd.bos.dataentity.OperateOption;
							 | 
						|||
| 
								 | 
							
								import kd.bos.dataentity.entity.DynamicObject;
							 | 
						|||
| 
								 | 
							
								import kd.bos.entity.operate.result.IOperateInfo;
							 | 
						|||
| 
								 | 
							
								import kd.bos.entity.operate.result.OperationResult;
							 | 
						|||
| 
								 | 
							
								import kd.bos.openapi.common.custom.annotation.ApiController;
							 | 
						|||
| 
								 | 
							
								import kd.bos.openapi.common.custom.annotation.ApiParam;
							 | 
						|||
| 
								 | 
							
								import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
							 | 
						|||
| 
								 | 
							
								import kd.bos.openapi.common.result.CustomApiResult;
							 | 
						|||
| 
								 | 
							
								import kd.bos.orm.query.QFilter;
							 | 
						|||
| 
								 | 
							
								import kd.bos.servicehelper.BusinessDataServiceHelper;
							 | 
						|||
| 
								 | 
							
								import kd.bos.servicehelper.operation.OperationServiceHelper;
							 | 
						|||
| 
								 | 
							
								import org.apache.commons.lang3.StringUtils;
							 | 
						|||
| 
								 | 
							
								import tqq9.lc123.cloud.app.api.model.WMSXmlReturn;
							 | 
						|||
| 
								 | 
							
								import tqq9.lc123.cloud.app.api.utils.ApiResultExt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import java.text.ParseException;
							 | 
						|||
| 
								 | 
							
								import java.text.SimpleDateFormat;
							 | 
						|||
| 
								 | 
							
								import java.util.Date;
							 | 
						|||
| 
								 | 
							
								import java.util.List;
							 | 
						|||
| 
								 | 
							
								import java.util.Map;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								@ApiController(value = "WMSChangeWhDiffAreaController", desc = "WMS跨区移库通知接口,自定义插件")
							 | 
						|||
| 
								 | 
							
								public class WMSChangeWhDiffAreaController {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    @ApiPostMapping(value = "/WMS_ChgWhDiffArea_SH", desc = "WMS跨区移库通知接口_SH")
							 | 
						|||
| 
								 | 
							
								    public CustomApiResult<WMSXmlReturn> WMS_ChgWhDiffArea_SH
							 | 
						|||
| 
								 | 
							
								            (@NotNull @ApiParam(value = "入参", required = true) Map<String, Object> dataMap) {
							 | 
						|||
| 
								 | 
							
								        WMSXmlReturn wmsXmlReturn = new WMSXmlReturn();
							 | 
						|||
| 
								 | 
							
								        WMSXmlReturn.Response response = new WMSXmlReturn.Response();
							 | 
						|||
| 
								 | 
							
								        wmsXmlReturn.setResponse(response);
							 | 
						|||
| 
								 | 
							
								        response.setCode("0");
							 | 
						|||
| 
								 | 
							
								        response.setFlag("success");
							 | 
						|||
| 
								 | 
							
								        response.setMessage("成功");
							 | 
						|||
| 
								 | 
							
								        StringBuilder errormsg = new StringBuilder();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        JSONObject data = new JSONObject(dataMap);
							 | 
						|||
| 
								 | 
							
								        JSONObject request = data.getJSONObject("request");
							 | 
						|||
| 
								 | 
							
								        JSONObject items = request.getJSONObject("items");
							 | 
						|||
| 
								 | 
							
								        JSONArray itemArr = items.getJSONArray("item");
							 | 
						|||
| 
								 | 
							
								        if (itemArr != null && itemArr.size() == 2){
							 | 
						|||
| 
								 | 
							
								            JSONObject ckObj = null;
							 | 
						|||
| 
								 | 
							
								            JSONObject rkObj = null;
							 | 
						|||
| 
								 | 
							
								            JSONObject item0 = (JSONObject) itemArr.get(0);
							 | 
						|||
| 
								 | 
							
								            JSONObject item1 = (JSONObject) itemArr.get(1);
							 | 
						|||
| 
								 | 
							
								            String orderType = item0.getString("orderType");//单据类型:YDCK=移动出库,YDRK= 移动入库,必填
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(orderType, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 warehouseCode 为空");
							 | 
						|||
| 
								 | 
							
								            }else {
							 | 
						|||
| 
								 | 
							
								                if("YDCK".equals(orderType)){
							 | 
						|||
| 
								 | 
							
								                    ckObj = item0;
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    rkObj = item1;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            //数据校验
							 | 
						|||
| 
								 | 
							
								            String ownerCode = ckObj.getString("ownerCode");//货主编码-默认 LICHI
							 | 
						|||
| 
								 | 
							
								            String warehouseCode = ckObj.getString("warehouseCode");//仓库编码
							 | 
						|||
| 
								 | 
							
								            DynamicObject warehouse = null;
							 | 
						|||
| 
								 | 
							
								            DynamicObject org = null;
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(warehouseCode, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 warehouseCode 为空");
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                //查询仓库
							 | 
						|||
| 
								 | 
							
								                QFilter f = new QFilter("number", "=", warehouseCode);
							 | 
						|||
| 
								 | 
							
								                DynamicObject[] bd_warehouseArr = BusinessDataServiceHelper.load("bd_warehouse", "id,number,name", new QFilter[]{f});
							 | 
						|||
| 
								 | 
							
								                if(bd_warehouseArr != null && bd_warehouseArr.length > 0){
							 | 
						|||
| 
								 | 
							
								                    warehouse = bd_warehouseArr[0];
							 | 
						|||
| 
								 | 
							
								                    //TODO 根据仓库获取对应的组织
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    errormsg = errormsg.append(";").append("根据传入参数 warehouseCode:"+warehouseCode+" 没有查询到仓库信息");
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            String orderCode = ckObj.getString("orderCode");//单据编码
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(orderCode, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 orderCode 为空");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            String outBizCode = ckObj.getString("outBizCode");//消息ID,去重用
							 | 
						|||
| 
								 | 
							
								            String itemCode = ckObj.getString("itemCode");//物料编码
							 | 
						|||
| 
								 | 
							
								            DynamicObject material = null;
							 | 
						|||
| 
								 | 
							
								            DynamicObject materialinv = null;
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(itemCode, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 itemCode 为空");
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                //物料
							 | 
						|||
| 
								 | 
							
								                QFilter f = new QFilter("number", "=", itemCode);
							 | 
						|||
| 
								 | 
							
								                DynamicObject[] materialArr = BusinessDataServiceHelper.load("bd_material", "id,number,name,baseunit", new QFilter[]{f});
							 | 
						|||
| 
								 | 
							
								                if(materialArr != null && materialArr.length > 0){
							 | 
						|||
| 
								 | 
							
								                    material = materialArr[0];
							 | 
						|||
| 
								 | 
							
								                    //物料库存信息
							 | 
						|||
| 
								 | 
							
								                    f = new QFilter("masterid.id", "=", material.getPkValue());
							 | 
						|||
| 
								 | 
							
								                    DynamicObject[] materialinvArr = BusinessDataServiceHelper.load("bd_materialinventoryinfo", "id,number,name", new QFilter[]{f});
							 | 
						|||
| 
								 | 
							
								                    if(materialinvArr != null && materialinvArr.length > 0){
							 | 
						|||
| 
								 | 
							
								                        materialinv = materialinvArr[0];
							 | 
						|||
| 
								 | 
							
								                        materialinv = BusinessDataServiceHelper.loadSingle(materialinv.getPkValue(), "bd_materialinventoryinfo");
							 | 
						|||
| 
								 | 
							
								                    }else{
							 | 
						|||
| 
								 | 
							
								                        errormsg = errormsg.append(";").append("物料编码:"+ itemCode +" 没有生成对应物料库存信息");
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    errormsg = errormsg.append(";").append("根据传入参数 itemCode:"+ itemCode +" 没有查询到对应物料信息");
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            String itemId = ckObj.getString("itemId");//仓库系统物料ID
							 | 
						|||
| 
								 | 
							
								            String inventoryType = ckObj.getString("inventoryType");//库存类型:ZP=正品, CC=残次
							 | 
						|||
| 
								 | 
							
								            int quantity = ckObj.getInteger("quantity");//数量
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(quantity, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 quantity 为空");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            String transferZone = ckObj.getString("transferZone");//移入移出区域
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(transferZone, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 transferZone 为空");
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                //TODO 处理区域信息
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            String batchCode = ckObj.getString("batchCode");//批次
							 | 
						|||
| 
								 | 
							
								            DynamicObject lot = null;
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(batchCode, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 batchCode 为空");
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                //查询批号
							 | 
						|||
| 
								 | 
							
								                QFilter f = new QFilter("number", "=", batchCode);
							 | 
						|||
| 
								 | 
							
								                DynamicObject[] bd_lotArr = BusinessDataServiceHelper.load("bd_lot", "id,name,number", new QFilter[]{f});
							 | 
						|||
| 
								 | 
							
								                if(bd_lotArr != null && bd_lotArr.length > 0){
							 | 
						|||
| 
								 | 
							
								                    lot = bd_lotArr[0];
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    errormsg = errormsg.append(";").append("根据传入参数 batchCode:"+ batchCode +" 没有查询到对应批次信息");
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            Date productDate = ckObj.getDate("productDate");//生产日期
							 | 
						|||
| 
								 | 
							
								            Date expireDate = ckObj.getDate("expireDate");//过期日期
							 | 
						|||
| 
								 | 
							
								            String produceCode = ckObj.getString("produceCode");//生产批号
							 | 
						|||
| 
								 | 
							
								            String changeTimeStr = ckObj.getString("changeTime");//移出时间
							 | 
						|||
| 
								 | 
							
								            Date changeTime = new Date();
							 | 
						|||
| 
								 | 
							
								            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(changeTime, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 batchCode 为空");
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                try {
							 | 
						|||
| 
								 | 
							
								                    changeTime = sdf.parse(changeTimeStr);
							 | 
						|||
| 
								 | 
							
								                } catch (ParseException e) {
							 | 
						|||
| 
								 | 
							
								                    throw new RuntimeException(e);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            String remark = ckObj.getString("remark");//备注
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            //入库信息
							 | 
						|||
| 
								 | 
							
								            String ownerCode_1 = rkObj.getString("ownerCode");//货主编码-默认 LICHI
							 | 
						|||
| 
								 | 
							
								            String warehouseCode_1 = rkObj.getString("warehouseCode");//仓库编码
							 | 
						|||
| 
								 | 
							
								            DynamicObject warehouse_1 = null;
							 | 
						|||
| 
								 | 
							
								            DynamicObject org_1 = null;
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(warehouseCode_1, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 warehouseCode 为空");
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                //查询仓库
							 | 
						|||
| 
								 | 
							
								                QFilter f = new QFilter("number", "=", warehouseCode_1);
							 | 
						|||
| 
								 | 
							
								                DynamicObject[] bd_warehouseArr = BusinessDataServiceHelper.load("bd_warehouse", "id,number,name", new QFilter[]{f});
							 | 
						|||
| 
								 | 
							
								                if(bd_warehouseArr != null && bd_warehouseArr.length > 0){
							 | 
						|||
| 
								 | 
							
								                    warehouse_1 = bd_warehouseArr[0];
							 | 
						|||
| 
								 | 
							
								                    //TODO 根据仓库获取对应的组织
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    errormsg = errormsg.append(";").append("根据传入参数 warehouseCode:"+warehouseCode_1+" 没有查询到仓库信息");
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            String orderCode_1 = rkObj.getString("orderCode");//单据编码
							 | 
						|||
| 
								 | 
							
								            String outBizCode_1 = rkObj.getString("outBizCode");//消息ID,去重用
							 | 
						|||
| 
								 | 
							
								            String itemCode_1 = rkObj.getString("itemCode");//物料编码
							 | 
						|||
| 
								 | 
							
								            String itemId_1 = rkObj.getString("itemId");//仓库系统物料ID
							 | 
						|||
| 
								 | 
							
								            String inventoryType_1 = rkObj.getString("inventoryType");//库存类型:ZP=正品, CC=残次
							 | 
						|||
| 
								 | 
							
								            int quantity_1 = rkObj.getInteger("quantity");//数量
							 | 
						|||
| 
								 | 
							
								            String transferZone_1 = rkObj.getString("transferZone");//移入移出区域
							 | 
						|||
| 
								 | 
							
								            if (ApiResultExt.validateRequired(transferZone_1, "String")) {
							 | 
						|||
| 
								 | 
							
								                errormsg = errormsg.append(";").append("传入参数 transferZone 为空");
							 | 
						|||
| 
								 | 
							
								            }else{
							 | 
						|||
| 
								 | 
							
								                //TODO 处理区域信息
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            String batchCode_1 = rkObj.getString("batchCode");//批次
							 | 
						|||
| 
								 | 
							
								            Date productDate_1 = rkObj.getDate("productDate");//生产日期
							 | 
						|||
| 
								 | 
							
								            Date expireDate_1 = rkObj.getDate("expireDate");//过期日期
							 | 
						|||
| 
								 | 
							
								            String produceCode_1 = rkObj.getString("produceCode");//生产批号
							 | 
						|||
| 
								 | 
							
								            Date changeTime_1 = rkObj.getDate("changeTime");//移出时间
							 | 
						|||
| 
								 | 
							
								            String remark_1 = rkObj.getString("remark");//备注
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (errormsg.length() > 0) {
							 | 
						|||
| 
								 | 
							
								                response.setMessage(errormsg.substring(1));
							 | 
						|||
| 
								 | 
							
								                response.setCode("-1");
							 | 
						|||
| 
								 | 
							
								                response.setFlag("failure");
							 | 
						|||
| 
								 | 
							
								                return CustomApiResult.success(wmsXmlReturn);
							 | 
						|||
| 
								 | 
							
								            }else {
							 | 
						|||
| 
								 | 
							
								                DynamicObject outBill = BusinessDataServiceHelper.newDynamicObject("im_otheroutbill");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                //保存
							 | 
						|||
| 
								 | 
							
								                OperationResult operationResult = OperationServiceHelper.executeOperate("save", "im_otheroutbill", new DynamicObject[]{outBill}, OperateOption.create());
							 | 
						|||
| 
								 | 
							
								                if (!operationResult.isSuccess()) {
							 | 
						|||
| 
								 | 
							
								                    List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
							 | 
						|||
| 
								 | 
							
								                    for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
							 | 
						|||
| 
								 | 
							
								                        errormsg = errormsg.append(";").append(iOperateInfo.getMessage());
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    response.setMessage(errormsg.substring(1));
							 | 
						|||
| 
								 | 
							
								                    response.setCode("-1");
							 | 
						|||
| 
								 | 
							
								                    response.setFlag("failure");
							 | 
						|||
| 
								 | 
							
								                    return CustomApiResult.success(wmsXmlReturn);
							 | 
						|||
| 
								 | 
							
								                } else {
							 | 
						|||
| 
								 | 
							
								                    //提交
							 | 
						|||
| 
								 | 
							
								                    operationResult = OperationServiceHelper.executeOperate("submit", "im_otheroutbill", new DynamicObject[]{outBill}, OperateOption.create());
							 | 
						|||
| 
								 | 
							
								                    if (!operationResult.isSuccess()) {
							 | 
						|||
| 
								 | 
							
								                        List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
							 | 
						|||
| 
								 | 
							
								                        for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
							 | 
						|||
| 
								 | 
							
								                            errormsg = errormsg.append(";").append(iOperateInfo.getMessage());
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        response.setMessage(errormsg.substring(1));
							 | 
						|||
| 
								 | 
							
								                        response.setCode("-1");
							 | 
						|||
| 
								 | 
							
								                        response.setFlag("failure");
							 | 
						|||
| 
								 | 
							
								                        return CustomApiResult.success(wmsXmlReturn);
							 | 
						|||
| 
								 | 
							
								                    } else {
							 | 
						|||
| 
								 | 
							
								                        //审核
							 | 
						|||
| 
								 | 
							
								                        operationResult = OperationServiceHelper.executeOperate("audit", "im_otheroutbill", new DynamicObject[]{outBill}, OperateOption.create());
							 | 
						|||
| 
								 | 
							
								                        if (!operationResult.isSuccess()) {
							 | 
						|||
| 
								 | 
							
								                            List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
							 | 
						|||
| 
								 | 
							
								                            for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
							 | 
						|||
| 
								 | 
							
								                                errormsg = errormsg.append(";").append(iOperateInfo.getMessage());
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                            response.setMessage(errormsg.substring(1));
							 | 
						|||
| 
								 | 
							
								                            response.setCode("-1");
							 | 
						|||
| 
								 | 
							
								                            response.setFlag("failure");
							 | 
						|||
| 
								 | 
							
								                            return CustomApiResult.success(wmsXmlReturn);
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                response.setCode("0");
							 | 
						|||
| 
								 | 
							
								                response.setFlag("success");
							 | 
						|||
| 
								 | 
							
								                response.setMessage("成功");
							 | 
						|||
| 
								 | 
							
								                return CustomApiResult.success(wmsXmlReturn);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }else {
							 | 
						|||
| 
								 | 
							
								            response.setMessage("传入参数items为空或者items数量不对 ");
							 | 
						|||
| 
								 | 
							
								            response.setCode("-1");
							 | 
						|||
| 
								 | 
							
								            response.setFlag("failure");
							 | 
						|||
| 
								 | 
							
								            return CustomApiResult.success(wmsXmlReturn);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |