添加线索撤回功能

master
bynt 8 months ago
parent f0f950f271
commit 9531bfd7aa

@ -230,15 +230,18 @@ public interface SysUserMapper extends ExtendMapper<SysUser> {
* *
* *
* @param userId * @param userId
* @param distributeNum
* @param num * @param num
* @return * @return
*/ */
int operationsNum(@Param("userId") Long userId, @Param("num") Integer num); int operationsNum(@Param("userId") Long userId,@Param("distributeNum") Integer distributeNum, @Param("num") Integer num);
/** /**
* *
*
* @param userId * @param userId
* @param distributeNum
* @return * @return
*/ */
int operationsDistributeNum(Long userId); int operationsDistributeNum(@Param("userId") Long userId,@Param("distributeNum") Integer distributeNum);
} }

@ -229,4 +229,11 @@ public interface SysUserService extends ExtendService<SysUser> {
* *
*/ */
Boolean deductionQuantity(Long userId, String storeName); Boolean deductionQuantity(Long userId, String storeName);
/**
*
* @param assignedBy
* @return
*/
Boolean addQuantity(Long assignedBy);
} }

@ -547,19 +547,40 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
SysUserBalanceVO balanceVO = baseMapper.userBalance(userId); SysUserBalanceVO balanceVO = baseMapper.userBalance(userId);
if (!adminUserChecker.isAdminUser(balanceVO.getWhichUserId())) { if (!adminUserChecker.isAdminUser(balanceVO.getWhichUserId())) {
SysUser sysUser = baseMapper.selectById(balanceVO.getWhichUserId()); SysUser sysUser = baseMapper.selectById(balanceVO.getWhichUserId());
if (sysUser.getChargingStatus() == 1) { if (sysUser.getChargingStatus() == DefaultNumberConstants.ONE_NUMBER) {
Integer residueClueNum = balanceVO.getResidueClueNum(); Integer residueClueNum = balanceVO.getResidueClueNum();
if (residueClueNum < 1) { if (residueClueNum < DefaultNumberConstants.ONE_NUMBER) {
if (StringUtils.isNotBlank(storeName)) { if (StringUtils.isNotBlank(storeName)) {
throw new BadRequestException("用户" + balanceVO.getUsername() + "\n店铺:" + storeName + "\n可用数量不足!"); throw new BadRequestException("用户" + balanceVO.getUsername() + "\n店铺:" + storeName + "\n可用数量不足!");
} else { } else {
throw new BadRequestException("用户" + balanceVO.getUsername() + "\n可用数量不足!"); throw new BadRequestException("用户" + balanceVO.getUsername() + "\n可用数量不足!");
} }
} }
return baseMapper.operationsNum(userId, balanceVO.getResidueClueNum() - 1) > 0; // 余额与数量进行增加
return baseMapper.operationsNum(userId, balanceVO.getDistributeNum() + DefaultNumberConstants.ONE_NUMBER,
balanceVO.getResidueClueNum() - DefaultNumberConstants.ONE_NUMBER) > DefaultNumberConstants.ZERO_NUMBER;
}
// 对数量进行增加
if (sysUser.getChargingStatus() == DefaultNumberConstants.ZERO_NUMBER) {
return baseMapper.operationsDistributeNum(userId, balanceVO.getDistributeNum() + DefaultNumberConstants.ONE_NUMBER) > DefaultNumberConstants.ZERO_NUMBER;
}
}
return Boolean.FALSE;
} }
if (sysUser.getChargingStatus() == 0) {
return baseMapper.operationsDistributeNum(userId) > 0; @Override
public Boolean addQuantity(Long userId) {
SysUserBalanceVO balanceVO = baseMapper.userBalance(userId);
if (!adminUserChecker.isAdminUser(balanceVO.getWhichUserId())) {
SysUser sysUser = baseMapper.selectById(balanceVO.getWhichUserId());
if (sysUser.getChargingStatus() == DefaultNumberConstants.ONE_NUMBER) {
// 余额与数量进行增加
return baseMapper.operationsNum(userId, balanceVO.getDistributeNum() - DefaultNumberConstants.ONE_NUMBER,
balanceVO.getResidueClueNum() + DefaultNumberConstants.ONE_NUMBER) > DefaultNumberConstants.ZERO_NUMBER;
}
// 对数量进行增加
if (sysUser.getChargingStatus() == DefaultNumberConstants.ZERO_NUMBER) {
return baseMapper.operationsDistributeNum(userId, balanceVO.getDistributeNum() - DefaultNumberConstants.ONE_NUMBER) > 0;
} }
} }
return Boolean.FALSE; return Boolean.FALSE;

@ -171,12 +171,16 @@
</select> </select>
<update id="operationsNum"> <update id="operationsNum">
UPDATE sys_user SET distribute_num = distribute_num + 1,residue_clue_num = #{num} WHERE user_id = #{userId} UPDATE sys_user
SET distribute_num = #{distributeNum},
residue_clue_num = #{num}
WHERE user_id = #{userId};
</update> </update>
<update id="operationsDistributeNum"> <update id="operationsDistributeNum">
UPDATE sys_user SET distribute_num = distribute_num + 1 WHERE user_id = #{userId} UPDATE sys_user SET distribute_num = #{distributeNum} WHERE user_id = #{userId}
</update> </update>
<select id="listSelectSonListData" resultType="com.baiye.domain.SelectData"> <select id="listSelectSonListData" resultType="com.baiye.domain.SelectData">

@ -4,8 +4,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/** /**
* VO * VO
@ -31,4 +29,9 @@ public class SysUserBalanceVO implements Serializable {
@Schema(title = "剩余线索数量") @Schema(title = "剩余线索数量")
private Integer residueClueNum; private Integer residueClueNum;
@Schema(title = "操作数量")
private Integer distributeNum;
} }

@ -113,6 +113,9 @@ public class CustomController {
return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "审核失败"); return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "审核失败");
} }
private void setQueryQo(CustomQo customQo) { private void setQueryQo(CustomQo customQo) {
Integer salesmanType = customQo.getSalesmanType(); Integer salesmanType = customQo.getSalesmanType();
// 查询属于自己的信息 // 查询属于自己的信息
@ -137,4 +140,15 @@ public class CustomController {
} }
} }
} }
@GetMapping("/recallForm")
@Operation(summary = "表单撤回")
public R<Boolean> recallForm(Long id) {
Boolean result = customService.recallFormById(id);
return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.LOGIC_CHECK_ERROR, "表单撤回失败");
}
} }

@ -82,4 +82,15 @@ public interface ClueMapper extends ExtendMapper<ClueEntity> {
List<HomePageDTO> distributorsAssignedClueByTime(@Param("qo") HomePageQo homePageQo); List<HomePageDTO> distributorsAssignedClueByTime(@Param("qo") HomePageQo homePageQo);
List<Long> findCustomId(@Param("assignedBy") Long assignedBy, @Param("createBy")Long createBy); List<Long> findCustomId(@Param("assignedBy") Long assignedBy, @Param("createBy")Long createBy);
/**
* 线id
*
* @param id
* @param createBy
* @param num
* @return
*/
List<ClueVO> findCustomIdAndCreate(@Param("customId") Long id, @Param("createBy") Long createBy,@Param("num") Integer num);
} }

@ -65,4 +65,21 @@ public interface ClueService extends ExtendService<ClueEntity> {
* @param createBy * @param createBy
*/ */
List<Long> findCustomId(Long assignedBy, Long createBy); List<Long> findCustomId(Long assignedBy, Long createBy);
/**
* id
* @param companyId
* @param phone
* @return
*
*/
List<ClueEntity> findByCompanyIdAndNid(Long companyId, String phone);
/**
* id
* @param id
* @param currentUserId
* @return
*/
List<ClueVO> findCustomIdAndCreate(Long id, Long currentUserId);
} }

@ -87,4 +87,11 @@ public interface CustomService extends ExtendService<CustomEntity> {
* @return * @return
*/ */
Boolean updateByNid(String phone, String remark); Boolean updateByNid(String phone, String remark);
/**
*
* @param id
* @return
*/
Boolean recallFormById(Long id);
} }

@ -3,11 +3,13 @@ package com.baiye.modules.distribute.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants; import com.baiye.constant.DefaultNumberConstants;
import com.baiye.domain.PageParam; import com.baiye.domain.PageParam;
import com.baiye.domain.PageResult; import com.baiye.domain.PageResult;
import com.baiye.exception.BadRequestException;
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.baiye.modules.distribute.converter.ClueConverter; import com.baiye.modules.distribute.converter.ClueConverter;
import com.baiye.modules.distribute.dto.ClueDTO; import com.baiye.modules.distribute.dto.ClueDTO;
@ -171,6 +173,9 @@ public class ClueServiceImpl extends ExtendServiceImpl<ClueMapper, ClueEntity> i
public ClueVO details(Long clueId, ClueQo qo) { public ClueVO details(Long clueId, ClueQo qo) {
ClueVO clueVO = new ClueVO(); ClueVO clueVO = new ClueVO();
ClueEntity clueEntity = baseMapper.selectById(clueId); ClueEntity clueEntity = baseMapper.selectById(clueId);
if (ObjectUtil.isNull(clueEntity) || ObjectUtil.isNull(clueEntity.getClueId())){
throw new BadRequestException("该线索不存在或已被撤回!");
}
clueEntity.setNid(AESUtils.decrypt(clueEntity.getNid(), securityProperties.getPasswordSecretKey())); clueEntity.setNid(AESUtils.decrypt(clueEntity.getNid(), securityProperties.getPasswordSecretKey()));
BeanUtils.copyProperties(clueEntity, clueVO); BeanUtils.copyProperties(clueEntity, clueVO);
clueVO.setClueId(clueEntity.getClueId().toString()); clueVO.setClueId(clueEntity.getClueId().toString());
@ -238,4 +243,16 @@ public class ClueServiceImpl extends ExtendServiceImpl<ClueMapper, ClueEntity> i
return baseMapper.findCustomId(assignedBy, createBy); return baseMapper.findCustomId(assignedBy, createBy);
} }
@Override
public List<ClueEntity> findByCompanyIdAndNid(Long companyId, String phone) {
return baseMapper.selectList(Wrappers.lambdaQuery(ClueEntity.class).eq
(ClueEntity::getCompanyId, companyId).eq(ClueEntity::getNid, phone).eq
(ClueEntity::getDeleted,DefaultNumberConstants.ZERO_NUMBER));
}
@Override
public List<ClueVO> findCustomIdAndCreate(Long id, Long createBy) {
return baseMapper.findCustomIdAndCreate(id, createBy, DefaultNumberConstants.ZERO_NUMBER);
}
} }

@ -1,6 +1,7 @@
package com.baiye.modules.distribute.service.impl; package com.baiye.modules.distribute.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.StrPool; import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
@ -12,6 +13,7 @@ import com.baiye.exception.BadRequestException;
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.baiye.modules.distribute.converter.CustomConverter; import com.baiye.modules.distribute.converter.CustomConverter;
import com.baiye.modules.distribute.dto.*; import com.baiye.modules.distribute.dto.*;
import com.baiye.modules.distribute.entity.ClueEntity;
import com.baiye.modules.distribute.entity.CustomEntity; import com.baiye.modules.distribute.entity.CustomEntity;
import com.baiye.modules.distribute.entity.CustomStoreEntity; import com.baiye.modules.distribute.entity.CustomStoreEntity;
import com.baiye.modules.distribute.entity.StoreEntity; import com.baiye.modules.distribute.entity.StoreEntity;
@ -183,6 +185,10 @@ public class CustomServiceImpl extends ExtendServiceImpl<CustomMapper, CustomEnt
if (ObjectUtil.isNotNull(customEntity) || customEntity.getEnrollStatus() != DefaultNumberConstants.TWO_NUMBER) { if (ObjectUtil.isNotNull(customEntity) || customEntity.getEnrollStatus() != DefaultNumberConstants.TWO_NUMBER) {
String phone = AESUtils.encrypt(customEntity.getCustomNid(), securityProperties.getPasswordSecretKey()); String phone = AESUtils.encrypt(customEntity.getCustomNid(), securityProperties.getPasswordSecretKey());
Long companyId = customEntity.getCompanyId(); Long companyId = customEntity.getCompanyId();
List<ClueEntity> clueEntityList = clueService.findByCompanyIdAndNid(companyId, phone);
if (CollUtil.isNotEmpty(clueEntityList)) {
throw new BadRequestException("该资源已分发,请勿重复操作!");
}
if (status == 0) { if (status == 0) {
Gson gson = new Gson(); Gson gson = new Gson();
AddressDTO address = new AddressDTO(); AddressDTO address = new AddressDTO();
@ -310,13 +316,47 @@ public class CustomServiceImpl extends ExtendServiceImpl<CustomMapper, CustomEnt
} }
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean recallFormById(Long id) {
// 偏移十分钟
CustomEntity custom = this.getById(id);
DateTime offsetMinute = DateUtil.offsetMinute(DateUtil.date(), -DefaultNumberConstants.TEN_NUMBER);
if (ObjectUtil.isNull(custom) ||
custom.getEnrollStatus() != DefaultNumberConstants.TWO_NUMBER ||
custom.getDistributeTime().before(offsetMinute)) {
throw new BadRequestException("已超出最大撤回时间!");
}
// 客户id查询线索
List<ClueVO> clueList = clueService.findCustomIdAndCreate(id, SecurityUtils.getCurrentUserId());
if (ObjectUtil.isNull(custom) || CollUtil.isEmpty(clueList)) {
throw new BadRequestException("该线索不存在或已分发!");
}
for (ClueVO vo : clueList) {
// 回退余额
Boolean result = sysUserService.addQuantity(vo.getAssignedBy());
if (result.equals(Boolean.TRUE)) {
// 删除线索
clueService.removeById(Long.parseLong(vo.getClueId()));
}
}
// 修改状态
// customStoreService.deleteByCustomId(id);
custom.setUpdateTime(LocalDateTime.now());
custom.setSalesmanUserId(Lists.newArrayList());
custom.setEnrollStatus(DefaultNumberConstants.ONE_NUMBER);
return SqlHelper.retBool(baseMapper.updateById(custom));
}
private CustomEntity getCustomEntity(CustomEntity entity, Long companyId, String username) { private CustomEntity getCustomEntity(CustomEntity entity, Long companyId, String username) {
String code = LetterConst.D.concat(StrPool.DASHED.concat(DateUtil.format(DateUtil.date(), DateConst.YYYY_MM_DD))); String code = LetterConst.D.concat(StrPool.DASHED.concat(DateUtil.format(DateUtil.date(), DateConst.YYYY_MM_DD)));
String maxCode = baseMapper.selectMaxBatchNoByCompanyId(code, companyId); String maxCode = baseMapper.selectMaxBatchNoByCompanyId(code, companyId);
// 拼接编号 // 拼接编号
String newCode = StringUtils.isNotBlank(maxCode) ? String newCode = StringUtils.isNotBlank(maxCode) ?
code.concat(SerialCode.getNum(Integer.parseInt code.concat(SerialCode.getNum(Integer.parseInt
(maxCode.substring(10)))) : code.concat(LetterConst.ONE); (maxCode.substring(DefaultNumberConstants.TEN_NUMBER)))) : code.concat(LetterConst.ONE);
entity.setBatchNo(newCode); entity.setBatchNo(newCode);
entity.setCompanyId(companyId); entity.setCompanyId(companyId);
entity.setEnterName(username); entity.setEnterName(username);
@ -338,10 +378,13 @@ public class CustomServiceImpl extends ExtendServiceImpl<CustomMapper, CustomEnt
String detailAddress = customDTO.getDetailAddress(); String detailAddress = customDTO.getDetailAddress();
String radius = customDTO.getRadius(); String radius = customDTO.getRadius();
List<CustomStoreEntity> customStoreEntities = customDTO.getCustomStoreEntities(); List<CustomStoreEntity> customStoreEntities = customDTO.getCustomStoreEntities();
if (StringUtils.isBlank(economize) || StringUtils.isBlank(market)) throw new BadRequestException("省市不能为空"); if (StringUtils.isBlank(economize) || StringUtils.isBlank(market))
throw new BadRequestException("省市不能为空");
if (StringUtils.isBlank(detailAddress)) throw new BadRequestException("详细地址不能为空"); if (StringUtils.isBlank(detailAddress)) throw new BadRequestException("详细地址不能为空");
if (StringUtils.isBlank(radius)) throw new BadRequestException("半径不能为空"); if (StringUtils.isBlank(radius)) throw new BadRequestException("半径不能为空");
if (CollUtil.isEmpty(customStoreEntities)) throw new BadRequestException("门店信息不能为空"); if (CollUtil.isEmpty(customStoreEntities)) throw new BadRequestException("门店信息不能为空");
} }
} }
} }

@ -105,4 +105,12 @@
and create_by = #{createBy} and create_by = #{createBy}
group by custom_id group by custom_id
</select> </select>
<select id="findCustomIdAndCreate" resultType="com.baiye.modules.distribute.vo.ClueVO">
SELECT
<include refid="Base_Alias_Column_List"/>
FROM tb_clue ce
where ce.custom_id = #{customId}
and ce.create_by = #{createBy}
and ce.deleted = #{num}
</select>
</mapper> </mapper>

Loading…
Cancel
Save