123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- 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<ContractOrderDao, ContractOrder> {
- @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<OrderProduct> 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<OrderStages> orderStagesList = orderStagesDao.findList(orderStages);
- if(CollectionUtils.isNotEmpty(orderStagesList)){
- for (OrderStages o:orderStagesList) {
- List<OrderStagesProduct> stagesProductBuyStagesId = orderStagesProductDao.findStagesProductBuyStagesId(o.getId());
- o.setOrderStagesProductList(stagesProductBuyStagesId);
- //获取分期订单-应付供应商列表
- BpOrderStagesShop orderStagesShop = new BpOrderStagesShop();
- orderStagesShop.setStagesId(Integer.parseInt(o.getId()));
- List<BpOrderStagesShop> orderStagesShops = Lists.newArrayList();
- orderStagesShops = orderStagesShopDao.findList(orderStagesShop);
- if (CollectionUtils.isEmpty(orderStagesShops)){
- //如果是之前的订单 通过订单商品获取应付供应商列表
- List<OrderProduct> 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<ContractOrder> findList(ContractOrder contractOrder) {
- return super.findList(contractOrder);
- }
- public Page<ContractOrder> findPage(Page<ContractOrder> 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<OrderProduct> orderProducts = contractOrder.getOrderProduct();
- //数据库中的订单商品
- OrderProduct orderProduct=new OrderProduct();
- orderProduct.setOrderId(Long.parseLong(contractOrder.getId()));
- List<OrderProduct> 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> 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<ContractOrder> findAllList( ContractOrder contractOrder) {
- List<ContractOrder> 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);
- }
- }
|