package com.topsun.posclient.sales.core.service.impl; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import com.topsun.posclient.common.AppConstants; import com.topsun.posclient.common.LoggerUtil; import com.topsun.posclient.common.POSClientApp; import com.topsun.posclient.common.POSException; import com.topsun.posclient.common.ProjectUtil; import com.topsun.posclient.common.service.impl.BaseServiceImpl; import com.topsun.posclient.datamodel.CashierModel; import com.topsun.posclient.datamodel.GoldPrice; import com.topsun.posclient.datamodel.Item; import com.topsun.posclient.datamodel.PartSales; import com.topsun.posclient.datamodel.Retail; import com.topsun.posclient.datamodel.dto.CashierModeDTO; import com.topsun.posclient.datamodel.dto.GoldPriceDTO; import com.topsun.posclient.datamodel.dto.RetailDTO; import com.topsun.posclient.sales.core.SalesCoreActivator; import com.topsun.posclient.sales.core.SalesDataUtil; import com.topsun.posclient.sales.core.dao.PartSaleDao; import com.topsun.posclient.sales.core.service.IGoldBookingService; import com.topsun.posclient.sales.core.service.IGoldTimeOutService; import com.topsun.posclient.webservice.POSServerCaller; import com.topsun.posclient.webservice.dto.ArrayOfgoldPrice; import com.topsun.posclient.webservice.dto.GetGoldPriceData; import com.topsun.posclient.webservice.dto.GetGoldPriceDataReq; import com.topsun.posclient.webservice.dto.GetGoldPriceDataReqCondition; import com.topsun.posclient.webservice.dto.GetGoldPriceDataResponse; import com.topsun.posclient.webservice.dto.GetGoldPriceDataResult; import com.topsun.posclient.webservice.dto.GetRetailDocNum; import com.topsun.posclient.webservice.dto.GetRetailDocNumReq; import com.topsun.posclient.webservice.dto.GetRetailDocNumReqCondition; import com.topsun.posclient.webservice.dto.GetRetailDocNumResponse; import com.topsun.posclient.webservice.dto.GetRetailDocNumResult; import com.topsun.posclient.webservice.dto.RetailE; import com.topsun.posclient.webservice.dto.Retail_P; /** * 投资金条预订服务 * * @author Dong * */ public class GoldBookingServiceImpl extends SalesServiceImpl implements IGoldBookingService { /** * 零售数据访问 */ private PartSaleDao partSaleDao = new PartSaleDao(); /* (non-Javadoc) * @see com.topsun.posclient.sales.core.service.IGoldBookingService#saveGoldBookingData(com.topsun.posclient.datamodel.PartSales) */ public void saveGoldBookingData(PartSales partSales) throws POSException { RetailDTO retailDTO = new RetailDTO(); Retail retail = convertPartSalesToRetail(partSales); List<Retail> retailList = new ArrayList<Retail>(); retailList.add(retail); retailDTO.setRetailList(retailList); partSaleDao.saveRetailGoldBooking(retailDTO, partSales.getDocNum());//保存预订数据 } public List<CashierModel> queryCashierModelDetailByDocNum(String docNum) throws POSException { if(null == docNum || "".equals(docNum)){ return null; } GetRetailDocNumReqCondition condition = new GetRetailDocNumReqCondition(); condition.setDocNum(docNum); GetRetailDocNumReq req = new GetRetailDocNumReq(); req.setCondition(condition); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetRetailDocNum getRetailDocNum74 = new GetRetailDocNum(); getRetailDocNum74.setGetRetailDocNumReq(req); try { GetRetailDocNumResponse response = POSServerCaller.getWebService().getRetailDocNum(getRetailDocNum74); String flag = response.getGetRetailDocNumResult().getResult().getFlag(); if(flag.equals(POSServerCaller.SUCCESS)){ GetRetailDocNumResult result = response.getGetRetailDocNumResult(); Retail_P[] retailPs = result.getRetail().getRetail_Ps().getRetail_P(); List<CashierModel> models = new ArrayList<CashierModel>(); IGoldTimeOutService goldTimeOutService = new GoldTimeOutServiceImpl(); CashierModeDTO dto = goldTimeOutService.getAllCashierMode(); if(null != dto){ models = dto.getCashierModeList(); } for (CashierModel cashierModel : models) { for (Retail_P retail_P : retailPs) { if(retail_P.getPayModeID() == cashierModel.getID()){ cashierModel.setAmount(retail_P.getSum()); cashierModel.setRate(retail_P.getPoundage()); } } } return models; }else{ throw new POSException(response.getGetRetailDocNumResult().getResult().getMsg()+" 单据编号【"+docNum+"】"); } } catch (Exception e) { LoggerUtil.logError(SalesCoreActivator.PLUGIN_ID, "单据信息查询失败", e); throw new POSException("预订信息查询出错,单据编号【"+docNum+"】"); } } /* (non-Javadoc) * @see com.topsun.posclient.sales.core.service.IGoldBookingService#queryRetailDetailByDocNum(String) */ public List<Item> queryRetailDetailByDocNum(String docNum) throws POSException { if(null == docNum || "".equals(docNum)){ return null; } GetRetailDocNumReqCondition condition = new GetRetailDocNumReqCondition(); condition.setDocNum(docNum); GetRetailDocNumReq req = new GetRetailDocNumReq(); req.setCondition(condition); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetRetailDocNum getRetailDocNum74 = new GetRetailDocNum(); getRetailDocNum74.setGetRetailDocNumReq(req); try { GetRetailDocNumResponse response = POSServerCaller.getWebService().getRetailDocNum(getRetailDocNum74); String flag = response.getGetRetailDocNumResult().getResult().getFlag(); if(flag.equals(POSServerCaller.SUCCESS)){ GetRetailDocNumResult result = response.getGetRetailDocNumResult(); RetailE retailE = result.getRetail(); return SalesDataUtil.convertRetailEToItemList(retailE, docNum); }else{ throw new POSException(response.getGetRetailDocNumResult().getResult().getMsg()+" 单据编号【"+docNum+"】"); } } catch (Exception e) { LoggerUtil.logError(SalesCoreActivator.PLUGIN_ID, "单据信息查询失败", e); throw new POSException("预订信息查询出错,单据编号【"+docNum+"】"); } } /** * 投资金条预订时,将零售信息转换成Retail * @param partSales 销售信息 * @return * @throws POSException */ private Retail convertPartSalesToRetail(PartSales partSales) throws POSException{ if(null == partSales){ return null; } //设置基本信息 Retail retail = SalesDataUtil.getRetailFromPartSales(partSales); //设置明细 retail.setRetailMList(SalesDataUtil.getRetailMsFromPartSales(partSales)); //零售结算 拆分到每个商品的结算金额 retail.setRetailMPList(SalesDataUtil.calculateRetailMPList(partSales)); //零售结算 整单结算金额分配 retail.setRetailPList(SalesDataUtil.calculateRetailPList(partSales)); return retail; } public BigDecimal getServerGoldPrice(String mtartCode) throws POSException { //如何是在线状态,先同步物料数据 if(POSServerCaller.isConnected()){ GetGoldPriceDataReqCondition conditions = new GetGoldPriceDataReqCondition(); conditions.setShopID(Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop())); GetGoldPriceDataReq req = new GetGoldPriceDataReq(); req.setCondition(conditions); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetGoldPriceData getGoldPriceData70 = new GetGoldPriceData(); getGoldPriceData70.setGetGoldPriceDataReq(req); try { GetGoldPriceDataResponse response = POSServerCaller.getWebService().getGoldPriceData(getGoldPriceData70); GetGoldPriceDataResult result = response.getGetGoldPriceDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SalesCoreActivator.PLUGIN_ID, result.getResult().getMsg()); partSaleDao.getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME); partSaleDao.getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME_BACK); } ArrayOfgoldPrice aop = result.getGoldPrices(); if (null == aop) { // 没有实时金价数据,删除旧的实时金价数据 partSaleDao.getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME); partSaleDao.getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME_BACK); } com.topsun.posclient.webservice.dto.GoldPrice[] gpArray = aop.getGoldPrice(); if (null == gpArray) { // 没有实时金价数据,删除旧的实时金价数据 partSaleDao.getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME); partSaleDao.getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME_BACK); } GoldPriceDTO goldPriceDTO = new GoldPriceDTO(); List<com.topsun.posclient.datamodel.GoldPrice> goldPs = new ArrayList<com.topsun.posclient.datamodel.GoldPrice>(); for (int i = 0; i < gpArray.length; i++) { com.topsun.posclient.webservice.dto.GoldPrice gp = gpArray[i]; com.topsun.posclient.datamodel.GoldPrice goldP = new com.topsun.posclient.datamodel.GoldPrice(); goldP.setID(gp.getId()); goldP.setMtartCode(gp.getMaraGrpCode()); goldP.setMtartName(gp.getGrpDescribe()); goldP.setPrice(gp.getPrice()); goldP.setLastSyncTime(ProjectUtil.getCurrentDateByFormat("yyyy-MM-dd hh:mm:ss")); goldPs.add(goldP); } goldPriceDTO.setGoldPriceList(goldPs); // 更新本地数据文件 partSaleDao.getLocalProcessor().updateLocalDataFile(goldPriceDTO, AppConstants.DATA_GOLDPRICE_FILENAME_BACK, AppConstants.DATA_GOLDPRICE_FILENAME); } catch (Exception e) { LoggerUtil.logError(SalesCoreActivator.PLUGIN_ID, "下载实时金价数据失败", e); } } GoldPrice returnGoldPrice = null; GoldPriceDTO goldPriceDTO = null; BigDecimal retPrice = null; try { goldPriceDTO = partSaleDao.getAllGoldPrice(); if (null != goldPriceDTO) { List<GoldPrice> goldPriceList = goldPriceDTO.getGoldPriceList(); if (null == goldPriceList || goldPriceList.size() <= 0) { return null; } for (GoldPrice goldPrice : goldPriceList) { if (goldPrice.getMtartCode().equals(mtartCode)) { returnGoldPrice = goldPrice; } } } if (null != returnGoldPrice) { retPrice = new BigDecimal(returnGoldPrice.getPrice()); } } catch (Exception e) { LoggerUtil.logError(SalesCoreActivator.PLUGIN_ID, "查询实时金价信息出错", e); throw new POSException("查询实时金价信息出错"); } if(null == retPrice){ throw new POSException("没有相应的实时金价数据"); } return retPrice; } }