|  |  |  | 
|---|
|  |  |  | package com.matrix.system.activity.service; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import cn.hutool.core.collection.CollUtil; | 
|---|
|  |  |  | import cn.hutool.core.date.DateUtil; | 
|---|
|  |  |  | import cn.hutool.core.util.ObjectUtil; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.matrix.system.activity.dao.ActivitySignAwardSetDao; | 
|---|
|  |  |  | import com.matrix.system.activity.dao.ActivitySignReceiveRecordDao; | 
|---|
|  |  |  | import com.matrix.system.activity.dao.ActivitySignWriteoffDao; | 
|---|
|  |  |  | import com.matrix.system.activity.dto.LogisticsSubmitDto; | 
|---|
|  |  |  | import com.matrix.system.activity.dto.SignWriteoffDto; | 
|---|
|  |  |  | import com.matrix.system.activity.dto.SignWriteoffListDto; | 
|---|
|  |  |  | import com.matrix.system.activity.dto.WriteoffCodeSubmitDto; | 
|---|
|  |  |  | import com.matrix.system.activity.entity.ActivitySignAwardSet; | 
|---|
|  |  |  | import com.matrix.system.activity.entity.ActivitySignReceiveRecord; | 
|---|
|  |  |  | import com.matrix.system.activity.entity.ActivitySignWriteoff; | 
|---|
|  |  |  | import com.matrix.system.activity.vo.LogisticsVo; | 
|---|
|  |  |  | import com.matrix.system.activity.vo.SignWriteoffListVo; | 
|---|
|  |  |  | import com.matrix.system.activity.vo.SignWriteoffVo; | 
|---|
|  |  |  | import com.matrix.system.activity.vo.ZjrVo; | 
|---|
|  |  |  | import com.matrix.system.common.bean.SysUsers; | 
|---|
|  |  |  | import com.matrix.system.common.bean.SystemDictionary; | 
|---|
|  |  |  | import com.matrix.system.common.constance.AppConstance; | 
|---|
|  |  |  | import com.matrix.system.common.dao.SystemDictionaryDao; | 
|---|
|  |  |  | import com.matrix.system.hive.action.util.QueryUtil; | 
|---|
|  |  |  | import com.matrix.system.hive.dao.SysVipInfoDao; | 
|---|
|  |  |  | import com.matrix.system.shopXcx.api.service.WxShopLogisticsQueryService; | 
|---|
|  |  |  | import com.matrix.system.shopXcx.bean.ShopActivities; | 
|---|
|  |  |  | import com.matrix.system.shopXcx.bean.ShopDeliveryInfo; | 
|---|
|  |  |  | import com.matrix.system.shopXcx.bean.ShopLogisticsInfo; | 
|---|
|  |  |  | import com.matrix.system.shopXcx.dao.ShopActivitiesDao; | 
|---|
|  |  |  | import com.matrix.system.shopXcx.dao.ShopDeliveryInfoDao; | 
|---|
|  |  |  | import com.matrix.system.shopXcx.dao.ShopLogisticsInfoDao; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @description 核销记录 | 
|---|
|  |  |  | 
|---|
|  |  |  | ActivitySignReceiveRecordDao activitySignReceiveRecordDao; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | SysVipInfoDao sysVipInfoDao; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | SystemDictionaryDao systemDictionaryDao; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | ShopDeliveryInfoDao shopDeliveryInfoDao; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | ShopLogisticsInfoDao shopLogisticsInfoDao; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WxShopLogisticsQueryService wxShopLogisticsQueryService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public IPage<SignWriteoffListVo> findSignWriteoffList(Page<SignWriteoffListVo> page, | 
|---|
|  |  |  | SignWriteoffListDto signWriteoffListDto) { | 
|---|
|  |  |  | 
|---|
|  |  |  | ShopActivities shopActivities = shopActivitiesDao.selectById(activitySignWriteoff.getActId()); | 
|---|
|  |  |  | signWriteoffVo.setHdmc(shopActivities.getActName()); | 
|---|
|  |  |  | signWriteoffVo.setHdbh(shopActivities.getActCode()); | 
|---|
|  |  |  | //获取收货地址信息 | 
|---|
|  |  |  | int awardWay = activitySignAwardSet.getAwardWay(); | 
|---|
|  |  |  | if(ActivitySignAwardSet.AWARDWAY_TWO == awardWay) { | 
|---|
|  |  |  | ActivitySignWriteoff activitySignWriteoffLogistics = activitySignWriteoffDao.selectById(writeoffId); | 
|---|
|  |  |  | Long receiveId = activitySignWriteoffLogistics.getReceiveId(); | 
|---|
|  |  |  | ActivitySignReceiveRecord activitySignReceiveRecordLogistic = activitySignReceiveRecordDao.selectById(receiveId); | 
|---|
|  |  |  | signWriteoffVo.setConsignee(activitySignReceiveRecordLogistic.getConsignee()); | 
|---|
|  |  |  | signWriteoffVo.setConsigneePhone(activitySignReceiveRecordLogistic.getConsigneePhone()); | 
|---|
|  |  |  | signWriteoffVo.setConsigneeAddress(activitySignReceiveRecordLogistic.getConsigneeAddress()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //物流跟踪 | 
|---|
|  |  |  | Integer logisticsId = activitySignWriteoffLogistics.getLogisticsId(); | 
|---|
|  |  |  | ShopDeliveryInfo shopDeliveryInfo = shopDeliveryInfoDao.selectById(logisticsId); | 
|---|
|  |  |  | if(ObjectUtil.isNotEmpty(shopDeliveryInfo)){ | 
|---|
|  |  |  | signWriteoffVo.setLogisticsNum(shopDeliveryInfo.getWaybillNo()); | 
|---|
|  |  |  | signWriteoffVo.setLogisticsCompany(shopDeliveryInfo.getLogisticsCompany()); | 
|---|
|  |  |  | //查看物流信息 | 
|---|
|  |  |  | wxShopLogisticsQueryService.selectLogisticsInfo(shopDeliveryInfo); | 
|---|
|  |  |  | List<ShopLogisticsInfo> shopLogisticsInfos = shopLogisticsInfoDao.selectByDelieryId(shopDeliveryInfo.getId()); | 
|---|
|  |  |  | if(CollUtil.isNotEmpty(shopLogisticsInfos)) { | 
|---|
|  |  |  | ArrayList<LogisticsVo> logisticsVos = new ArrayList<>(); | 
|---|
|  |  |  | for(ShopLogisticsInfo shopLogistics : shopLogisticsInfos) { | 
|---|
|  |  |  | LogisticsVo logisticsVo = new LogisticsVo(); | 
|---|
|  |  |  | logisticsVo.setContent(shopLogistics.getDescribe()); | 
|---|
|  |  |  | logisticsVo.setTimestamp(shopLogistics.getLogisticsTime()); | 
|---|
|  |  |  | logisticsVos.add(logisticsVo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | signWriteoffVo.setActivities(logisticsVos); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | result.putInMap("signWriteoffVo", signWriteoffVo); | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | 
|---|
|  |  |  | String writeOffCode = writeoffCodeSubmitDto.getWriteOffCode(); | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 验证核销码是不是匹配 | 
|---|
|  |  |  | * 只能核销一次 | 
|---|
|  |  |  | * 更新核销记录 | 
|---|
|  |  |  | * 更新领取记录 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | //验证核销码是不是匹配 | 
|---|
|  |  |  | ActivitySignWriteoff activitySignWriteoff = activitySignWriteoffDao.selectById(writeoffId); | 
|---|
|  |  |  | if(ActivitySignWriteoff.STATE_ONE != activitySignWriteoff.getState()){ | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_FAIL, "兑奖码已失效"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(ObjectUtil.isNotEmpty(activitySignWriteoff)) { | 
|---|
|  |  |  | String writeoffCodeReal = activitySignWriteoff.getWriteoffCode(); | 
|---|
|  |  |  | if(!writeoffCodeReal.equals(writeOffCode)) { | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_FAIL, "兑奖码无效"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //更新核销记录 | 
|---|
|  |  |  | //线下兑换失效 | 
|---|
|  |  |  | Long awardId = activitySignWriteoff.getAwardId(); | 
|---|
|  |  |  | ActivitySignAwardSet activitySignAwardSet = activitySignAwardSetDao.selectById(awardId); | 
|---|
|  |  |  | if(ActivitySignAwardSet.AWARDWAY_ONE == activitySignAwardSet.getAwardWay() | 
|---|
|  |  |  | || ActivitySignAwardSet.AWARDWAY_THREE == activitySignAwardSet.getAwardWay()){ | 
|---|
|  |  |  | Date prizeStartTime = activitySignAwardSet.getPrizeStartTime(); | 
|---|
|  |  |  | if(DateUtil.date().getTime() < prizeStartTime.getTime()){ | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_FAIL, "兑奖还没开始呢!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Date prizeEndTime = activitySignAwardSet.getPrizeEndTime(); | 
|---|
|  |  |  | if(DateUtil.date().getTime() > prizeEndTime.getTime()){ | 
|---|
|  |  |  | Long receiveId = activitySignWriteoff.getReceiveId(); | 
|---|
|  |  |  | ActivitySignReceiveRecord activitySignReceiveRecord = activitySignReceiveRecordDao.selectById(receiveId); | 
|---|
|  |  |  | if(ObjectUtil.isNotEmpty(activitySignReceiveRecord)){ | 
|---|
|  |  |  | activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_FIVE); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | activitySignReceiveRecordDao.updateById(activitySignReceiveRecord); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | activitySignWriteoff.setState(ActivitySignWriteoff.STATE_FOUR); | 
|---|
|  |  |  | activitySignWriteoffDao.updateById(activitySignWriteoff); | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_FAIL, "已超出兑奖结束时间!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //更新核销记录 | 
|---|
|  |  |  | activitySignWriteoff.setState(ActivitySignWriteoff.STATE_THREE); | 
|---|
|  |  |  | activitySignWriteoff.setWriteoffTime(new Date()); | 
|---|
|  |  |  | activitySignWriteoff.setWriteoffUser(sysUsers.getSuName()); | 
|---|
|  |  |  | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_SUCCESS, "核销成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public AjaxResult logisticsSubmit(LogisticsSubmitDto logisticsSubmitDto) { | 
|---|
|  |  |  | //设置用户公司ID | 
|---|
|  |  |  | QueryUtil.setQueryLimitCom(logisticsSubmitDto); | 
|---|
|  |  |  | SysUsers sysUsers = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); | 
|---|
|  |  |  | Long writeoffId = logisticsSubmitDto.getWriteoffId(); | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 更新领取记录表的收货信息和状态 | 
|---|
|  |  |  | * 更新核销记录表的状态和物流ID | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | ActivitySignWriteoff activitySignWriteoff = activitySignWriteoffDao.selectById(writeoffId); | 
|---|
|  |  |  | //新增一条物流信息 | 
|---|
|  |  |  | ShopDeliveryInfo shopDeliveryInfo = new ShopDeliveryInfo(); | 
|---|
|  |  |  | Long receiveId = activitySignWriteoff.getReceiveId(); | 
|---|
|  |  |  | SystemDictionary systemDictionary = systemDictionaryDao.selectByCode(logisticsSubmitDto.getKdgs()); | 
|---|
|  |  |  | if (ObjectUtil.isEmpty(systemDictionary)) { | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_FAIL, "没有找到物流公司信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | shopDeliveryInfo.setUserId(activitySignWriteoff.getUserId()); | 
|---|
|  |  |  | shopDeliveryInfo.setReceiveId(receiveId); | 
|---|
|  |  |  | shopDeliveryInfo.setReceiveAddress(logisticsSubmitDto.getShdz()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | shopDeliveryInfo.setLogisticsCompany(systemDictionary.getName()); | 
|---|
|  |  |  | shopDeliveryInfo.setLogisticsCompanyCode(systemDictionary.getCode()); | 
|---|
|  |  |  | shopDeliveryInfo.setDeliveryWay("物流配送"); | 
|---|
|  |  |  | shopDeliveryInfo.setLogisticsStatus(AppConstance.LOGISTICS_STATUS_OF_RECEIVE); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | shopDeliveryInfo.setWaybillNo(logisticsSubmitDto.getKddh()); | 
|---|
|  |  |  | shopDeliveryInfo.setUpdateBy(sysUsers.getSuName()); | 
|---|
|  |  |  | shopDeliveryInfo.setCreateBy(sysUsers.getSuName()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | shopDeliveryInfo.setDeliveryTime(new Date()); | 
|---|
|  |  |  | shopDeliveryInfoDao.insert(shopDeliveryInfo); | 
|---|
|  |  |  | //更新核销记录 | 
|---|
|  |  |  | activitySignWriteoff.setState(ActivitySignWriteoff.STATE_THREE); | 
|---|
|  |  |  | activitySignWriteoff.setWriteoffTime(new Date()); | 
|---|
|  |  |  | activitySignWriteoff.setWriteoffUser(sysUsers.getSuName()); | 
|---|
|  |  |  | activitySignWriteoff.setWriteoffUserid(sysUsers.getSuId()); | 
|---|
|  |  |  | activitySignWriteoff.setLogisticsId(shopDeliveryInfo.getId()); | 
|---|
|  |  |  | activitySignWriteoffDao.updateById(activitySignWriteoff); | 
|---|
|  |  |  | //更新领取记录 | 
|---|
|  |  |  | ActivitySignReceiveRecord activitySignReceiveRecord = activitySignReceiveRecordDao.selectById(receiveId); | 
|---|
|  |  |  | activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_FOUR); | 
|---|
|  |  |  | activitySignReceiveRecord.setConsignee(logisticsSubmitDto.getShr()); | 
|---|
|  |  |  | activitySignReceiveRecord.setConsigneeAddress(logisticsSubmitDto.getShdz()); | 
|---|
|  |  |  | activitySignReceiveRecord.setConsigneePhone(logisticsSubmitDto.getLxdh()); | 
|---|
|  |  |  | activitySignReceiveRecordDao.updateById(activitySignReceiveRecord); | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_SUCCESS, "发货成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|