package com.phxl.modules.goods.web.spd;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.phxl.modules.goods.entity.billback.BillBackWithDetail;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.phxl.common.constants.PlatformConstant;
import com.phxl.common.response.PlatFormResponse;
import com.phxl.common.response.PlatFormResponseConstant;
import com.phxl.common.util.HTTPClient;
import com.phxl.common.utils.IdUtil;
import com.phxl.modules.goods.entity.billsettlement.BillSettlementWithDetail;
import com.phxl.modules.goods.entity.ctcareprov.CTCareProv;
import com.phxl.modules.goods.entity.ctdept.HisCtDept;
import com.phxl.modules.goods.entity.hisCtMedicineMaterial.HisCtMedicineMaterial;
import com.phxl.modules.goods.entity.invoiceback.SuInvoiceBackWithDetail;
import com.phxl.modules.goods.entity.medinstore.MedInStoreWithDetail;
import com.phxl.modules.goods.entity.medplan.MedPlanWithDetail;
import com.phxl.modules.goods.entity.medstock.MedStockList;
import com.phxl.modules.goods.entity.spills.HisSpillsList;
import com.phxl.modules.goods.entity.suoutstore.SuOutStoreWithDetail;
import com.phxl.modules.goods.entity.supplierstock.SupplierStockList;
import com.phxl.modules.goods.entity.supplygoods.MedSupplyGoods;
import com.phxl.modules.goods.service.billback.BillBackService;
import com.phxl.modules.goods.service.billsettlement.BillSettlementService;
import com.phxl.modules.goods.service.ctcareprov.CTCareProvService;
import com.phxl.modules.goods.service.ctdept.HisCtDeptService;
import com.phxl.modules.goods.service.hisCtMedicineMaterial.HisCtMedicineMaterialService;
import com.phxl.modules.goods.service.interfaceLog.InterfaceLogService;
import com.phxl.modules.goods.service.invoiceback.SuInvoiceBackService;
import com.phxl.modules.goods.service.medinstore.MedInStoreService;
import com.phxl.modules.goods.service.medplan.MedPlanService;
import com.phxl.modules.goods.service.medstock.MedStockService;
import com.phxl.modules.goods.service.spills.HisSpillsService;
import com.phxl.modules.goods.service.suoutstore.SuOutStoreService;
import com.phxl.modules.goods.service.supplierstock.SupplierStockService;
import com.phxl.modules.goods.service.supplygoods.MedSupplyGoodsService;

@Controller
@RequestMapping(value = "/Api")
public class SpdControlller {

	/**
	 * 日志对象
	 */
	protected Logger logger = LoggerFactory.getLogger(getClass());

	@Autowired
	private HisCtMedicineMaterialService ctMedicineMaterialService;

	@Autowired
	private InterfaceLogService interfaceLogService;

	@Autowired
	private HisCtDeptService hisCtDeptService;

	@Autowired
	private CTCareProvService cTCareProvService;

	@Autowired
	private MedSupplyGoodsService supplyGoodsService;

	@Autowired
	private MedStockService	stockService;

	@Autowired
	private  MedPlanService medPlanService;

	@Autowired
	private  MedInStoreService medInStoreService;

	@Autowired
	private BillBackService backService;

	@Autowired
	private BillSettlementService billSettlementService;

	@Autowired
	private SupplierStockService supplierStockService;

	@Autowired
	private SuOutStoreService suOutStoreService;

	@Autowired
	private HisSpillsService hisSpillsService;

	@Autowired
	private SuInvoiceBackService suInvoiceBackService;

	private static  HttpClient client;

	@RequestMapping(value="/setMFMedGoods")
	@ResponseBody
	public String setMFMedGoods(String id,HttpServletRequest request, @RequestBody String medgoodsList){
		logger.debug("药品目录接口请求参数:{}",medgoodsList);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setMFMedGoods:(药品目录)", medgoodsList, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<HisCtMedicineMaterial> materials = new ArrayList<HisCtMedicineMaterial>();
		try {
			materials = JSONObject.parseArray(medgoodsList, HisCtMedicineMaterial.class);
			for (HisCtMedicineMaterial hisCtMedicineMaterial : materials) {
				ctMedicineMaterialService.saveMedicine(hisCtMedicineMaterial);
			}
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
			response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			result = JSON.toJSONString(response);
			//medgoodsList = ctMedicineMaterialService.createRequest();
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setMFMedGoods", medgoodsList);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}

	@RequestMapping(value="/setHDept")
	@ResponseBody
	public String setHDept(String id,HttpServletRequest request, @RequestBody String params){
		logger.debug("医院科室资料接口请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setHDept:(医院科室)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<HisCtDept> depts = new ArrayList<HisCtDept>();
		try {
			depts = JSONObject.parseArray(params, HisCtDept.class);
			int end = hisCtDeptService.batchSaveOrUpdate(depts);
			if(end==1){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setHDept", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}

	/**
	 * 医院人员资料接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setMedStaff")
	@ResponseBody
	public String setMedStaff(HttpServletRequest request, @RequestBody String params){
		logger.debug("医院人员资料接口请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setMedStaff:(医院人员资料)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<CTCareProv> careProvs = new ArrayList<CTCareProv>();
		boolean end = false;
		try {
			careProvs = JSONObject.parseArray(params, CTCareProv.class);
			end = cTCareProvService.batchSaveOrUpdate(careProvs);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setMedStaff", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 医院采购目录接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setMFSupplyGoods")
	@ResponseBody
	public String setMFSupplyGoods(HttpServletRequest request, @RequestBody String params){
		logger.debug("医院采购目录接口请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setMFSupplyGoods:(医院采购目录)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<MedSupplyGoods> supplyGoods  = new ArrayList<MedSupplyGoods>();
		boolean end = false;
		try {
			supplyGoods = JSONObject.parseArray(params, MedSupplyGoods.class);
			end = supplyGoodsService.batchSave(supplyGoods);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setMedContent", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 医院库存接口
	 * @param request
	 * @param params
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/setMedStock",method = RequestMethod.POST)
	public String setMedStock(HttpServletRequest request, @RequestBody String params){
		logger.debug("HLI同步医院库存数据请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setMedStock:(医院库存)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<MedStockList> stocks  = new ArrayList<MedStockList>();
		boolean end = false;
		try {
			stocks = JSONObject.parseArray(params, MedStockList.class);
			end = stockService.batchSave(stocks);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setMedStock", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 医院补货计划接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setMedPlan")
	@ResponseBody
	public String setMedPlan(HttpServletRequest request, @RequestBody String params){
		logger.debug("补货计划接口请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setMedPlan:(补货计划)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<MedPlanWithDetail> medPlans = new ArrayList<MedPlanWithDetail>();
		boolean end = false;
		try {
			//改成批量的操作
			medPlans = JSONObject.parseArray(params, MedPlanWithDetail.class);
			end = medPlanService.batchSave(medPlans);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setMedPlan", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 医院退货接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setTRMedRPI")
	@ResponseBody
	public String setTRMedRPI(HttpServletRequest request, @RequestBody String params){
		logger.debug("医院退货计划接口请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setTRMedRPI:(医院退货计划)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<BillBackWithDetail> billBacks = new ArrayList<BillBackWithDetail>();
		boolean end = false;
		try {
			billBacks = JSONObject.parseArray(params, BillBackWithDetail.class);
			end = backService.batchSave(billBacks);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setTrmedRPI", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}

	/**
	 * 结算单接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setTRSettle")
	@ResponseBody
	public String setTRSettle(HttpServletRequest request, @RequestBody String params){
		logger.debug("同步医院结算单请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setTRSettle:(医院同步结算单)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<BillSettlementWithDetail> settlementWithDetails = new ArrayList<BillSettlementWithDetail>();
		boolean end = false;
		try {
			settlementWithDetails = JSONObject.parseArray(params, BillSettlementWithDetail.class);
			end = billSettlementService.batchSave(settlementWithDetails);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url + "setTrsettle", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 供应商库存接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setStock")
	@ResponseBody
	public String setStock(HttpServletRequest request, @RequestBody String params){
		logger.debug("供应商同步库存数据请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setStock:(供应商库存)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<SupplierStockList> supplierStocks  = new ArrayList<SupplierStockList>();
		boolean end = false;
		try {
			supplierStocks = JSONObject.parseArray(params, SupplierStockList.class);
			end = supplierStockService.batchSave(supplierStocks);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			try
			{
				//SPD服务请求:
				result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_SPD_Url+"setStock", params);
				response = JSONObject.parseObject(result,PlatFormResponse.class);
				response.setMsg("SPD:"+response.getMsg());
			}
			catch(Exception ex){
				logger.error("SPD:"+ex.getMessage());
				exception = "SPD:"+ex.getMessage();
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg("SPD:"+ex.getMessage());
				result = JSON.toJSONString(response);
			}

		} catch (Exception e) {
			logger.error("前置机:"+e.getMessage());
			exception = "前置机:"+e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("前置机:"+e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 供应商出库单接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setTrmedwv")
	@ResponseBody
	public String setTrmedwv(HttpServletRequest request, @RequestBody String params){
		logger.debug("同步供应商出库单请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setTrmedwv:(供应商出库单)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<SuOutStoreWithDetail> suOutStores = new ArrayList<SuOutStoreWithDetail>();
		boolean end = false;
		try {
			suOutStores = JSONObject.parseArray(params, SuOutStoreWithDetail.class);
			end = suOutStoreService.batchSave(suOutStores);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			try
			{
				//SPD服务请求:
				result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_SPD_Url+"setTrmedwv", params);
				response = JSONObject.parseObject(result,PlatFormResponse.class);
				response.setMsg("SPD:"+response.getMsg());
			}
			catch(Exception ex){
				logger.error("SPD:"+ex.getMessage());
				exception = "SPD:"+ex.getMessage();
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg("SPD:"+ex.getMessage());
				result = JSON.toJSONString(response);
			}

		} catch (Exception e) {
			logger.error("前置机:"+e.getMessage());
			exception = "前置机:"+e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("前置机:"+e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}

	/**
	 * 医院盘点损溢接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping(value="/setTrDiff")
	@ResponseBody
	public String setTrDiff(String id,HttpServletRequest request, @RequestBody String params){
		logger.debug("医院盘点损溢接口请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setTrDiff:(盘点损溢)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<HisSpillsList> spills = new ArrayList<HisSpillsList>();
		boolean end = false;
		try {
			spills = JSONObject.parseArray(params, HisSpillsList.class);
			end = hisSpillsService.batchSave(spills);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setTrDiff", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 供应商发票回传接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setInvoice")
	@ResponseBody
	public String setInvoice(HttpServletRequest request, @RequestBody String params){
		logger.debug("供应商发票回传接口请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setInvoice:(供应商发票回传)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<SuInvoiceBackWithDetail> suInvoiceBackWithDetailList = new ArrayList<SuInvoiceBackWithDetail>();
		boolean end = false;
		try {
			suInvoiceBackWithDetailList = JSONObject.parseArray(params, SuInvoiceBackWithDetail.class);
			end = suInvoiceBackService.batchSaveOrUpdate(suInvoiceBackWithDetailList);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			try
			{
				//SPD服务请求:
				result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_SPD_Url+"setInvoice", params);
				response = JSONObject.parseObject(result,PlatFormResponse.class);
				response.setMsg("SPD:"+response.getMsg());
			}
			catch(Exception ex){
				logger.error("SPD:"+ex.getMessage());
				exception = "SPD:"+ex.getMessage();
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg("SPD:"+ex.getMessage());
				result = JSON.toJSONString(response);
			}

		} catch (Exception e) {
			logger.error("前置机:"+e.getMessage());
			exception = "前置机:"+e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("前置机:"+e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}

	/*
	 * 医院入库单回传接口
	 * @param request
	 * @param params
	 * @return
	 */
	@RequestMapping("/setMedInStore")
	@ResponseBody
	public String setMedInStore(HttpServletRequest request, @RequestBody String params){
		logger.debug("医院入库单回传接口请求参数:{}",params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("setMedInStore:(医院入库单回传)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		List<MedInStoreWithDetail> medInStores = new ArrayList<MedInStoreWithDetail>();
		boolean end = false;
		try {
			//改成批量的操作
			medInStores = JSONObject.parseArray(params, MedInStoreWithDetail.class);
			end = medInStoreService.batchSave(medInStores);
			if(end){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getSuccess_ResultContent);
			}else{
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				response.setMsg(PlatFormResponseConstant.ResponseBodyMsg.getFail_ResultContent);
			}
			result = JSON.toJSONString(response);
			//供应商服务请求:
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"setMedInStore", params);
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}

	/***
	 * 推送对账数据到平台
	 * @param params
	 * @return
	 */
	@RequestMapping("/pushBalance")
	@ResponseBody
	public String pushBalance(@RequestBody String params) {
		logger.debug("推送对账数据:{}", params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("pushBalance:(推送对账数据)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		try {
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_URL + "supplier/receiver/getdispensingaccount", params);
			JSONObject jsonObject = JSONObject.parseObject(result);
			if(jsonObject.getIntValue("errorCode") != 0){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			}else {
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
			}
			response.setMsg(jsonObject.getString("message"));
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("发送对账数据给平台错误:" + e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;

	}


	/**
	 * 推送发药数据到平台
	 * @param params
	 * @return
	 */
	@RequestMapping("/pushDispensing")
	@ResponseBody
	public String pushDispensing(@RequestBody String params){
		logger.debug("推送发药数据:{}", params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("pushDispensing:(推送发药数据)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		try {
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_URL + "supplier/receiver/gethairtraceability", params);
			JSONObject jsonObject = JSONObject.parseObject(result);
			if(jsonObject.getIntValue("errorCode") != 0){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			}else {
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
			}
			response.setMsg(jsonObject.getString("message"));
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("发送发药数据给平台错误:" + e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 推送库存数据到平台
	 * @param params
	 * @return
	 */
	@RequestMapping("/pushStock")
	@ResponseBody
	public String pushStock(@RequestBody String params){
		logger.debug("推送库存数据:{}", params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("pushStock:(推送库存数据)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		try {
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_URL + "supplier/receiver/getreconciliation", params);
			JSONObject jsonObject = JSONObject.parseObject(result);
			if(jsonObject.getIntValue("errorCode") != 0){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			}else {
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
			}
			response.setMsg(jsonObject.getString("message"));
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("发送库存数据给平台错误:" + e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}

	/**
	 * 推送证照数据到平台
	 * @param params
	 * @return
	 */
	@RequestMapping("/pushlicinfo")
	@ResponseBody
	public String pushlicinfo(@RequestBody String params){
		logger.debug("证照数据:{}", params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("pushDispensing:(推送证照数据)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		try {
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_SPD_Url + "saveresLic", params);//
			JSONObject jsonObject = JSONObject.parseObject(result);
			if(jsonObject.getIntValue("errorCode") != 0){
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			}else {
				response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
			}
			response.setMsg(jsonObject.getString("message"));
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("发送证照数据给平台错误:" + e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 推送证照图片数据到平台
	 * @param params
	 * @return
	 */
	@RequestMapping("/pushlicpicinfo")
	@ResponseBody
	public String pushlicpicinfo(@RequestParam("file") MultipartFile file){
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		PlatFormResponse response = new PlatFormResponse();
		interfaceLogService.saveLog("pushDispensing:(推送证照数据)","filename////"+file.getOriginalFilename(), logId);
		try {
			if (file!=null) {
				HttpClient client = HttpClients.createDefault();
				HttpPost post = new HttpPost(PlatformConstant.PlatForm_SPD_Url + "saveresLicpic");//
				File newfile = new File("/usr/local/img/"+file.getOriginalFilename());
				file.transferTo(newfile);
				FileBody bin = new FileBody(newfile);
				HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("file", bin).build();
				post.setEntity(reqEntity);
				HttpResponse htppresponse = client.execute(post);
				HttpEntity resEntity = htppresponse.getEntity();
				result = EntityUtils.toString(resEntity, "UTF-8");
				JSONObject jsonObject = JSONObject.parseObject(result);
				if(!"Y".equals(jsonObject.getString("FLAG"))){
					response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
				}else {
					response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.success_ResultCode);
				}
				response.setMsg(jsonObject.toJSONString());
				if (newfile.exists()) {
					newfile.delete();
				}
			}

		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("发送证照图片数据给平台错误:" + e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}



	@RequestMapping(value="/CancelMedPlan")
	@ResponseBody
	public String CancelMedPlan(HttpServletRequest request, @RequestBody String param){
		logger.debug("补货计划作废接口请求参数:{}",param);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("CancelMedPlan:(补货计划作废接口)", param, logId);
		PlatFormResponse response = new PlatFormResponse();
		try {
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_HUARUN_Url+"CancelMedPlan", param);
			JSONObject jsonObject = JSONObject.parseObject(result);
			response.setFlag( jsonObject.getString("FLAG"));
			response.setMsg(jsonObject.getString("message"));
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag("E");
			response.setMsg(e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}

	/**
	 * 推送证照数据到平台
	 * @param params
	 * @return
	 */
	@RequestMapping("/doBarcode")
	@ResponseBody
	public String doBarcode(@RequestBody String params){
		logger.debug("供应商出库条码回传:{}", params);
		String result = "";
		String logId = IdUtil.uuid();
		String exception = "";
		interfaceLogService.saveLog("doBarcode:(供应商出库条码回传)", params, logId);
		PlatFormResponse response = new PlatFormResponse();
		try {
			result = HTTPClient.sendJsonDataByPost(PlatformConstant.PlatForm_SPD_Url + "doBarcode", params);//
			JSONObject jsonObject = JSONObject.parseObject(result);
			if(jsonObject.getString("FLAG") != null){
				response.setFlag(jsonObject.getString("FLAG"));
				response.setMsg(jsonObject.getString("MSG"));
			}else{
				response.setFlag("Y");
				response.setMsg("doBarcode:(供应商出库条码回传)返回值格式未对应");
			}
		} catch (Exception e) {
			logger.error(e.getMessage());
			exception = e.getMessage();
			response.setFlag(PlatFormResponseConstant.ResponseBodyMsg.fail_ResultCode);
			response.setMsg("doBarcode:(供应商出库条码回传)给SPD平台错误:" + e.getMessage());
			result = JSON.toJSONString(response);
		}
		interfaceLogService.setResultLog(response, logId, exception);
		return result;
	}


	/**
	 * 库存查询接口
	 * @param params
	 * @return
	 */
	@RequestMapping("/querystock")
	@ResponseBody
	public String querystock(@RequestBody String params){
		logger.debug("查询库存:{}", params);
		String result = "";
		try {
			result = HTTPClient.sendJsonDataByPost("http://10.146.8.221:9002/medicinal-web/a/StoreDetail/queryDrugByDeptAll", params);
		} catch (Exception e) {
			result = e.getMessage();
		}
		return result;
	}

	/**
	 * 近效期查询接口
	 * @param params
	 * @return
	 */
	@RequestMapping("/queryexpir")
	@ResponseBody
	public String queryexpir(@RequestBody String params){
		logger.debug("查询近效期:{}", params);
		String result = "";
		try {
			result = HTTPClient.sendJsonDataByPost("http://10.146.8.221:9002/medicinal-web/a/ypjxq/statics/list", params);
		} catch (Exception e) {
			result = e.getMessage();
		}
		return result;
	}

	/**
	 * 呆滞品查询接口
	 * @param params
	 * @return
	 */
	@RequestMapping("/querydetained")
	@ResponseBody
	public String querydetained(@RequestBody String params){
		logger.debug("查询近效期:{}", params);
		String result = "";
		if (client == null){
			client = HttpClients.createDefault();
		}
		try {
			JSONObject objec = JSON.parseObject(params);
			List<NameValuePair> param = new ArrayList<NameValuePair>();
			param.add(new BasicNameValuePair("depetCode",objec.getString("depetCode")));
			param.add(new BasicNameValuePair("pageNo",objec.getString("pageNo")));
			param.add(new BasicNameValuePair("pageSize",objec.getString("pageSize")));
			param.add(new BasicNameValuePair("startTime",objec.getString("startTime")));
			param.add(new BasicNameValuePair("endTime",objec.getString("endTime")));
			HttpPost post = new HttpPost("http://10.146.8.221:9002/medicinal-web/a/statics/delayStore/list");
			post.setHeader("Content-Type", "application/x-www-form-urlencoded");
			post.setEntity(new UrlEncodedFormEntity(param));
			HttpResponse reponse = client.execute(post);
			HttpEntity entity = reponse.getEntity();
			result = EntityUtils.toString(entity, "UTF-8");
		} catch (Exception e) {
			result = e.getMessage();
		}
		return result;
	}
}