From 89e17a219d8a6d208e4cb32a43e90abb89b3c93b Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Mon, 25 Jan 2021 16:17:26 +0800 Subject: [PATCH] modify --- zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 290 +++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 197 insertions(+), 93 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java index 2afd6ee..9cfcdec 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java @@ -7,6 +7,7 @@ import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.dto.OrderListDto; +import com.matrix.system.app.mapper.SysProjUseMapper; import com.matrix.system.app.vo.OrderDetailAchieveItemVo; import com.matrix.system.app.vo.OrderDetailItemVo; import com.matrix.system.app.vo.OrderDetailVo; @@ -25,16 +26,14 @@ import com.matrix.system.hive.pojo.CzXkVo; import com.matrix.system.hive.pojo.ShoppingCarItem; import com.matrix.system.hive.pojo.ShoppingCarItemsVo; -import com.matrix.system.hive.service.AchieveNewService; -import com.matrix.system.hive.service.CodeService; -import com.matrix.system.hive.service.ShoppingGoodsService; -import com.matrix.system.hive.service.SysOrderService; +import com.matrix.system.hive.service.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpSession; +import javax.validation.constraints.NotEmpty; import java.util.*; /** @@ -96,6 +95,19 @@ @Autowired private SysOrderFlowDao sysOrderFlowDao; + @Autowired + private SysSupplierInfoDao sysSupplierInfoDao; + + @Autowired + private SysInstoreInfoDao sysInstoreInfoDao; + + @Autowired + private SysInstoreDetailDao sysInstoreDetailDao; + + @Autowired + private SysInstoreInfoService sysInstoreInfoService; + + @Override public int add(SysOrder sysOrder) { return sysOrderDao.insert(sysOrder); @@ -155,6 +167,10 @@ @Override public SysOrder checkAndSaveOrder(SysOrder sysOrder) { // 收款改变订单状态 + SysOrder source = null; + if (sysOrder.getId() != null) { + source = sysOrderDao.selectById(sysOrder.getId()); + } // 计算订单折扣金额,收款情况下 计算订单总额 double zkTotal = 0.0; @@ -191,8 +207,8 @@ SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); sysOrder.setZkTotal(zkTotal); sysOrder.setStatu(orderStatus); - sysOrder.setStaffId(user.getSuId()); - sysOrder.setCompanyId(user.getCompanyId()); + sysOrder.setStaffId(source != null ? source.getStaffId() : user.getSuId()); + sysOrder.setCompanyId(source != null ? source.getCompanyId() : user.getCompanyId()); sysOrder.setPayTime(new Date()); if(sysOrder.getId()==null){ @@ -209,7 +225,16 @@ sysOrder.getItems().forEach(sysOrderItem -> { sysOrderItem.setOrderId(sysOrder.getId()); - orderItemDao.insert(sysOrderItem); + if (sysOrder.getStatu().equals(Dictionary.ORDER_STATU_TK)) { + // 取负数 + sysOrderItem.setCount(-sysOrderItem.getCount()); + orderItemDao.insert(sysOrderItem); + // 调整回来 + sysOrderItem.setCount(-sysOrderItem.getCount()); + } else { + orderItemDao.insert(sysOrderItem); + } + }); return sysOrder; @@ -412,7 +437,6 @@ // 设置订单总价与折后价 order.setTotal(total); order.setZkTotal(zkTotal); - order.setArrears(zkTotal); sysOrderDao.update(order); return i; } @@ -478,6 +502,7 @@ private void changeOrderStatu(SysOrder sourceOrder) { int i = 1; String orderStatus = Dictionary.ORDER_STATU_YFK; + String flowType = SysOrderFlow.FLOW_TYPE_BUY; double cashPayTotal = 0D; double cardPayTotal = 0D; for (SysOrderFlow flow : sourceOrder.getFlows()) { @@ -487,13 +512,16 @@ flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品"); if (Dictionary.ORDER_STATU_TK.equals(sourceOrder.getStatu())) { + flowType = SysOrderFlow.FLOW_TYPE_REFUND; + // 若是退款,则取负数 + flow.setAmount(flow.getAmount().negate()); flow.setOrderId(sourceOrder.getOldOrderId()); } else { flow.setOrderId(sourceOrder.getId()); } flow.setVipId(sourceOrder.getVipId()); - flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY); + flow.setFlowType(flowType); // 若使用储值卡付款 if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) { if (flow.getCardId() != null) { @@ -511,6 +539,8 @@ if (!SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod()) && !SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) { cashPayTotal += flow.getAmount().doubleValue(); } + flow.setShopId(sourceOrder.getShopId()); + flow.setCompanyId(sourceOrder.getCompanyId()); sysOrderFlowDao.insert(flow); i++; } @@ -543,8 +573,7 @@ Integer buyNum = orderItemDao.selectByGoodsId(shopGoods.getId()); buyNum = (buyNum == null ? 0 : buyNum); if ((buyNum + carItem.getCount()) > maxNum) { - - throw new GlobleException(shopGoods.getName() + "已超过最大销售数量,还剩【" + (maxNum - buyNum) + "】件"); + throw new GlobleException(shopGoods.getName() + "已超过最大销售数量"); } if ((buyNum + carItem.getCount()) == maxNum) { if (!shopGoods.getStaus().equals(Dictionary.BUSINESS_STATE_DOWN)) { @@ -620,8 +649,10 @@ } ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId()); - Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime()); - moneyCardUse.setFailTime(invalidTime); + if (shoppingGoods != null) { + Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime()); + moneyCardUse.setFailTime(invalidTime); + } // 更新充值卡信息 moneyCardUseDao.update(moneyCardUse); } @@ -696,51 +727,46 @@ // 如果购买的是充值卡 if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_CZK)) { - ShoppingGoods moneyCar = shoppingGoodsDao.selectById(sysOrderItem.getGoodsId()); - MoneyCardUse moneyCardUse = new MoneyCardUse(); - moneyCardUse.setVipId(sourceOrder.getVipId()); - moneyCardUse.setGiftMoney(moneyCar.getReferencePice()); - moneyCardUse.setRealMoney(moneyCar.getSealPice()); - moneyCardUse.setGoodsId(moneyCar.getId()); - moneyCardUse.setIsOver(Dictionary.FLAG_NO_N); - moneyCardUse.setOrderItemId(sysOrderItem.getId()); - moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM); - moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); - moneyCardUse.setCardName(moneyCar.getName()); - - if (Dictionary.FLAG_YES.equals(moneyCar.getCarIsAll())) { - moneyCardUse.setIsVipCar(Dictionary.FLAG_YES_Y); - } else { - // 非会籍卡 - moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N); - } - - // 是否为赠送 - if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) { - moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_ZS); - } else { + for(int i = 0; i < sysOrderItem.getCount(); i++) { + ShoppingGoods moneyCar = shoppingGoodsDao.selectById(sysOrderItem.getGoodsId()); + MoneyCardUse moneyCardUse = new MoneyCardUse(); + moneyCardUse.setVipId(sourceOrder.getVipId()); + moneyCardUse.setGiftMoney(moneyCar.getReferencePice()); + moneyCardUse.setRealMoney(moneyCar.getSealPice()); + moneyCardUse.setGoodsId(moneyCar.getId()); + moneyCardUse.setIsOver(Dictionary.FLAG_NO_N); + moneyCardUse.setOrderItemId(sysOrderItem.getId()); moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM); - } - if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) { - moneyCardUse.setUseTotal(999999999); - moneyCardUse.setLastCount(999999999); - } else { - moneyCardUse.setUseTotal(moneyCar.getCarUseCount()); - moneyCardUse.setLastCount(moneyCar.getCarUseCount()); - } - moneyCardUse.setVipId(sourceOrder.getVipId()); -// if (moneyCar.getValidity() == null || moneyCar.getValidity() == 0) { -// // 设置失效时间 -// Calendar cal = Calendar.getInstance(); -// cal.set(2200, 1, 1); -// moneyCardUse.setFailTime(cal.getTime()); -// } else { -// moneyCardUse.setFailTime(DateUtil.nextNDate(new Date(), 30 * moneyCar.getValidity())); -// } - Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null); - moneyCardUse.setFailTime(invalidTime); + moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); + moneyCardUse.setCardName(moneyCar.getName()); - moneyCardUseDao.insert(moneyCardUse); + if (Dictionary.FLAG_YES.equals(moneyCar.getCarIsAll())) { + moneyCardUse.setIsVipCar(Dictionary.FLAG_YES_Y); + } else { + // 非会籍卡 + moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N); + } + + // 是否为赠送 + if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) { + moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_ZS); + } else { + moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM); + } + if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) { + moneyCardUse.setUseTotal(999999999); + moneyCardUse.setLastCount(999999999); + } else { + moneyCardUse.setUseTotal(moneyCar.getCarUseCount()); + moneyCardUse.setLastCount(moneyCar.getCarUseCount()); + } + moneyCardUse.setVipId(sourceOrder.getVipId()); + + Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null); + moneyCardUse.setFailTime(invalidTime); + + moneyCardUseDao.insert(moneyCardUse); + } } } } @@ -779,6 +805,8 @@ } refundTotal += flow.getAmount().doubleValue(); + flow.setShopId(sourceOrder.getShopId()); + flow.setCompanyId(sourceOrder.getCompanyId()); sysOrderFlowDao.insert(flow); i++; } @@ -1107,11 +1135,11 @@ public SysOrder updateAddCardMoney(CzXkVo czVo) { SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); - SysVipInfo vip = (SysVipInfo) WebUtil.getSession().getAttribute(SystemConstance.CURRENT_CUSTOMER); - czVo.setVipId(vip.getId()); +// SysVipInfo vip = (SysVipInfo) WebUtil.getSession().getAttribute(SystemConstance.CURRENT_CUSTOMER); +// czVo.setVipId(vip.getId()); //更新会员会员卡金额 - MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(vip.getId()); + MoneyCardUse cardUser = moneyCardUseDao.selectVipCard(czVo.getVipId()); cardUser.setRealMoney(MoneyUtil.add(cardUser.getRealMoney(), czVo.getBjmoney())); cardUser.setGiftMoney(MoneyUtil.add(cardUser.getGiftMoney(), czVo.getGiftMoney())); moneyCardUseDao.update(cardUser); @@ -1142,6 +1170,7 @@ order.setStaffId(user.getSuId()); order.setIsCross(2 + ""); order.setStatu(Dictionary.ORDER_STATU_YFK); + order.setCompanyId(user.getCompanyId()); sysOrderDao.insert(order); SysOrderItem orderItem = new SysOrderItem(); @@ -1161,6 +1190,9 @@ orderItem.setStatus(Dictionary.ORDER_STATU_YFK); orderItem.setAchaeveList(czVo.getAchaeveList()); orderItemDao.insert(orderItem); + List<SysOrderItem> items = new ArrayList<>(); + items.add(orderItem); + order.setItems(items); //设置卡项使用流水 @@ -1176,7 +1208,8 @@ moneyCardUseFlow.setBalance(cardUser.getGiftMoney()+cardUser.getRealMoney()); moneyCardUseFlowDao.insert(moneyCardUseFlow); - + order.setFlows(czVo.getFlows()); + changeOrderStatu(order); // 添加员工业绩 achieveNewService.addAchaeveByOrder(order); return order; @@ -1224,55 +1257,82 @@ return sysOrderDao.selectShopAchieveRanking(sysOrder); } - @Override - public List<RankingVo> findStaffSaleAchieveRanking(SysOrder sysOrder) { - return sysOrderDao.selectStaffSaleAchieveRanking(sysOrder); - } - + @Transactional(rollbackFor = Exception.class) @Override public void refundOrderMoney(SysOrder pageOrder) { - + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); // 插入订单流水 changeOrderStatu(pageOrder); + List<SysOrderItem> returnItems = new ArrayList<>(); for (SysOrderItem item : pageOrder.getItems()) { SysProjUse queryProjUse = new SysProjUse(); queryProjUse.setIsOver(Dictionary.FLAG_NO_N); queryProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX); - queryProjUse.setOrderItemId(item.getId()); + queryProjUse.setOrderItemId(item.getOldItemId()); // 修改项目信息 - if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType()) && Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) { - SysProjUse sysProjUse = sysProjUseDao.selectByModel(queryProjUse).get(0); + if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType()) || Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) { - int sub = sysProjUse.getSurplusCount() - item.getCount(); - sysProjUse.setSurplusCount(sub); - if (sub <= 0) { - sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); - sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); + if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) { + if (Dictionary.FLAG_YES_Y.equals(item.getIsReturnStore())) { + returnItems.add(item); + } + } else { + SysProjUse sysProjUse = sysProjUseDao.selectByModel(queryProjUse).get(0); + + int sub = sysProjUse.getSurplusCount() - item.getCount(); + sysProjUse.setSurplusCount(sub); + if (sub <= 0) { + sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); + sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); + } + sysProjUseDao.update(sysProjUse); + + SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse); + sysProjUseFlow.setOptionType("退款修改"); + sysProjUseFlow.setId(null); + sysProjUseFlow.setUpdateBy(user.getSuName()); + sysProjUseFlow.setCreateBy(user.getSuName()); + sysProjUseDao.insertFlow(sysProjUseFlow); } - sysProjUseDao.update(sysProjUse); } if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(item.getType())) { queryProjUse.setTaocanId(-1L); - SysProjUse sysProjUse = sysProjUseDao.selectByModel(queryProjUse).get(0); - sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); - sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); + List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(queryProjUse); + if (item.getCount() > sysProjUses.size()) { + throw new GlobleException("数据异常"); + } - sysProjUseDao.update(sysProjUse); + for(int i = 0; i < item.getCount(); i++) { + SysProjUse sysProjUse = sysProjUses.get(i); + sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); + sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); + + sysProjUseDao.update(sysProjUse); + SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse); + sysProjUseFlow.setOptionType("退款修改"); + sysProjUseFlow.setId(null); + sysProjUseFlow.setUpdateBy(user.getSuName()); + sysProjUseFlow.setCreateBy(user.getSuName()); + sysProjUseDao.insertFlow(sysProjUseFlow); + } } if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(item.getType())) { MoneyCardUse queryCardUse = new MoneyCardUse(); queryCardUse.setIsOver(Dictionary.FLAG_NO_N); queryCardUse.setStatus(Dictionary.TAOCAN_STATUS_YX); - queryCardUse.setOrderItemId(item.getId()); + queryCardUse.setOrderItemId(item.getOldItemId()); - MoneyCardUse moneyCardUse = moneyCardUseDao.selectByModel(queryCardUse).get(0); - moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); - moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX); - moneyCardUseDao.update(moneyCardUse); + List<MoneyCardUse> moneyCardUses = moneyCardUseDao.selectByModel(queryCardUse); + for(int i = 0; i < item.getCount(); i++) { + MoneyCardUse moneyCardUse = moneyCardUses.get(i); + moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); + moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX); + moneyCardUseDao.update(moneyCardUse); + } } // TODO 综合卡退款 @@ -1280,20 +1340,64 @@ } + + ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId()); + goods.setRealSealCount(goods.getRealSealCount() - item.getCount()); + shoppingGoodsDao.update(goods); } - // 设置会员充值卡使用情况 - addMoneyCardUse(pageOrder); - - // 新增出库单 - addOutStore(pageOrder); - - // 改变客户项目套餐使用情况 - addTaocanProj(pageOrder); + // 家居产品退库存 + if (CollectionUtils.isNotEmpty(returnItems)) { + refundInstore(returnItems); + } // 设置业绩 achieveNewService.addAchaeveByOrder(pageOrder); - setShopSelCount(pageOrder); + } + + /** + * 退款入库 + */ + private void refundInstore(@NotEmpty List<SysOrderItem> items) { + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + SysSupplierInfo supplierInfo = new SysSupplierInfo(); + supplierInfo.setShopId(user.getShopId()); + supplierInfo = sysSupplierInfoDao.selectByModel(supplierInfo).get(0); + + Warehouse warehouse = warehouseDao.findShopWarehouse(user.getShopId()).get(0); + SysInstoreInfo instoreInfo = new SysInstoreInfo(); + instoreInfo.setInstoreType(SysInstoreInfo.INSTORE_TYPE_RETURN); + instoreInfo.setInstoreDate(new Date()); + instoreInfo.setSupplierId(supplierInfo.getId().toString()); + instoreInfo.setStoreId(warehouse.getId()); + instoreInfo.setCheckStatus(Dictionary.CHECK_STATUS_DSH); + // 设置入库单编号 + instoreInfo.setInstoreId(DateUtil.getTimeMark()); + instoreInfo.setShopId(user.getShopId()); + instoreInfo.setCompanyId(user.getCompanyId()); + sysInstoreInfoDao.insert(instoreInfo); + + Double total = 0.0; + List<SysInstoreDetail> instoreDetails = new ArrayList<>(); + for (SysOrderItem item : items) { + ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId()); + SysInstoreDetail sysInstoreDetail = new SysInstoreDetail(); + sysInstoreDetail.setAmount(item.getCount().doubleValue()); + sysInstoreDetail.setPrice(item.getZkPrice()); + sysInstoreDetail.setSkuId(goods.getId()); + + total = MoneyUtil.add(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""), sysInstoreDetail.getPrice()), total); + sysInstoreDetail.setInstoreId(instoreInfo.getId()); + // 设置小计 + sysInstoreDetail.setPriceTotal(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""), sysInstoreDetail.getPrice())); + instoreDetails.add(sysInstoreDetail); + + } + instoreInfo.setSumall(total); + sysInstoreInfoDao.update(instoreInfo); + sysInstoreDetailDao.batchInsert(instoreDetails); + + sysInstoreInfoService.check(instoreInfo); } } -- Gitblit v1.9.1