package com.caimei.modules.bulkpurchase.service; import com.caimei.modules.bulkpurchase.dao.*; import com.caimei.modules.bulkpurchase.entity.*; import com.caimei.utils.MathUtil; import com.google.common.collect.Lists; import com.thinkgem.jeesite.common.persistence.Page; import com.thinkgem.jeesite.common.service.CrudService; import com.thinkgem.jeesite.common.utils.DateUtils; import com.thinkgem.jeesite.common.utils.StringUtils; import com.thinkgem.jeesite.modules.sys.utils.UserUtils; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * 采购订单Service * * @author jiangjunwen * @version 2017-04-07 */ @Service @Transactional(readOnly = true) public class ContractOrderService extends CrudService { @Autowired private ContractOrderDao contractOrderDao; @Autowired private BpOrderUserinfoService bpOrderUserinfoService; @Autowired private OrderInvoiceService orderInvoiceService; @Autowired private OrderProductDao orderProductDao; @Autowired private ContractDao contractDao; @Autowired private OrderStagesDao orderStagesDao; @Autowired private OrderStagesProductDao orderStagesProductDao; @Autowired private BpOrderStagesShopDao orderStagesShopDao; @Autowired private BpClauseService bpClauseService; public ContractOrder get(String id) { ContractOrder contractOrder = super.get(id); if(null !=contractOrder){ //获取订单客户 BpOrderUserinfo bpOrderUserinfo = bpOrderUserinfoService.getWithorderId(contractOrder.getId()); if (null != bpOrderUserinfo) { contractOrder.setBpOrderUserinfo(bpOrderUserinfo); } //获取订单商品 List list = orderProductDao.getWithorderId(contractOrder.getId()); if (CollectionUtils.isNotEmpty(list)) { contractOrder.setOrderProduct(list); } //获取订单发票 OrderInvoice orderInvoice = orderInvoiceService.getWithorderId(contractOrder.getId()); if (null != orderInvoice) { contractOrder.setOrderInvoice(orderInvoice); } String contractId = contractOrder.getContractId(); if(StringUtils.isNotEmpty(contractId)){ //获取采购基本信息(针对V1.2.0之前版本存在合同订单) Contract contract = contractDao.get(contractId); contractOrder.setContract(contract); } if(StringUtils.equals(contractOrder.getStagesFlag(),"1")){ OrderStages orderStages=new OrderStages(); orderStages.setOrderId(Long.parseLong(contractOrder.getId())); List orderStagesList = orderStagesDao.findList(orderStages); if(CollectionUtils.isNotEmpty(orderStagesList)){ for (OrderStages o:orderStagesList) { List stagesProductBuyStagesId = orderStagesProductDao.findStagesProductBuyStagesId(o.getId()); o.setOrderStagesProductList(stagesProductBuyStagesId); //获取分期订单-应付供应商列表 BpOrderStagesShop orderStagesShop = new BpOrderStagesShop(); orderStagesShop.setStagesId(Integer.parseInt(o.getId())); List orderStagesShops = Lists.newArrayList(); orderStagesShops = orderStagesShopDao.findList(orderStagesShop); if (CollectionUtils.isEmpty(orderStagesShops)){ //如果是之前的订单 通过订单商品获取应付供应商列表 List productList = orderProductDao.getWithorderIdGroupByShopId(contractOrder.getId()); if (CollectionUtils.isNotEmpty(productList)){ BpOrderStagesShop orderStagesShop1 = new BpOrderStagesShop(); for (OrderProduct orderProduct : productList){ orderStagesShop1.setShopId(orderProduct.getShopId().intValue()); orderStagesShop1.setShopFee(new BigDecimal(0.00)); orderStagesShop1.setShopName(orderProduct.getShopName()); orderStagesShops.add(orderStagesShop1); } } } o.setOrderStagesShopList(orderStagesShops); } contractOrder.setOrderStages(orderStagesList); } } } return contractOrder; } public List findList(ContractOrder contractOrder) { return super.findList(contractOrder); } public Page findPage(Page page, ContractOrder contractOrder) { return super.findPage(page, contractOrder); } @Transactional(readOnly = false) public void save(ContractOrder contractOrder) { boolean flag=false;//是否新增标志 if(StringUtils.isEmpty(contractOrder.getId())){ flag=true; } //增加快照条款内容 Long clauseId = contractOrder.getClauseId(); String clauseContent = contractOrder.getClauseContent(); BpClause bpClause = bpClauseService.get(String.valueOf(clauseId)); if(StringUtils.isEmpty(clauseContent) && null != bpClause){//第一次保存数据则按照条款表设置,后面再保存可能存在修改过快照,此时存在条款内容不允许修改 contractOrder.setClauseName(bpClause.getName()); contractOrder.setClauseContent(bpClause.getContent()); } if(StringUtils.isEmpty(contractOrder.getPayWay()))contractOrder.setPayWay("0"); contractOrder.setClubId(contractOrder.getBpOrderUserinfo().getClubId()); if(StringUtils.isEmpty(contractOrder.getDiscount())){//设置折扣 contractOrder.setDiscount("0"); } if(StringUtils.isEmpty(contractOrder.getBalancePayFee())){//设置余额 contractOrder.setBalancePayFee(0+""); } if("".equals(contractOrder.getContractId()))contractOrder.setContractId(null); if(!StringUtils.equals("1",contractOrder.getConfirmFlag())){ contractOrder.setConfirmFlag("0"); } // super.save(contractOrder); if (contractOrder.getIsNewRecord()){ contractOrderDao.insert(contractOrder); }else{ contractOrderDao.update(contractOrder); } //订单客户 BpOrderUserinfo bpOrderUserinfo = contractOrder.getBpOrderUserinfo(); //发票信息 OrderInvoice orderInvoice = contractOrder.getOrderInvoice(); if(flag){//新增 bpOrderUserinfo.setOrderId(Long.parseLong(contractOrder.getId())); } if(null != orderInvoice){ orderInvoice.setOrderId(Long.parseLong(contractOrder.getId())); orderInvoice.setInvoiceType("普通发票"); orderInvoice.setInvoiceContent("明细"); orderInvoiceService.save(orderInvoice); } bpOrderUserinfoService.saveWithcity(bpOrderUserinfo); //采购中选中保存的订单商品 List orderProducts = contractOrder.getOrderProduct(); //数据库中的订单商品 OrderProduct orderProduct=new OrderProduct(); orderProduct.setOrderId(Long.parseLong(contractOrder.getId())); List dbOrderProducts= orderProductDao.findAllList(orderProduct); if(!flag && null==contractOrder.getContractId()){//直接添加订单,修改订单的时候 orderProductDao.deleteByOrderId(contractOrder.getId()); for (OrderProduct product : orderProducts) { product.setOrderId(Long.parseLong(contractOrder.getId())); orderProductDao.insert(product); } }else { // 重新保存逻辑 if (CollectionUtils.isNotEmpty(orderProducts)) { for (OrderProduct product : orderProducts) { if (StringUtils.isEmpty(product.getId())) {//新增:表单订单商品ID为空 product.setOrderId(Long.parseLong(contractOrder.getId())); orderProductDao.insert(product); } else {//修改:表单所有ID不为空的修改 if (CollectionUtils.isNotEmpty(dbOrderProducts)) { for (OrderProduct dbProduct : dbOrderProducts) { if (StringUtils.equals(dbProduct.getId(), product.getId())) { product.setOrderId(Long.parseLong(contractOrder.getId())); orderProductDao.update(product); } } } } } } //删除 if (CollectionUtils.isNotEmpty(orderProducts)) { for (OrderProduct dbProduct : dbOrderProducts) { boolean b = true;//删除 for (OrderProduct product : orderProducts) { if (StringUtils.equals(dbProduct.getId(), product.getId())) { b = false;//不删除 } } //删除:数据库有,表单没有的 if (b) { dbProduct.setDelFlag(DateUtils.formatDate(new Date(), "yyyyMMddHHmmssSSSS")); orderProductDao.delete(dbProduct); } } } } //分期信息处理 //先删除分期相关信息 orderStagesDao.deleteByOrderId(contractOrder.getId()); orderStagesProductDao.deleteByOrderId(contractOrder.getId()); orderStagesShopDao.deleteByOrderId(contractOrder.getId()); if(StringUtils.equals("1",contractOrder.getStagesFlag())){//新增分期信息 List orderStages=contractOrder.getOrderStages(); int index=1; for (OrderStages orderStage:orderStages) { orderStage.setOrderId(Long.parseLong(contractOrder.getId())); orderStage.setNum(index); orderStage.setUpdateDate(new Date()); orderStage.setServiceProviderId(contractOrder.getSpId()); orderStage.setClubId(contractOrder.getClubId()); orderStage.setClauseId(contractOrder.getClauseId()); logger.info("应付采美:"+orderStage.getCmFee()); logger.info("应付三方:"+orderStage.getOtherFee()); BigDecimal shopFee = new BigDecimal(0);//该期总应付供应商 if(CollectionUtils.isNotEmpty(orderStage.getOrderStagesShopList())){ for (BpOrderStagesShop orderStagesShop:orderStage.getOrderStagesShopList()) { shopFee = MathUtil.add(shopFee,orderStagesShop.getShopFee()); } } orderStage.setShopFee(shopFee); orderStagesDao.insert(orderStage); if(CollectionUtils.isNotEmpty(orderStage.getOrderStagesProductList())){ for (OrderStagesProduct orderStagesProduct:orderStage.getOrderStagesProductList()) { orderStagesProduct.setOrderId(Long.parseLong(contractOrder.getId())); orderStagesProduct.setStagesId(Long.parseLong(orderStage.getId())); orderStagesProduct.setStagesNum(index); orderStagesProductDao.insert(orderStagesProduct); } } //添加应付供应商信息 if(CollectionUtils.isNotEmpty(orderStage.getOrderStagesShopList())){ for (BpOrderStagesShop orderStagesShop:orderStage.getOrderStagesShopList()) { orderStagesShop.setOrderId(Integer.parseInt(contractOrder.getId())); orderStagesShop.setStagesId(Integer.parseInt(orderStage.getId())); orderStagesShop.setStagesNum(index); orderStagesShop.setAddTime(new Date()); orderStagesShop.setUpdateBy(UserUtils.getUser()); orderStagesShop.setUpdateDate(new Date()); orderStagesShop.setCreateBy(UserUtils.getUser()); orderStagesShop.setCreateDate(new Date()); logger.info("应付供应商:"+orderStagesShop.getShopFee()); orderStagesShopDao.insert(orderStagesShop); } } index++; } } } @Transactional(readOnly = false) public void saveConfirmFlag(ContractOrder contractOrder) { contractOrderDao.saveConfirmFlag(contractOrder); } @Transactional(readOnly = false) public void updateOrderStatus(String orderId,String orderStatus) { contractOrderDao.updateOrderStatus(orderId,orderStatus); } @Transactional(readOnly = false) public void updateOrderStatusInfo(ContractOrder contractOrder) { contractOrderDao.updateOrderStatusInfo(contractOrder); } @Transactional(readOnly = false) public void saveOrderStatusFlag(ContractOrder contractOrder) { contractOrderDao.saveOrderStatusFlag(contractOrder); } @Transactional(readOnly = false) public void updateClauseContent(ContractOrder contractOrder) { contractOrderDao.updateClauseContent(contractOrder); } @Transactional(readOnly = false) public void delete(ContractOrder contractOrder) { super.delete(contractOrder); } public List findAllList( ContractOrder contractOrder) { List list= contractOrderDao.findAllPage(contractOrder); return list; } public Integer findCountList(String contractId) { return contractOrderDao.findCountList(contractId); } public Integer findCompleteList(String contractId) { return contractOrderDao.findCompleteList(contractId); } @Transactional(readOnly = false) public void saveOrderStopInfo(ContractOrder contractOrder) { contractOrderDao.saveOrderStopInfo(contractOrder); } public Integer getInfo(String qitaId) { return contractOrderDao.findCountList(qitaId); } }