package com.topsun.posclient.sales.ui.view; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import com.co.lane.card.jni.RFCardException; import com.co.lane.card.jni.RFCardManager; 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.core.BarcodeListenetManager; import com.topsun.posclient.common.core.IBarcodeListener; import com.topsun.posclient.common.core.keyboard.SoftKeyUtil; import com.topsun.posclient.common.listener.IKeyListener; import com.topsun.posclient.common.listener.KeyListenerManager; import com.topsun.posclient.common.service.impl.BaseServiceImpl; import com.topsun.posclient.common.ui.style.CommonCss; import com.topsun.posclient.common.ui.utils.TableUtils; import com.topsun.posclient.common.ui.utils.ThemeUtils; import com.topsun.posclient.datamodel.CardRule; import com.topsun.posclient.datamodel.Item; import com.topsun.posclient.datamodel.Member; import com.topsun.posclient.datamodel.PartSales; import com.topsun.posclient.datamodel.Promotion; import com.topsun.posclient.datamodel.Shop; import com.topsun.posclient.datamodel.User; import com.topsun.posclient.datamodel.VipUser; import com.topsun.posclient.datamodel.dto.PromotionDTO; import com.topsun.posclient.sales.MessageResources; import com.topsun.posclient.sales.core.service.IPartSaleService; import com.topsun.posclient.sales.core.service.impl.PartSaleServiceImpl; import com.topsun.posclient.sales.dialog.SalesPayDialog; import com.topsun.posclient.sales.ui.gold.GoldSalesManager; import com.topsun.posclient.sales.ui.gold.PartSalesFacade; import com.topsun.posclient.sales.ui.gold.PartSalesManager; import com.topsun.posclient.sales.ui.menu.SalesActivator; import com.topsun.posclient.sales.ui.table.PromotionContentProvider; import com.topsun.posclient.sales.ui.table.PromotionLableProvider; import com.topsun.posclient.sales.ui.table.SalesCellModify; import com.topsun.posclient.sales.ui.table.SalesTableContentProvider; import com.topsun.posclient.sales.ui.table.SalesTableLableProvider; import com.topsun.widget.calendar.DefaultSettings; /** * 零售 * @author Dong * */ public class SalesView extends ViewPart implements IKeyListener,IBarcodeListener { public IPartSaleService partSaleService = new PartSaleServiceImpl(); public User user = POSClientApp.get().getLoginUser(); List<Item> itemsList = new ArrayList<Item>(); public PartSales partSales = new PartSales(); //单品集合临时保存对象,用户促销时的特殊处理 private List<Item> itemTempList = new ArrayList<Item>(); private TableColumn last; private TableColumn first; private TableColumn oldItemCode; public Combo shopName; public Text orderNo; public Combo casher; public Text vipPoint; public Text cardNo; public Text userName; public Text salesDate; public Text applyUser; public Text checker; public Text barCode; public TableViewer tableViewer; public int controlVerticalAlignment = 3; public Label tradeTime; public Label tradeCode; public Label address; public Label customName; public Text phone; public TableViewer promotionTableView; private Text oldGoldOrderNo; //旧金单据号 private Label totlePrice; public SalesView() { } /** * 商品信息 * @param parent */ private void buildProductInfo(Composite parent){ KeyListenerManager.getInstance().addKeyListener(this); BarcodeListenetManager.getInstance().addKeyListener(this); Group productInfo = new Group(parent, SWT.NONE); // buildPrintInfo(productInfo); productInfo.setFont(CommonCss.getDefaultFont(parent.getDisplay())); productInfo.setText("单品列表"); GridLayout gridLayout = new GridLayout(2,false); productInfo.setLayout(gridLayout); GridData data = new GridData(GridData.FILL_BOTH); productInfo.setLayoutData(data); { Button button = new Button(productInfo, SWT.NONE); button.setFont(CommonCss.getTableHeaderFont(parent.getDisplay())); GridData data0 = new GridData(); data0.heightHint = 45; data0.widthHint = 70; button.setLayoutData(data0); button.setText("删除"); PartSalesFacade.delGoldSaleItemListener(button); } { Button cleanAll = new Button(productInfo, SWT.NONE); cleanAll.setFont(CommonCss.getDefaultFont(parent.getDisplay())); cleanAll.setText("清空"); GridData data3 = new GridData(); data3.heightHint = 45; data3.widthHint = 70; cleanAll.setLayoutData(data3); cleanAll.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { itemTempList.clear(); tableViewer.setInput(null); //清空会员信息 userName.setText(""); phone.setText(""); vipPoint.setText("0.00"); cardNo.setText(""); partSales.setVip(false); partSales.setVipUser(null); partSales.setItemList(new ArrayList<Item>()); PartSalesFacade.caculatorPartSalesPrice(); } public void widgetDefaultSelected(SelectionEvent e) { } }); } tableViewer = new TableViewer(productInfo,SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER|SWT.FULL_SELECTION); tableViewer.setContentProvider(new SalesTableContentProvider()); tableViewer.setLabelProvider(new SalesTableLableProvider()); final Table table = tableViewer.getTable(); TableUtils.setTabelHeight(table); table.setBackground(ThemeUtils.getCurrent().getTableBackGround()); table.setFont(CommonCss.getTableHeaderFont(parent.getDisplay())); table.setLinesVisible(false); table.setHeaderVisible(true); table.setFont(CommonCss.getTableHeaderFont(parent.getDisplay())); String[] cloumsProperties = new String[]{"0","1","2","3","4","5","6","7","8","9","10","11","faceSales","13","sales"}; tableViewer.setColumnProperties(cloumsProperties); CellEditor[] editors = new CellEditor[15]; editors[0] = new TextCellEditor(table); editors[1] = new TextCellEditor(table); editors[2] = new TextCellEditor(table); editors[3] = new TextCellEditor(table); editors[4] = new TextCellEditor(table); editors[5] = new TextCellEditor(table); editors[6] = new TextCellEditor(table); editors[7] = new TextCellEditor(table); editors[8] = new TextCellEditor(table); editors[9] = new TextCellEditor(table); editors[10] = new TextCellEditor(table); editors[11] = new TextCellEditor(table); editors[12] = new TextCellEditor(table); List<String> userNames = new ArrayList<String>(); Map<Integer,User> map = POSClientApp.get().getUserRelation(); Iterator<Entry<Integer, User>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Integer, User> e = (Map.Entry<Integer, User>) it.next(); userNames.add(e.getValue().getUserName()); } // editors[13] = new ComboBoxCellEditor(table, userNames.toArray(new String[]{}),SWT.READ_ONLY); editors[13] = new TextCellEditor(table); editors[14] = new TextCellEditor(table); tableViewer.setCellEditors(editors); tableViewer.setCellModifier(new SalesCellModify(tableViewer)); { GridData tableData = new GridData(GridData.FILL_HORIZONTAL); tableData.heightHint = 180; tableData.horizontalSpan = 2; table.setLayoutData(tableData); } { first = new TableColumn(table, SWT.NONE); first.setWidth(150); first.setText("商品编号"); } { oldItemCode = new TableColumn(table, SWT.NONE); oldItemCode.setWidth(150); oldItemCode.setText("原条码"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(160); column.setText("商品名称"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(40); column.setText("件数"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(60); column.setText("成色"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("金重(g)"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("宝石(ct)"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("副钻(ct)"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("单价"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("加工费"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("应售"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("优惠"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("实售"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("印记"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("营业员"); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setWidth(80); column.setText("柜台名称"); } { last = new TableColumn(table, SWT.NONE); last.setWidth(80); last.setText("赠品"); } Composite operationComposite = new Composite(productInfo, SWT.NONE); GridData itemTemp = new GridData(); itemTemp.horizontalSpan = 2; operationComposite.setLayoutData(itemTemp); operationComposite.setLayout(new GridLayout(13,false)); { Label label = new Label(operationComposite, SWT.NONE); GridData data1 = new GridData(); label.setLayoutData(data1); label.setFont(CommonCss.getDefaultFont(parent.getDisplay())); label.setText("金额合计:"); } { totlePrice = new Label(operationComposite, SWT.BORDER); GridData data1 = CommonCss.getTextData(110); totlePrice.setFont(CommonCss.getDefaultFont(parent.getDisplay())); totlePrice.setLayoutData(data1); totlePrice.setText("0.00"); } { Label label = new Label(operationComposite, SWT.NONE); label.setFont(CommonCss.getDefaultFont(parent.getDisplay())); GridData data5 = new GridData(); label.setLayoutData(data5); label.setText("旧金单据号:"); } { oldGoldOrderNo = new Text(operationComposite, SWT.BORDER); GridData data1 = CommonCss.getTextData(150); oldGoldOrderNo.setLayoutData(data1); oldGoldOrderNo.setFont(CommonCss.getDefaultFont(parent.getDisplay())); } { Button button = new Button(operationComposite, SWT.NONE); button.setFont(CommonCss.getTableHeaderFont(parent.getDisplay())); GridData data0 = new GridData(); data0.heightHint = 45; data0.widthHint = 80; button.setLayoutData(data0); button.setText("添加旧金"); PartSalesFacade.addOldGoldOrderListenerForButton(button); } { Button serviceFee = new Button(operationComposite, SWT.NONE); serviceFee.setFont(CommonCss.getDefaultFont(parent.getDisplay())); serviceFee.setText("服务费"); GridData data2 = new GridData(); data2.heightHint = 45; data2.widthHint = 80; data2.horizontalSpan = 1; serviceFee.setLayoutData(data2); PartSalesFacade.addServiceFeeListener(serviceFee); } { Button button = new Button(operationComposite, SWT.NONE); button.setFont(CommonCss.getTableHeaderFont(parent.getDisplay())); GridData data1 = new GridData(); data1.heightHint = 45; data1.widthHint = 70; button.setLayoutData(data1); button.setText("断头"); PartSalesFacade.openCutGoldDialogListener(button, orderNo.getText()); } { Button applyPromotion = new Button(operationComposite, SWT.NONE); applyPromotion.setFont(CommonCss.getDefaultFont(parent.getDisplay())); applyPromotion.setText("促销"); GridData data4 = new GridData(); data4.heightHint = 45; data4.widthHint = 70; data4.horizontalSpan = 1; applyPromotion.setLayoutData(data4); applyPromotion.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { Button btn = (Button)e.getSource(); if(partSales.isVip()){ MessageDialog.openInformation(btn.getShell(), MessageResources.message_ui_tips, "会员不参与促销活动"); return; } PartSales salesInfo = new PartSales(); salesInfo.setFactTotalAmount(ProjectUtil.formatString(totlePrice.getText())); salesInfo.setDocNum(orderNo.getText()); salesInfo.setOgDocNum(oldGoldOrderNo.getText()); salesInfo.setCountAmount(ProjectUtil.formatString(totlePrice.getText())); salesInfo.setFactTotalAmount(ProjectUtil.formatString(totlePrice.getText())); salesInfo.setSalesType(AppConstants.SALES_TYPE_SALES); List<Item> itemList = new ArrayList<Item>(); for(Item itemTemp : itemTempList){ Item itemNew = new Item(); itemNew.setId(itemTemp.getId()); itemNew.setItemName(itemTemp.getItemName()); itemNew.setItemCode(itemTemp.getItemCode()); itemNew.setSalesAmount(itemTemp.getSalesAmount()); itemNew.setFactAmount(itemTemp.getFactAmount()); itemNew.setZJGF(itemTemp.getZJGF()); itemNew.setPretlAmount(itemTemp.getPretlAmount()); itemNew.setIsOldGold(itemTemp.getIsOldGold()); itemNew.setHasGiveaway(itemTemp.getHasGiveaway()); itemNew.setCashier(itemTemp.getCashier()); itemNew.setCashierName(itemTemp.getCashierName()); itemNew.setDISCOUNT1(itemTemp.getDISCOUNT1()); itemNew.setDISCOUNT2(itemTemp.getDISCOUNT2()); itemNew.setDocNum(itemTemp.getDocNum()); itemNew.setFactZJGF(itemTemp.getFactZJGF()); itemNew.setInvoceCode(itemTemp.getInvoceCode()); itemNew.setItemStatus(itemTemp.getItemStatus()); itemNew.setItemType(itemTemp.getItemType()); itemNew.setMatkl(itemTemp.getMatkl()); itemNew.setMATNR(itemTemp.getMATNR()); itemNew.setZDPYZL(itemTemp.getZDPYZL()); itemNew.setZDPZL(itemTemp.getZDPZL()); itemNew.setZYTM(itemTemp.getZYTM()); itemNew.setZSSMD(itemTemp.getZSSMD()); itemNew.setZSSGS(itemTemp.getZSSGS()); itemNew.setZSJCS(itemTemp.getZSJCS()); itemNew.setZMDLSBQJ(itemTemp.getZMDLSBQJ()); itemNew.setZCSBJ(itemTemp.getZCSBJ()); itemNew.setZKJGFLS(itemTemp.getZKJGFLS()); itemNew.setZFZZZL(itemTemp.getZFZZZL()); itemNew.setZMDDXJSJ(itemTemp.getZMDDXJSJ()); itemNew.setZZZZZ(itemTemp.getZZZZZ()); itemNew.setPrice(itemTemp.getPrice()); itemNew.setZSFTJ(itemTemp.getZSFTJ()); itemNew.setZYTM(itemTemp.getZYTM()); itemNew.setZKJYF(itemTemp.getZKJYF()); if(itemList.size() == 0){ itemNew.setUnSalePart(itemTemp.getUnSalePart()); } for(Item item : itemList){ if(null == item.getItemCode() || "".equals(item.getItemCode())){ break; } if(item.getItemCode().equals(itemNew.getItemCode())){ itemNew.setUnSalePart(item.getUnSalePart()); itemNew.setPromotionId(item.getPromotionId()); itemNew.setPromotionName(item.getPromotionName()); } } itemList.add(itemNew); }; salesInfo.setItemList(itemList); try { List<Item> ret = partSaleService.applyPromotion(salesInfo); partSales.setItemList(ret); PartSalesManager.getInstance().getSalesProductTableView().setInput(ret); PartSalesManager.getInstance().getSalesProductTableView().refresh(); PartSalesFacade.caculatorPartSalesPrice(); } catch (POSException e1) { MessageDialog.openError(btn.getShell(), MessageResources.message_ui_tips, "促销出错"); return; } } public void widgetDefaultSelected(SelectionEvent e) { } }); } { Button button = new Button(operationComposite, SWT.NONE); button.setFont(CommonCss.getDefaultFont(parent.getDisplay())); button.setText("结算"); GridData data6 = new GridData(); data6.heightHint = 45; data6.widthHint = 70; button.setLayoutData(data6); button.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { Button saveButton = (Button)e.getSource(); { List list = (List)tableViewer.getInput() ; if(list == null || list.size() == 0){ MessageDialog.openError(saveButton.getShell(), MessageResources.message_ui_tips, "商品信息不能为空"); return; } } partSales.setDocNum(orderNo.getText()); partSales.setOgDocNum(oldGoldOrderNo.getText()); partSales.setSalesType(AppConstants.SALES_TYPE_SALES); List<Item> itemList = PartSalesFacade.getCurrentItemList(); partSales.setItemList(itemList); PartSalesManager.getInstance().setPartSales(partSales); List<Item> tempList = new ArrayList<Item>(); for(Item itemTemp : itemTempList){ Item itemNew = new Item(); itemNew.setId(itemTemp.getId()); itemNew.setItemName(itemTemp.getItemName()); itemNew.setItemCode(itemTemp.getItemCode()); itemNew.setSalesAmount(itemTemp.getSalesAmount()); itemNew.setFactAmount(itemTemp.getFactAmount()); itemNew.setZJGF(itemTemp.getZJGF()); itemNew.setPretlAmount(itemTemp.getPretlAmount()); itemNew.setIsOldGold(itemTemp.getIsOldGold()); itemNew.setHasGiveaway(itemTemp.getHasGiveaway()); itemNew.setCashier(itemTemp.getCashier()); itemNew.setCashierName(itemTemp.getCashierName()); itemNew.setDISCOUNT1(itemTemp.getDISCOUNT1()); itemNew.setDISCOUNT2(itemTemp.getDISCOUNT2()); itemNew.setDocNum(itemTemp.getDocNum()); itemNew.setFactZJGF(itemTemp.getFactZJGF()); itemNew.setInvoceCode(itemTemp.getInvoceCode()); itemNew.setItemStatus(itemTemp.getItemStatus()); itemNew.setItemType(itemTemp.getItemType()); itemNew.setMatkl(itemTemp.getMatkl()); itemNew.setMATNR(itemTemp.getMATNR()); itemNew.setZDPYZL(itemTemp.getZDPYZL()); itemNew.setZDPZL(itemTemp.getZDPZL()); itemNew.setZYTM(itemTemp.getZYTM()); itemNew.setZKJYF(itemTemp.getZKJYF()); itemNew.setZSSMD(itemTemp.getZSSMD()); itemNew.setZSSGS(itemTemp.getZSSGS()); itemNew.setZSJCS(itemTemp.getZSJCS()); itemNew.setZMDLSBQJ(itemTemp.getZMDLSBQJ()); itemNew.setZCSBJ(itemTemp.getZCSBJ()); itemNew.setZKJGFLS(itemTemp.getZKJGFLS()); itemNew.setZFZZZL(itemTemp.getZFZZZL()); itemNew.setZMDDXJSJ(itemTemp.getZMDDXJSJ()); itemNew.setZZZZZ(itemTemp.getZZZZZ()); itemNew.setPrice(itemTemp.getPrice()); itemNew.setZSFTJ(itemTemp.getZSFTJ()); itemNew.setZoneName(itemTemp.getZoneName()); for(Item item : itemList){ if(null != item.getItemCode() && !"".equals(item.getItemCode())){ if(item.getItemCode().equals(itemNew.getItemCode())){ itemNew.setUnSalePart(item.getUnSalePart()); itemNew.setPromotionId(item.getPromotionId()); itemNew.setPromotionName(item.getPromotionName()); //从item中获取实金额、优惠金额等(因为这些金额在结算之前可能因为促销而发生变化,所以不能直接从itemTemp原始的临时数据中获取) //点击促销,不需要这些金额的设置,因为防止多次点击促销每次都需要用最原始的数据进行促销计算 itemNew.setFactAmount(item.getFactAmount()); itemNew.setPretlAmount(item.getPretlAmount()); itemNew.setZJGF(item.getZJGF()); itemNew.setFactZJGF(item.getFactZJGF()); } } } tempList.add(itemNew); }; PartSalesManager.getInstance().setBeforeZeroAndDiscountPartSales(partSales); PartSalesManager.getInstance().getBeforeZeroAndDiscountPartSales().setItemList(tempList); boolean hasoldgold = false; for (Item t_item : tempList) { if(t_item.getItemType().equals(AppConstants.ITEM_TYPE_OLDGOLD)){ hasoldgold = true; } } String tips = "此交易含旧金贴换,请点击“贴金调工费”按钮调整工费。如已调整,请点“是”,未调整点击“否”。"; String price = totlePrice.getText(); SalesPayDialog dialog = new SalesPayDialog(saveButton.getShell()); dialog.setCardNo(cardNo.getText()); dialog.setPrice(price); if(hasoldgold && tempList.size() > 1){ MessageDialog messageDialog = new MessageDialog(totlePrice.getShell(), "确认", null, tips, 5, new String[]{"是","否"}, 0); int open = messageDialog.open(); if(open == 1){ return; } } try{ int retrunType =dialog.open(); if(retrunType == 1){ return; } }catch(Exception ee){ ee.printStackTrace(); } barCode.setText(""); } public void widgetDefaultSelected(SelectionEvent e) { } }); } { Button button = new Button(operationComposite, SWT.NONE); button.setFont(CommonCss.getDefaultFont(parent.getDisplay())); button.setText("贴金调工费"); GridData data6 = new GridData(); data6.heightHint = 45; data6.widthHint = 80; button.setLayoutData(data6); button.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { BaseServiceImpl baseServiceImpl = new BaseServiceImpl(); List<Item> list = (List<Item>)tableViewer.getInput(); if(list == null){ return; } Shop shop = null; try { String shopID = POSClientApp.get().getSysConfig().getOwnerShop(); shop = baseServiceImpl.getShopById(Integer.parseInt(shopID)); } catch (Exception e1) { e1.printStackTrace(); } if(shop == null){ MessageDialog.openError(((Button)e.getSource()).getShell(), MessageResources.message_ui_tips, "店铺信息为空"); return; } boolean hasoldgold = false; for (Item t_item : list) { if(t_item.getItemType().equals(AppConstants.ITEM_TYPE_OLDGOLD)){ hasoldgold = true; } } for (Item item : list) { if(hasoldgold){ if(!item.getItemType().equals(AppConstants.ITEM_TYPE_OLDGOLD)){ BigDecimal bigDecimal = shop.getGffdxishu(); if(bigDecimal != null){ BigDecimal value = item.getZJGF().multiply(bigDecimal); item.setFactZJGF(value);//增加20% item.setFactAmount(item.getZDPZL().multiply(item.getPrice()).add(value).subtract(item.getZKJYF())); }else{ item.setFactZJGF(item.getZJGF()); } } } } tableViewer.refresh(); PartSalesFacade.caculatorPartSalesPrice(); } public void widgetDefaultSelected(SelectionEvent e) { } }); } { Label label = new Label(operationComposite, SWT.NONE); GridData data1 = new GridData(GridData.FILL_HORIZONTAL); label.setLayoutData(data1); } { Button button = new Button(operationComposite, SWT.NONE); button.setFont(CommonCss.getDefaultFont(parent.getDisplay())); button.setText("<"); GridData data1 = new GridData(); data1.heightHint = 45; data1.widthHint = 65; button.setLayoutData(data1); button.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { tableViewer.getTable().showColumn(first); } public void widgetDefaultSelected(SelectionEvent e) { } }); } { Button button = new Button(operationComposite, SWT.NONE); button.setFont(CommonCss.getDefaultFont(parent.getDisplay())); button.setText(">"); GridData data1 = new GridData(); data1.heightHint = 45; data1.widthHint = 65; button.setLayoutData(data1); button.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { tableViewer.getTable().showColumn(last); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); } } @Override public void onChange(String operationType) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { if(tableViewer.getInput() != null){ List<Item> items = (List<Item>)tableViewer.getInput() ; Item addItem = new Item(); items.add(addItem); tableViewer.setInput(items); tableViewer.editElement(addItem, 0); tableViewer.setSelection(new StructuredSelection(addItem)); }else{ List<Item> items = new ArrayList<Item>(); Item addItem = new Item(); items.add(addItem); tableViewer.setInput(items); tableViewer.editElement(addItem, 0); } PartSalesFacade.caculatorPartSalesPrice(); } }); } @Override public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(1,false)); parent.setBackground(ThemeUtils.getCurrent().getBackGroundColor()); parent.setBackgroundMode(SWT.INHERIT_FORCE); buildBaseInfo(parent); buildProductInfo(parent); buildOperation(parent); PartSalesManager.getInstance().setSalesProductTableView(tableViewer); PartSalesManager.getInstance().setSalesTotlePrice(totlePrice); PartSalesManager.getInstance().setDocNum(orderNo); PartSalesManager.getInstance().setCardNo(cardNo); PartSalesManager.getInstance().setMemberName(userName); PartSalesManager.getInstance().setPhone(phone); PartSalesManager.getInstance().setPoint(vipPoint); PartSalesManager.getInstance().setItemTempList(itemTempList); PartSalesManager.getInstance().setOldDocNum(oldGoldOrderNo); PartSalesManager.getInstance().setPartSales(partSales); PartSalesFacade.addSalesItemListener(barCode); PartSalesFacade.addOldGoldOrderListener(oldGoldOrderNo); } private void buildOperation(final Composite parent){ Composite operation = new Composite(parent, SWT.NONE); operation.setLayout(new GridLayout(4,false)); operation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } private void buildBaseInfo(Composite parent) { String no = ""; try { no = partSaleService.createNo(AppConstants.DOC_TYPE_SALES); } catch (POSException e1) { MessageDialog.openError(parent.getShell(), MessageResources.message_ui_tips, e1.getErrorMessage()); } Group baseInfo = new Group(parent, SWT.NONE); baseInfo.setFont(CommonCss.getDefaultFont(parent.getDisplay())); baseInfo.setText(MessageResources.message_ui_group_baseinfo); GridLayout gridLayout = new GridLayout(3,false); gridLayout.marginLeft = 5; baseInfo.setLayout(gridLayout); baseInfo.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite leftComposite = new Composite(baseInfo,SWT.NONE); leftComposite.setLayout(new GridLayout(4,false)); leftComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite rightCompoiste = new Composite(baseInfo,SWT.NONE); rightCompoiste.setLayout(new GridLayout(5,false)); rightCompoiste.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite underCompsite = new Composite(baseInfo,SWT.NONE); underCompsite.setLayout(new GridLayout(4,false)); GridData data2 = new GridData(GridData.FILL_BOTH); data2.horizontalSpan = 1; underCompsite.setLayoutData(data2); { Label label = new Label(leftComposite, SWT.NONE); label.setFont(CommonCss.getDefaultFont(parent.getDisplay())); GridData data = new GridData(); data.verticalIndent = controlVerticalAlignment; data.horizontalSpan = 1; label.setLayoutData(data); label.setText("单据编号:"); } { orderNo = new Text(leftComposite, SWT.BORDER); GridData data = CommonCss.getTextData(150); data.verticalIndent = controlVerticalAlignment; data.horizontalSpan = 3; orderNo.setFont(CommonCss.getDefaultFont(parent.getDisplay())); orderNo.setLayoutData(data); orderNo.setEditable(false); orderNo.setText(no); } { Label lable = new Label(leftComposite, SWT.NONE); lable.setFont(CommonCss.getDefaultFont(parent.getDisplay())); GridData data = new GridData(); data.horizontalSpan = 1; data.verticalIndent = controlVerticalAlignment; lable.setLayoutData(data); lable.setText("可用积分:"); } { vipPoint = new Text(leftComposite, SWT.BORDER); GridData data = CommonCss.getTextData(150); vipPoint.setText("0.00"); data.verticalIndent = controlVerticalAlignment; data.horizontalSpan = 3; vipPoint.setFont(CommonCss.getDefaultFont(parent.getDisplay())); vipPoint.setLayoutData(data); vipPoint.setEditable(false); } { Label label = new Label(rightCompoiste, SWT.NONE); label.setFont(CommonCss.getDefaultFont(parent.getDisplay())); GridData data = new GridData(); data.horizontalSpan = 2; data.verticalIndent = controlVerticalAlignment; label.setLayoutData(data); label.setText("会员卡号:"); } { cardNo = new Text(rightCompoiste,SWT.BORDER); GridData data = CommonCss.getTextData(150); data.horizontalSpan = 2; data.verticalIndent = controlVerticalAlignment; cardNo.setLayoutData(data); cardNo.setFont(CommonCss.getDefaultFont(parent.getDisplay())); SoftKeyUtil.showSoftKey(cardNo); cardNo.addKeyListener(new KeyListener() { public void keyReleased(KeyEvent e) { if (e.keyCode == SWT.CR) { Member member = null; String inputCardNo = cardNo.getText(); String inputPhone = phone.getText(); if((null == inputCardNo || "".equals(inputCardNo)) && (null == inputPhone || "".equals(inputPhone))){ MessageDialog.openInformation(cardNo.getShell(), MessageResources.message_ui_tips, "请输入【会员卡号】或【电话号码】"); cardNo.setFocus(); return; } try { member = partSaleService.checkMember(inputCardNo, inputPhone, null, null); if(null == member){ MessageDialog.openError(cardNo.getShell(), MessageResources.message_ui_tips, "卡不存在,请重新输入【会员卡号】或【电话号码】"); cardNo.forceFocus(); cardNo.setText(""); return; }else{ cardNo.setText(member.getCardNo()); phone.setText(member.getMobile()); vipPoint.setText(String.valueOf(member.getPoint())); userName.setText(member.getMenberName()); } //校验卡类型和,积分兑换 partSaleService.getAmountByPoint(new BigDecimal(0)); CardRule cardRule = partSaleService.getCardRuleByCardType(member.getCardTypeNM()); if(null == cardRule){ MessageDialog.openError(cardNo.getShell(), MessageResources.message_ui_tips, "卡类型不匹配,当前会员卡类型【"+member.getCardType()+"】在本地卡类型数据中不存在"); cardNo.forceFocus(); cardNo.setText(""); phone.setText(""); vipPoint.setText(""); userName.setText(""); return; } } catch (POSException e1) { MessageDialog.openError(cardNo.getShell(), MessageResources.message_ui_tips, e1.getErrorMessage()); cardNo.forceFocus(); cardNo.setText(""); phone.setText(""); vipPoint.setText(""); userName.setText(""); return; } VipUser vipUser = new VipUser(); vipUser.setCardNo(member.getCardNo()); vipUser.setCardTypeNM(member.getCardTypeNM()); vipUser.setCardType(member.getCardType()); vipUser.setMenberName(member.getMenberName()); vipUser.setTelephoneNo(member.getMobile()); vipUser.setStatus(member.getStatus()); vipUser.setSex(member.getSex()); vipUser.setPoint(member.getPoint()); vipUser.setIssueDate(ProjectUtil.getDateString(member.getIssueDate())); vipUser.setIDCard(member.getIDCard()); vipUser.setID(member.getID()); vipUser.setEffectiveDateS(ProjectUtil.getDateString(member.getEffectiveDateS())); vipUser.setEffectiveDateE(ProjectUtil.getDateString(member.getEffectiveDateE())); vipUser.setBirthDay(member.getBirthDay()); vipUser.setAge(member.getAge()); partSales.setVipUser(vipUser); partSales.setVip(true); PartSalesManager.getInstance().setPartSales(partSales); List<Item> items = (List<Item>)tableViewer.getInput(); if(null == items || items.size() == 0){ return; } List<Item> oldItems = new ArrayList<Item>(); for(Item itemTemp : itemTempList){ Item itemNew = new Item(); itemNew.setId(itemTemp.getId()); itemNew.setItemName(itemTemp.getItemName()); itemNew.setItemCode(itemTemp.getItemCode()); itemNew.setSalesAmount(itemTemp.getSalesAmount()); itemNew.setFactAmount(itemTemp.getFactAmount()); itemNew.setZJGF(itemTemp.getZJGF()); itemNew.setPretlAmount(itemTemp.getPretlAmount()); itemNew.setIsOldGold(itemTemp.getIsOldGold()); itemNew.setHasGiveaway(itemTemp.getHasGiveaway()); itemNew.setCashier(itemTemp.getCashier()); itemNew.setDISCOUNT1(itemTemp.getDISCOUNT1()); itemNew.setDISCOUNT2(itemTemp.getDISCOUNT2()); itemNew.setDocNum(itemTemp.getDocNum()); itemNew.setFactZJGF(itemTemp.getFactZJGF()); itemNew.setInvoceCode(itemTemp.getInvoceCode()); itemNew.setItemStatus(itemTemp.getItemStatus()); itemNew.setItemType(itemTemp.getItemType()); itemNew.setMatkl(itemTemp.getMatkl()); itemNew.setMATNR(itemTemp.getMATNR()); itemNew.setUnSalePart(itemTemp.getUnSalePart()); itemNew.setZDPYZL(itemTemp.getZDPYZL()); itemNew.setZDPZL(itemTemp.getZDPZL()); itemNew.setZYTM(itemTemp.getZYTM()); itemNew.setZKJYF(itemTemp.getZKJYF()); itemNew.setZSSMD(itemTemp.getZSSMD()); itemNew.setZSSGS(itemTemp.getZSSGS()); itemNew.setZSJCS(itemTemp.getZSJCS()); itemNew.setZMDLSBQJ(itemTemp.getZMDLSBQJ()); itemNew.setZCSBJ(itemTemp.getZCSBJ()); itemNew.setZKJGFLS(itemTemp.getZKJGFLS()); itemNew.setZFZZZL(itemTemp.getZFZZZL()); itemNew.setZMDDXJSJ(itemTemp.getZMDDXJSJ()); itemNew.setZZZZZ(itemTemp.getZZZZZ()); itemNew.setPrice(itemTemp.getPrice()); oldItems.add(itemNew); }; //如果是会员销售 if(PartSalesManager.getInstance().getPartSales().isVip()){ IPartSaleService partSalesService = new PartSaleServiceImpl(); try { //应用会员折扣销售 items = partSalesService.applyVipSales(oldItems, PartSalesManager.getInstance().getPartSales().getVipUser().getCardTypeNM()); } catch (POSException e1) { MessageDialog.openError(((Control)e.getSource()).getShell(), MessageResources.message_ui_tips, e1.getErrorMessage()); return; } } tableViewer.setInput(items); } } public void keyPressed(KeyEvent e) { } }); } { Button readCardBtn = new Button(rightCompoiste,SWT.NONE); GridData data = new GridData(); data.widthHint = 65; data.heightHint = 28; data.verticalIndent = controlVerticalAlignment; readCardBtn.setLayoutData(data); readCardBtn.setFont(CommonCss.getDefaultFont(parent.getDisplay())); readCardBtn.setText("寻卡"); readCardBtn.addSelectionListener(new SelectionListener(){ public void widgetSelected(SelectionEvent e) { Button btn = (Button)e.getSource(); try{ RFCardManager frCardMgmt = RFCardManager.getInstance(); VipUser user = frCardMgmt.readCardData(VipUser.class); Member member = partSaleService.checkMember(user.getCardNo(), user.getTelephoneNo(), null, null); //校验卡类型和,积分兑换 partSaleService.getAmountByPoint(new BigDecimal(0)); CardRule cardRule = partSaleService.getCardRuleByCardType(member.getCardTypeNM()); if(null == cardRule){ MessageDialog.openError(cardNo.getShell(), MessageResources.message_ui_tips, "卡类型不匹配,当前会员卡类型【"+member.getCardTypeNM()+"】在本地卡类型数据中不存在"); cardNo.forceFocus(); cardNo.setText(""); phone.setText(""); vipPoint.setText(""); userName.setText(""); return; } user.setCardType(member.getCardType()); user.setCardTypeNM(member.getCardTypeNM()); user.setAge(member.getAge()); user.setBirthDay(member.getBirthDay()); user.setEffectiveDateE(ProjectUtil.getDateString(member.getEffectiveDateE())); user.setEffectiveDateS(ProjectUtil.getDateString(member.getEffectiveDateS())); user.setIDCard(member.getIDCard()); user.setIssueDate(ProjectUtil.getDateString(member.getIssueDate())); user.setMenberName(member.getMenberName()); user.setPoint(member.getPoint()); user.setSex(member.getSex()); user.setStatus(member.getStatus()); user.setTelephoneNo(member.getMobile()); //读卡成功后重新写卡 frCardMgmt.writeCardData(user); cardNo.setText(user.getCardNo()); userName.setText(user.getMenberName()); vipPoint.setText(String.valueOf(null == user.getPoint()?0:user.getPoint())); phone.setText(user.getTelephoneNo()); partSales.setVip(true); partSales.setVipUser(user); List<Item> itemList = new ArrayList<Item>(); for(Item itemTemp : PartSalesManager.getInstance().getItemTempList()){ Item itemNew = new Item(); itemNew.setId(itemTemp.getId()); itemNew.setItemName(itemTemp.getItemName()); itemNew.setItemCode(itemTemp.getItemCode()); itemNew.setSalesAmount(itemTemp.getSalesAmount()); itemNew.setFactAmount(itemTemp.getFactAmount()); itemNew.setZJGF(itemTemp.getZJGF()); itemNew.setPretlAmount(itemTemp.getPretlAmount()); itemNew.setIsOldGold(itemTemp.getIsOldGold()); itemNew.setHasGiveaway(itemTemp.getHasGiveaway()); itemNew.setCashier(itemTemp.getCashier()); itemNew.setCashierName(itemTemp.getCashierName()); itemNew.setDISCOUNT1(itemTemp.getDISCOUNT1()); itemNew.setDISCOUNT2(itemTemp.getDISCOUNT2()); itemNew.setDocNum(itemTemp.getDocNum()); itemNew.setFactZJGF(itemTemp.getFactZJGF()); itemNew.setInvoceCode(itemTemp.getInvoceCode()); itemNew.setItemStatus(itemTemp.getItemStatus()); itemNew.setItemType(itemTemp.getItemType()); itemNew.setMatkl(itemTemp.getMatkl()); itemNew.setMATNR(itemTemp.getMATNR()); itemNew.setUnSalePart(itemTemp.getUnSalePart()); itemNew.setZDPYZL(itemTemp.getZDPYZL()); itemNew.setZDPZL(itemTemp.getZDPZL()); itemNew.setZYTM(itemTemp.getZYTM()); itemNew.setZKJYF(itemTemp.getZKJYF()); itemNew.setZSSMD(itemTemp.getZSSMD()); itemNew.setZSSGS(itemTemp.getZSSGS()); itemNew.setZSJCS(itemTemp.getZSJCS()); itemNew.setZMDLSBQJ(itemTemp.getZMDLSBQJ()); itemNew.setZCSBJ(itemTemp.getZCSBJ()); itemNew.setZKJGFLS(itemTemp.getZKJGFLS()); itemNew.setZFZZZL(itemTemp.getZFZZZL()); itemNew.setZMDDXJSJ(itemTemp.getZMDDXJSJ()); itemNew.setZZZZZ(itemTemp.getZZZZZ()); itemNew.setPrice(itemTemp.getPrice()); itemList.add(itemNew); }; if(null == itemList || itemList.size() <= 0){ return; } try { List<Item> ret = partSaleService.applyVipSales(itemList, user.getCardTypeNM()); PartSalesManager.getInstance().getSalesProductTableView().setInput(ret); PartSalesManager.getInstance().getSalesProductTableView().refresh(); PartSalesFacade.caculatorPartSalesPrice(); } catch (POSException e1) { LoggerUtil.logError(SalesActivator.PLUGIN_ID, e1.getErrorMessage(), e1); MessageDialog.openError(btn.getShell(), MessageResources.message_ui_tips, e1.getErrorMessage()); return; } }catch(POSException ee){ LoggerUtil.logError(SalesActivator.PLUGIN_ID, "寻卡出错", ee); MessageDialog.openError(btn.getShell(), MessageResources.message_ui_tips, ee.getErrorMessage()); return; } catch (RFCardException eee) { LoggerUtil.logError(SalesActivator.PLUGIN_ID, "寻卡出错", eee); MessageDialog.openError(btn.getShell(), MessageResources.message_ui_tips, eee.getMessage()); return; }catch (Exception ee) { LoggerUtil.logError(SalesActivator.PLUGIN_ID, "寻卡出错", ee); MessageDialog.openError(btn.getShell(), MessageResources.message_ui_tips, "寻卡出错"); return; } } public void widgetDefaultSelected(SelectionEvent e) { } }); } { Label label = new Label(leftComposite, SWT.NONE); label.setFont(CommonCss.getDefaultFont(parent.getDisplay())); label.setText("会员姓名:"); GridData data = new GridData(); data.horizontalSpan = 1; data.verticalIndent = controlVerticalAlignment; label.setLayoutData(data); } { userName = new Text(leftComposite, SWT.BORDER); GridData data = CommonCss.getTextData(150); data.horizontalSpan = 1; data.verticalIndent = controlVerticalAlignment; userName.setFont(CommonCss.getDefaultFont(parent.getDisplay())); userName.setLayoutData(data); userName.setEditable(false); } { TabFolder folder = new TabFolder(underCompsite, SWT.NONE); folder.setFont(CommonCss.getDefaultFont(parent.getDisplay())); GridData date = new GridData(GridData.FILL_BOTH); date.heightHint = 100; date.widthHint = 380; folder.setLayoutData(date); TabItem prom; { prom = new TabItem(folder, SWT.NONE); prom.setText("促销方案"); } promotionTableView = new TableViewer(prom.getParent(),SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION); promotionTableView.setContentProvider(new PromotionContentProvider()); promotionTableView.setLabelProvider(new PromotionLableProvider()); Table table = promotionTableView.getTable(); table.setFont(CommonCss.getTableHeaderFont(parent.getDisplay())); table.setLinesVisible(false); table.setHeaderVisible(true); { TableColumn column = new TableColumn(table, SWT.NONE); column.setText("方案名称"); column.setWidth(180); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setText("开始日期"); column.setWidth(100); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setText("结束日期"); column.setWidth(100); } { TableColumn column = new TableColumn(table, SWT.NONE); column.setText("时段"); column.setWidth(100); } prom.setControl(promotionTableView.getControl()); try { PromotionDTO dto = partSaleService.queryTodayPromotion(); if(null != dto){ List<Promotion> promotionList = dto.getPromotionList(); if(promotionList != null){ promotionTableView.setInput(promotionList); } } } catch (POSException e) { MessageDialog.openError(parent.getShell(), MessageResources.message_ui_tips, "促销方案查询出错"); } } { Label lable = new Label(rightCompoiste, SWT.NONE); lable.setFont(CommonCss.getDefaultFont(parent.getDisplay())); lable.setText("电话号码:"); GridData data = new GridData(); data.horizontalSpan = 2; data.verticalIndent = controlVerticalAlignment; lable.setLayoutData(data); } { phone = new Text(rightCompoiste, SWT.BORDER); GridData data = CommonCss.getTextData(150); data.horizontalSpan = 3; data.verticalIndent = controlVerticalAlignment; phone.setLayoutData(data); phone.setFont(CommonCss.getDefaultFont(parent.getDisplay())); SoftKeyUtil.showSoftKey(phone); phone.addKeyListener(new KeyListener() { public void keyReleased(KeyEvent e) { if (e.keyCode == SWT.CR) { String inputCardNo = cardNo.getText(); String inputPhone = phone.getText(); if((null == inputCardNo || "".equals(inputCardNo)) && (null == inputPhone || "".equals(inputPhone))){ MessageDialog.openInformation(cardNo.getShell(), MessageResources.message_ui_tips, "请输入【会员卡号】或【电话号码】"); phone.setFocus(); return; } Member member = null; try { member = partSaleService.checkMember(inputCardNo, inputPhone, null, null); } catch (POSException e1) { MessageDialog.openError(cardNo.getShell(), MessageResources.message_ui_tips, e1.getErrorMessage()); return; } if(null == member){ MessageDialog.openError(cardNo.getShell(), MessageResources.message_ui_tips, "卡不存在,请重新输入卡号"); return; }else{ cardNo.setText(member.getCardNo()); phone.setText(member.getMobile()); vipPoint.setText(String.valueOf(member.getPoint())); userName.setText(member.getMenberName()); } } } public void keyPressed(KeyEvent e) { } }); } { Label lable = new Label(rightCompoiste, SWT.NONE); lable.setFont(CommonCss.getDefaultFont(parent.getDisplay())); lable.setText("条形码:"); GridData data = new GridData(); data.horizontalSpan = 2; data.verticalIndent = controlVerticalAlignment; lable.setLayoutData(data); } { barCode = new Text(rightCompoiste, SWT.BORDER); GridData data = CommonCss.getTextData(150); data.horizontalSpan = 3; data.verticalIndent = controlVerticalAlignment; barCode.setLayoutData(data); barCode.setFont(CommonCss.getDefaultFont(parent.getDisplay())); SoftKeyUtil.showSoftKey(barCode); } } public void setFocus() { } @Override public void onChangeBarcode(final String operationType) { IWorkbenchWindow window = PlatformUI.getWorkbench().getWorkbenchWindows()[0]; IWorkbenchPage page = window.getActivePage(); String viewid = page.getActivePartReference().getId(); if(null == viewid){ viewid = ""; } if(!"com.topsun.posclient.sales.ui.menu.SalesView".equals(viewid)){ return; } Display.getDefault().asyncExec(new Runnable() { public void run() { try { if(tableViewer.getInput() != null && ((List<Item>)tableViewer.getInput()).size() > 0){ List<Item> items = (List<Item>)tableViewer.getInput() ; List<String> nameList = new ArrayList<String>(); for (Item item : items) { if(null != item){ String itemCode = item.getItemCode(); nameList.add(itemCode); } } if(nameList.contains(operationType)){ Item selectedItem = null; for (Item t_item : items) { String itemCode = t_item.getItemCode(); if(itemCode.equals(operationType)){ selectedItem = t_item; } } tableViewer.refresh(); tableViewer.setSelection(new StructuredSelection(selectedItem)); tableViewer.editElement(selectedItem, 2); } } PartSalesFacade.caculatorPartSalesPrice(); Text barCode = GoldSalesManager.getInstance().getBarCode(); if(null != barCode){ barCode.forceFocus(); barCode.setText(""); } } catch (Exception e) { LoggerUtil.logError(SalesActivator.PLUGIN_ID, "扫描单品错误", e); } } }); } } class Settings extends DefaultSettings { public boolean keyboardNavigatesCalendar() { return false; } }