package com.doumee.service.business.impl; 
 | 
  
 | 
import cn.hutool.core.lang.PatternPool; 
 | 
import cn.hutool.core.lang.Validator; 
 | 
import cn.hutool.core.util.ReUtil; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.haikang.model.HKConstants; 
 | 
import com.doumee.core.haikang.model.param.BaseResponse; 
 | 
import com.doumee.core.haikang.model.param.request.CardBingdingRequest; 
 | 
import com.doumee.core.haikang.model.param.request.CardDeletionRequest; 
 | 
import com.doumee.core.haikang.model.param.request.CardInfoRequest; 
 | 
import com.doumee.core.haikang.model.param.request.CardLossRequest; 
 | 
import com.doumee.core.haikang.service.HKService; 
 | 
import com.doumee.core.model.LoginUserInfo; 
 | 
import com.doumee.core.model.PageData; 
 | 
import com.doumee.core.model.PageWrap; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.DateUtil; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.dao.business.*; 
 | 
import com.doumee.dao.business.join.MemberCardJoinMapper; 
 | 
import com.doumee.dao.business.model.Company; 
 | 
import com.doumee.dao.business.model.Member; 
 | 
import com.doumee.dao.business.model.MemberCard; 
 | 
import com.doumee.service.business.MemberCardService; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.util.*; 
 | 
  
 | 
/** 
 | 
 * 用户卡片绑定信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
public class MemberCardServiceImpl implements MemberCardService { 
 | 
    @Autowired 
 | 
    private MemberRoleMapper memberRoleMapper; 
 | 
    @Autowired 
 | 
    private DeviceRoleMapper deviceRoleMapper; 
 | 
    @Autowired 
 | 
    private DeviceMapper deviceMapper; 
 | 
    @Autowired 
 | 
    private EmpowerMapper empowerMapper; 
 | 
    @Autowired 
 | 
    private MemberCardMapper memberCardMapper; 
 | 
    @Autowired 
 | 
    private MemberMapper memberMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private MemberCardJoinMapper memberCardJoinMapper; 
 | 
  
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {BusinessException.class,Exception.class}) 
 | 
    public Integer create(MemberCard memberCard) { 
 | 
        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Objects.isNull(memberCard.getMemberId()) 
 | 
        || StringUtils.isBlank(memberCard.getCode())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        if(memberCard.getCode().length()<8){ 
 | 
           throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"卡号需要大于8位"); 
 | 
        } 
 | 
        memberCard.setCreator(userInfo.getId()); 
 | 
        memberCard.setCreateDate(new Date()); 
 | 
        memberCard.setStatus(Constants.ONE); 
 | 
        memberCard.setIsdeleted(Constants.ZERO); 
 | 
        Member member = memberMapper.selectById(memberCard.getMemberId()); 
 | 
        if(Objects.isNull(member)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到用户信息"); 
 | 
        } 
 | 
        CardBingdingRequest param = new CardBingdingRequest(); 
 | 
        if(member.getStartTime() !=null && member.getEndTime()!=null){ 
 | 
            param.setStartDate(DateUtil.getISO8601Timestamp(member.getStartTime())); 
 | 
            param.setEndDate(DateUtil.getISO8601Timestamp(member.getEndTime())); 
 | 
        } 
 | 
        CardInfoRequest cr = new CardInfoRequest(); 
 | 
        cr.setCardNo(memberCard.getCode()); 
 | 
        cr.setOrgIndexCode(member.getHkOrgId()); 
 | 
        cr.setPersonId(member.getHkId()); 
 | 
        cr.setCardType(memberCard.getType()); 
 | 
        List<CardInfoRequest> cardList = new ArrayList<>(); 
 | 
        cardList.add(cr); 
 | 
        param.setCardList(cardList); 
 | 
        BaseResponse response = HKService.cardBingding(param); 
 | 
        if(response==null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) || response.getData()==null){ 
 | 
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),response.getMsg()); 
 | 
        } 
 | 
        memberCard.setHkStatus(Constants.ONE); 
 | 
        memberCardMapper.insert(memberCard); 
 | 
        //更新用户权限 
 | 
        dealMemberRoleEmpower(memberMapper.selectById(memberCard.getMemberId())); 
 | 
        return memberCard.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        memberCardMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(MemberCard memberCard) { 
 | 
        UpdateWrapper<MemberCard> deleteWrapper = new UpdateWrapper<>(memberCard); 
 | 
        memberCardMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        memberCardMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(MemberCard memberCard) { 
 | 
        memberCardMapper.updateById(memberCard); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 批量挂失/解挂 
 | 
     * @param memberCards 实体集 
 | 
     * @param type 0=挂失;1=解挂 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {BusinessException.class,Exception.class}) 
 | 
    public void updateByIdInBatch(List<MemberCard> memberCards,Integer type) { 
 | 
        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if (CollectionUtils.isEmpty(memberCards)) { 
 | 
            return; 
 | 
        } 
 | 
        CardLossRequest param = new CardLossRequest(); 
 | 
        List<CardDeletionRequest> cardList = new ArrayList(); 
 | 
        for (MemberCard memberCard: memberCards) { 
 | 
            MemberCard model = memberCardMapper.selectById(memberCard.getId()); 
 | 
            if(type.equals(Constants.ZERO)){ 
 | 
                //挂失操作 
 | 
                if(!model.getStatus().equals(Constants.MemberCard.normal)){ 
 | 
                    continue; 
 | 
                } 
 | 
            }else{ 
 | 
                //解挂操作 
 | 
                if(!model.getStatus().equals(Constants.MemberCard.loss)){ 
 | 
                    continue; 
 | 
                } 
 | 
            } 
 | 
            CardDeletionRequest cardDeletionRequest = this.dealCardData(model); 
 | 
            memberCard.setEditDate(new Date()); 
 | 
            memberCard.setEditor(userInfo.getId()); 
 | 
            this.updateById(memberCard); 
 | 
            cardList.add(cardDeletionRequest); 
 | 
            param.setCardList(cardList); 
 | 
        } 
 | 
        BaseResponse response = new BaseResponse(); 
 | 
        if(type.equals(Constants.ZERO)){ 
 | 
            response = HKService.cardLoss(param); 
 | 
        }else{ 
 | 
            response = HKService.cardUnLoss(param); 
 | 
        } 
 | 
        if(response==null 
 | 
                ||!StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),response.getMsg()); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    public CardDeletionRequest dealCardData(MemberCard model){ 
 | 
        if(model.getType().equals(Constants.ZERO)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"卡号:" +model.getCode() + " 为虚拟卡无法进行该操作"); 
 | 
        } 
 | 
        Member member = memberMapper.selectById(model.getMemberId()); 
 | 
        if(Objects.isNull(member)||Objects.isNull(member.getHkId())){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"卡号:" +model.getCode() + " 对应人员海康信息异常"); 
 | 
        } 
 | 
        dealMemberRoleEmpower(member); 
 | 
        CardDeletionRequest cardDeletionRequest = new CardDeletionRequest(); 
 | 
        cardDeletionRequest.setCardNumber(model.getCode()); 
 | 
        cardDeletionRequest.setPersonId(member.getHkId()); 
 | 
        return cardDeletionRequest; 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class, BusinessException.class}) 
 | 
    public void updateRefundCard(MemberCard memberCard) { 
 | 
        MemberCard model = memberCardMapper.selectById(memberCard.getId()); 
 | 
        CardDeletionRequest cardDeletionRequest = this.dealCardData(model); 
 | 
        memberCardMapper.updateById(memberCard); 
 | 
        BaseResponse response = HKService.cardDeletion(cardDeletionRequest); 
 | 
        if(response==null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),response.getMsg()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public MemberCard findById(Integer id) { 
 | 
        return memberCardMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public MemberCard findOne(MemberCard memberCard) { 
 | 
        QueryWrapper<MemberCard> wrapper = new QueryWrapper<>(memberCard); 
 | 
        return memberCardMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<MemberCard> findList(MemberCard memberCard) { 
 | 
        QueryWrapper<MemberCard> wrapper = new QueryWrapper<>(memberCard); 
 | 
        wrapper.lambda().eq(MemberCard::getIsdeleted, Constants.ZERO); 
 | 
        wrapper.lambda().eq(MemberCard::getHkStatus, Constants.ONE); 
 | 
        // 启用和退卡的卡号 
 | 
        wrapper.lambda().and(param -> param.eq(MemberCard::getStatus,Constants.ZERO). 
 | 
                         or().eq(MemberCard::getStatus,Constants.TWO)); 
 | 
        return memberCardMapper.selectList(wrapper); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 更细人员全部门禁权限 
 | 
     * @param member 
 | 
     */ 
 | 
    private void dealMemberRoleEmpower(Member member ) { 
 | 
        //处理新增的人员卡片数据(与海康同步) 
 | 
        List<MemberCard> cards = HkSyncOrgUserToHKServiceImpl.getNormalCardList(member,memberCardMapper); 
 | 
        HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(cards,member,deviceRoleMapper,empowerMapper,deviceMapper); 
 | 
    } 
 | 
    /** 
 | 
     * 更细人员全部门禁权限 
 | 
     * @param 
 | 
     */ 
 | 
    @Override 
 | 
    public void dealMemberRoleEmpowerById(Integer memberId ) { 
 | 
        //处理新增的人员卡片数据(与海康同步) 
 | 
        Member member = memberMapper.selectById(memberId); 
 | 
        if(member==null){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        List<MemberCard> cards = HkSyncOrgUserToHKServiceImpl.getNormalCardList(member,memberCardMapper); 
 | 
        HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(cards,member,deviceRoleMapper,empowerMapper,deviceMapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PageData<MemberCard> findPage(PageWrap<MemberCard> pageWrap) { 
 | 
        IPage<MemberCard> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<MemberCard> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        if (pageWrap.getModel().getId() != null) { 
 | 
            queryWrapper.eq(MemberCard::getId, pageWrap.getModel().getId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreator() != null) { 
 | 
            queryWrapper.eq(MemberCard::getCreator, pageWrap.getModel().getCreator()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreateDate() != null) { 
 | 
            queryWrapper.ge(MemberCard::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); 
 | 
            queryWrapper.le(MemberCard::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditor() != null) { 
 | 
            queryWrapper.eq(MemberCard::getEditor, pageWrap.getModel().getEditor()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditDate() != null) { 
 | 
            queryWrapper.ge(MemberCard::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); 
 | 
            queryWrapper.le(MemberCard::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getIsdeleted() != null) { 
 | 
            queryWrapper.eq(MemberCard::getIsdeleted, pageWrap.getModel().getIsdeleted()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getRemark() != null) { 
 | 
            queryWrapper.eq(MemberCard::getRemark, pageWrap.getModel().getRemark()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getMemberId() != null) { 
 | 
            queryWrapper.eq(MemberCard::getMemberId, pageWrap.getModel().getMemberId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCode() != null) { 
 | 
            queryWrapper.eq(MemberCard::getCode, pageWrap.getModel().getCode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getPassward() != null) { 
 | 
            queryWrapper.eq(MemberCard::getPassward, pageWrap.getModel().getPassward()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getHkId() != null) { 
 | 
            queryWrapper.eq(MemberCard::getHkId, pageWrap.getModel().getHkId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getHkStatus() != null) { 
 | 
            queryWrapper.eq(MemberCard::getHkStatus, pageWrap.getModel().getHkStatus()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getHkDate() != null) { 
 | 
            queryWrapper.ge(MemberCard::getHkDate, Utils.Date.getStart(pageWrap.getModel().getHkDate())); 
 | 
            queryWrapper.le(MemberCard::getHkDate, Utils.Date.getEnd(pageWrap.getModel().getHkDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getStatus() != null) { 
 | 
            queryWrapper.eq(MemberCard::getStatus, pageWrap.getModel().getStatus()); 
 | 
        } 
 | 
        queryWrapper.orderByDesc(MemberCard::getCreateDate); 
 | 
  
 | 
        //是否是数字 
 | 
        boolean number = Validator.isNumber(pageWrap.getModel().getKeyword()); 
 | 
        //是否包含中文 
 | 
        boolean b = Validator.hasChinese(pageWrap.getModel().getKeyword()); 
 | 
        //是否包含英文 
 | 
        boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyword()); 
 | 
  
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,MemberCard::getMemberId) 
 | 
                    .leftJoin(Company.class,Company::getId,Member::getCompanyId); 
 | 
        queryWrapper.selectAll(MemberCard.class) 
 | 
                    .selectAs(Member::getName,MemberCard::getMemberName) 
 | 
                    .selectAs(Member::getPhone,MemberCard::getMemberPhone) 
 | 
                    .selectAs(Member::getType,MemberCard::getMemberType) 
 | 
                    .selectAs(Company::getName,MemberCard::getCompanyName) 
 | 
                    .eq(MemberCard::getIsdeleted,Constants.ZERO); 
 | 
        queryWrapper.like(Objects.nonNull(pageWrap.getModel().getCode()),MemberCard::getCode,pageWrap.getModel().getCode()) 
 | 
                    .eq(Objects.nonNull(pageWrap.getModel().getStatus()),MemberCard::getStatus,pageWrap.getModel().getStatus()) 
 | 
                    .eq(Objects.nonNull(pageWrap.getModel().getStatus()),MemberCard::getStatus,pageWrap.getModel().getStatus()) 
 | 
                .   eq(Objects.nonNull(pageWrap.getModel().getMemberType()),Member::getType,pageWrap.getModel().getMemberType()) 
 | 
                    .like(number,Member::getPhone,pageWrap.getModel().getKeyword()) 
 | 
                    .like((b||hasWord),Member::getName,pageWrap.getModel().getKeyword()); 
 | 
        IPage<MemberCard> memberCardIPage = memberCardJoinMapper.selectJoinPage(page, MemberCard.class,queryWrapper); 
 | 
        if(null != memberCardIPage && memberCardIPage.getRecords().size() > 0) { 
 | 
            memberCardIPage.setRecords(getDataPackage(memberCardIPage)); 
 | 
        } 
 | 
        return PageData.from(memberCardIPage); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(MemberCard memberCard) { 
 | 
        QueryWrapper<MemberCard> wrapper = new QueryWrapper<>(memberCard); 
 | 
        return memberCardMapper.selectCount(wrapper); 
 | 
    } 
 | 
  
 | 
    private List<MemberCard> getDataPackage(IPage<MemberCard> memberCardIPage) { 
 | 
        List<MemberCard> newDataList = new ArrayList<>(); 
 | 
        memberCardIPage.getRecords().stream().forEach(obj->{ 
 | 
            if(null != obj.getMemberType()) { 
 | 
                if(Constants.equalsInteger(obj.getMemberType(),Constants.ZERO)) { 
 | 
                    obj.setMemberTypeName(Constants.Status.LW_FK.getDes()); 
 | 
                }else if(Constants.equalsInteger(obj.getMemberType(),Constants.ONE)){ 
 | 
                    obj.setMemberTypeName(Constants.Status.PT_FK.getDes()); 
 | 
                }else if(Constants.equalsInteger(obj.getMemberType(),Constants.TWO)){ 
 | 
                    obj.setMemberTypeName(Constants.Status.NB_FK.getDes()); 
 | 
                } 
 | 
            } 
 | 
            if(null != obj.getStatus()) { 
 | 
                if(Constants.equalsInteger(obj.getStatus(),Constants.ZERO)) { 
 | 
                    obj.setStatusName(HKConstants.CardStatus.DISABLE.getName()); 
 | 
                }else if(Constants.equalsInteger(obj.getStatus(),Constants.ONE)) { 
 | 
                    obj.setStatusName(HKConstants.CardStatus.ENABLE.getName()); 
 | 
                }else if(Constants.equalsInteger(obj.getStatus(),Constants.TWO)) { 
 | 
                    obj.setStatusName(HKConstants.CardStatus.REFUNDCARD.getName()); 
 | 
                }else if(Constants.equalsInteger(obj.getStatus(),Constants.THREE)) { 
 | 
                    obj.setStatusName(HKConstants.CardStatus.LOSS.getName()); 
 | 
                } 
 | 
            } 
 | 
            if(null != obj.getMemberType()) { 
 | 
                if(Constants.equalsInteger(obj.getMemberType(),Constants.ONE)) { 
 | 
                    obj.setCardTypeName(HKConstants.CardStatus.IC.getName()); 
 | 
                }else if(Constants.equalsInteger(obj.getMemberType(),Constants.TWO)) { 
 | 
                    obj.setCardTypeName(HKConstants.CardStatus.CPU.getName()); 
 | 
                }else if(Constants.equalsInteger(obj.getMemberType(),Constants.THREE)) { 
 | 
                    obj.setCardTypeName(HKConstants.CardStatus.YJLCARD.getName()); 
 | 
                }else if(Constants.equalsInteger(obj.getMemberType(),Constants.FOUR)) { 
 | 
                    obj.setCardTypeName(HKConstants.CardStatus.MCARD.getName()); 
 | 
                } 
 | 
            } 
 | 
            newDataList.add(obj); 
 | 
        }); 
 | 
        return newDataList; 
 | 
    } 
 | 
} 
 |