935090232@qq.com
2021-10-30 caa15383382af86c00f7176c1d24280a7da6d9e2
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java
@@ -1,7 +1,8 @@
package com.matrix.system.hive.service.imp;
import cn.hutool.core.collection.CollUtil;
import com.matrix.component.rabbitmq.RabiitMqTemplate;
import com.google.common.collect.Lists;
import com.matrix.component.asyncmessage.AsyncMessageManager;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.PaginationVO;
@@ -17,6 +18,7 @@
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.dao.SysUsersDao;
import com.matrix.system.common.service.BusParameterSettingService;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
@@ -25,16 +27,16 @@
import com.matrix.system.score.constant.ScoreSettingConstant;
import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
import com.matrix.system.shopXcx.mqTask.MQTaskRouting;
import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting;
import com.matrix.system.wechart.templateMsg.UniformMsgParam;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -67,7 +69,8 @@
    private SysOutStoreItemDao sysOutStoreItemDao;
    @Autowired
    private SysBedInfoDao sysBedInfoDao;
    @Autowired
    TaiYanAliyunSmsService taiYanAliyunSmsService;
    @Autowired
    private SysStoreInfoDao storeInfoDao;
@@ -111,11 +114,14 @@
    private ShoppingGoodsService shoppingGoodsService;
    @Autowired
    private RabiitMqTemplate rabiitMqTemplate;
    private AsyncMessageManager asyncMessageManager;
    @Autowired
    BusParameterSettingsDao busParameterSettingsDao;
    @Autowired
    BusParameterSettingService busParameterSettingService;
    @Autowired
    ScoreVipDetailService scoreVipDetailService;
@@ -123,9 +129,9 @@
    @Autowired
    SysVipInfoDao sysVipInfoDao;
    @Value("${evn}")
    private String evn;
    @Autowired
    ShoppingGoodsAssembleDao goodsAssembleDao;
    /**
     * 新增服务单 jyy
@@ -199,20 +205,22 @@
                    taocan.setIsOver(Dictionary.FLAG_YES_Y);
                    taocan.setSurplusCount(0);
                    taocan.setStatus(Dictionary.TAOCAN_STATUS_WX);
                } else if (Dictionary.FLAG_YES_Y.equals(taocan.getIsCourse())) {
                    if (StringUtils.isBlank(taocan.getIsInfinite()) || Dictionary.FLAG_NO_N.equals(taocan.getIsInfinite())) {
                        //任选套餐检查套餐整体剩余次数
                        int tcSurplusCount = taocan.getSurplusCount() - sysBeauticianState.getCount();
                        if (tcSurplusCount < 0) {
                            throw new GlobleException(taocan.getProjName() + "已经达到最大使用次数");
                        } else {
                            taocan.setSurplusCount(tcSurplusCount);
                        }
                } else if (
                        Dictionary.FLAG_NO_N.equals(taocan.getIsCourse())
                                || (Dictionary.FLAG_YES_Y.equals(taocan.getIsCourse())
                                && (StringUtils.isBlank(taocan.getIsInfinite()) || Dictionary.FLAG_NO_N.equals(taocan.getIsInfinite())))) {
                        if (tcSurplusCount == 0) {
                            taocan.setIsOver(Dictionary.FLAG_YES_Y);
                            taocan.setStatus(Dictionary.TAOCAN_STATUS_WX);
                        }
                    //任选套餐检查套餐整体剩余次数
                    int tcSurplusCount = taocan.getSurplusCount() - sysBeauticianState.getCount();
                    if (tcSurplusCount < 0) {
                        throw new GlobleException(taocan.getProjName() + "已经达到最大使用次数");
                    } else {
                        taocan.setSurplusCount(tcSurplusCount);
                    }
                    if (tcSurplusCount == 0) {
                        taocan.setIsOver(Dictionary.FLAG_YES_Y);
                        taocan.setStatus(Dictionary.TAOCAN_STATUS_WX);
                    }
                }
@@ -223,6 +231,7 @@
                    Date useInvalidTime = shoppingGoodsService.calInvalidTime(taocanInfo, 2, sysProjUse.getFailTime());
                    taocan.setFailTime(useInvalidTime);
                }
                taocan.setBalance(MoneyUtil.sub(taocan.getBalance(), bcxfje));
                sysProjUseDao.updateSurplusCount(taocan);
            }
@@ -238,7 +247,7 @@
        }
        // 设置项目总时长
        sysProjServices.setTotalTime(totalTime);
        sysProjServices.setMoney(hkPrice);
        sysProjServices.setMoney(new BigDecimal(hkPrice).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue());
        sysProjServicesDao.update(sysProjServices);
        return sysProjServices;
    }
@@ -256,6 +265,12 @@
        for (SysBeauticianState sysBeauticianState : sysProjServices.getServiceItems()) {
            SysProjUse sysProjUse = projUseService.findById(sysBeauticianState.getPuseId());
            //检查是否已经处于无效状态
            if (Dictionary.TAOCAN_STATUS_WX.equals(sysProjUse.getStatus())) {
                return new VerifyResult(true, sysProjUse.getProjName() + "项目已经失效");
            }
            int kjcs = 1;
            if (sysProjUse.getTaocanId() != null) {
                kjcs = sysBeauticianState.getCount() * sysProjUse.getDeductionNum();
@@ -442,7 +457,49 @@
            lastList.add(lastWork);
        }
        LastestWorkBeatuistaffDao.batchInsert(lastList);
        return sysProjServicesDao.update(projServices);
        int i = sysProjServicesDao.update(projServices);
        //根据配置是否完成自动配料
        if (busParameterSettingService.isSettingOpen(AppConstance.OPEN_SERVICE_ORDER_AUTO_BATCHING, checkProjServices.getCompanyId())){
            autoBatching(projServices);
        }
        return i;
    }
    /**
     * 根据配置是否完成自动配料
     *
     * @param projServices
     */
    private void autoBatching(SysProjServices projServices) {
        //获取最新的服务单信息
        projServices=findById(projServices.getId());
        List<SysBeauticianState> beauticianStateList = beauticianStateDao.selectBySerIds(projServices.getId());
        List<SysOutStoreItem> outStoreItemList = Lists.newLinkedList();
        beauticianStateList.stream().forEach(item -> {
            List<ShoppingGoodsAssemble> shoppingGoodsAssembles = goodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getProjId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP);
            if (CollUtil.isNotEmpty(shoppingGoodsAssembles)) {
                outStoreItemList.addAll(shoppingGoodsAssembles.stream().map(assemble -> {
                    SysOutStoreItem outStoreItem = new SysOutStoreItem();
                    outStoreItem.setSkuId(assemble.getAssembleGoodId());
                    outStoreItem.setAmount(Double.parseDouble(assemble.getTotal()+""));
                    outStoreItem.setRemark("自动配料");
                    return outStoreItem;
                }).collect(Collectors.toList()));
            }
        });
        //组合配料参数
        projServices.setOutStoreItem(outStoreItemList);
        //调用配料出库方法
        modifyPLProjServices(projServices);
    }
@@ -543,23 +600,28 @@
                if (sysProjUse.getSurplusCount() == 0) {
                    upProjUse.setIsOver(Dictionary.DELETED_N);
                    upProjUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
                    if (sysProjUse.getTaocanId() != null) {
                        //TODO 更新套餐状态为有效
                        SysProjUse taocanProjUse = sysProjUseDao.selectById(sysProjUse.getTaocanId());
                        taocanProjUse.setIsOver(Dictionary.DELETED_N);
                        taocanProjUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
                        if (Dictionary.FLAG_YES_Y.equals(taocanProjUse.getIsCourse())) {
                            if (StringUtils.isBlank(taocanProjUse.getIsInfinite()) || Dictionary.FLAG_NO_N.equals(taocanProjUse.getIsInfinite())) {
                                taocanProjUse.setSurplusCount(taocanProjUse.getSurplusCount() + beauticianState.getCount());
                            }
                        }
                        sysProjUseDao.update(taocanProjUse);
                    }
                }
                int surplus = sysProjUse.getSurplusCount() + beauticianState.getCount();
                upProjUse.setSurplusCount(surplus);
                upProjUse.setBalance(MoneyUtil.add(sysProjUse.getBalance(), sysProjUse.getPrice()));
                BigDecimal backBlance = new BigDecimal(sysProjUse.getPrice() * beauticianState.getCount());
                upProjUse.setBalance(MoneyUtil.add(sysProjUse.getBalance(), backBlance.doubleValue()));
                if (sysProjUse.getTaocanId() != null) {
                    SysProjUse taocanProjUse = sysProjUseDao.selectById(sysProjUse.getTaocanId());
                    taocanProjUse.setIsOver(Dictionary.DELETED_N);
                    taocanProjUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
                    taocanProjUse.setBalance(MoneyUtil.add(taocanProjUse.getBalance(), backBlance.doubleValue()));
                    if (Dictionary.FLAG_YES_Y.equals(taocanProjUse.getIsCourse())) {
                        if (StringUtils.isBlank(taocanProjUse.getIsInfinite()) || Dictionary.FLAG_NO_N.equals(taocanProjUse.getIsInfinite())) {
                            taocanProjUse.setSurplusCount(taocanProjUse.getSurplusCount() + beauticianState.getCount());
                        }
                    }
                    sysProjUseDao.update(taocanProjUse);
                }
                // 取消时,判断该项目之前是否有使用过,若使用过则非第一次使用,则不更新有效日期,若未使用表明此次为第一次使用,则更新有效日期为购买日期或统一失效日期
                List<SysBeauticianState> hasBeautician = beauticianStateDao.selectBeauticianStateByPuseIdAndNoStatus(beauticianState.getPuseId(), Dictionary.BEATUI_STATE_YYQX);
@@ -650,10 +712,9 @@
            //发送微信公众号提醒
            UniformMsgParam uniformMsgParam = new UniformMsgParam(projServices.getCompanyId(), UniformMsgParam.GZH_FWWC);
            uniformMsgParam.put("serviceId", projServices.getId());
            rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG + evn, uniformMsgParam.toJSONString());
            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
            //发送划扣短信提醒
            taiYanAliyunSmsService.sendHkNotice(projServices);
            return result;
        }
@@ -666,7 +727,7 @@
     */
    private void addVipScore(SysProjServices projServices) {
        SysVipInfo vipInfo =sysVipInfoDao.selectById(projServices.getVipId());
        SysVipInfo vipInfo = sysVipInfoDao.selectById(projServices.getVipId());
        List<SysBeauticianState> sysBeauticianStates = beauticianStateDao.selectBySerIds(projServices.getId());
@@ -716,9 +777,9 @@
            }
        }
        int selfScore =principalConsumScore[0]+giveConsumScore[0];
        int parentScore =principalConsumScore[1]+giveConsumScore[1];
        int topParentScore =principalConsumScore[2]+giveConsumScore[2];
        int selfScore = principalConsumScore[0] + giveConsumScore[0];
        int parentScore = principalConsumScore[1] + giveConsumScore[1];
        int topParentScore = principalConsumScore[2] + giveConsumScore[2];
        //添加自己的积分
        if (selfScore > 0) {
@@ -909,7 +970,7 @@
        if (CollectionUtils.isNotEmpty(projServicesVo.getOutStoreItem())) {
            BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, projServicesVo.getCompanyId());
            if(AppConstance.IS_Y.equals(manageStockSetting.getParamValue())){
            if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) {
                for (SysOutStoreItem item : projServicesVo.getOutStoreItem()) {
                    if (item.getAmount() != null && item.getAmount() > 0) {
                        return true;
@@ -1043,4 +1104,27 @@
        return flag;
    }
    @Override
    public int confirmServiceOrder(Long id) {
        SysProjServices services = new SysProjServices();
        services.setId(id);
        services.setState(Dictionary.BEATUI_STATE_DYY);
        int i = modify(services);
        if (i > 0) {
            //发送微信公众号提醒
            services = findById(services.getId());
            UniformMsgParam uniformMsgParam = new UniformMsgParam(services.getCompanyId(), UniformMsgParam.GZH_YYCG);
            uniformMsgParam.put("serviceId", services.getId());
            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
            taiYanAliyunSmsService.sendYycgNotice(services);
        }
        return i;
    }
}