添加线索撤回功能

master
bynt 8 months ago
parent f0f950f271
commit 9531bfd7aa

@ -230,15 +230,18 @@ public interface SysUserMapper extends ExtendMapper<SysUser> {
*
*
* @param userId
* @param distributeNum
* @param num
* @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 distributeNum
* @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);
/**
*
* @param assignedBy
* @return
*/
Boolean addQuantity(Long assignedBy);
}

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

@ -171,12 +171,16 @@
</select>
<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 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>
<select id="listSelectSonListData" resultType="com.baiye.domain.SelectData">

@ -4,8 +4,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
* VO
@ -31,4 +29,9 @@ public class SysUserBalanceVO implements Serializable {
@Schema(title = "剩余线索数量")
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, "审核失败");
}
private void setQueryQo(CustomQo customQo) {
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<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
*/
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
*/
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.convert.Convert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.domain.PageParam;
import com.baiye.domain.PageResult;
import com.baiye.exception.BadRequestException;
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.baiye.modules.distribute.converter.ClueConverter;
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) {
ClueVO clueVO = new ClueVO();
ClueEntity clueEntity = baseMapper.selectById(clueId);
if (ObjectUtil.isNull(clueEntity) || ObjectUtil.isNull(clueEntity.getClueId())){
throw new BadRequestException("该线索不存在或已被撤回!");
}
clueEntity.setNid(AESUtils.decrypt(clueEntity.getNid(), securityProperties.getPasswordSecretKey()));
BeanUtils.copyProperties(clueEntity, clueVO);
clueVO.setClueId(clueEntity.getClueId().toString());
@ -238,4 +243,16 @@ public class ClueServiceImpl extends ExtendServiceImpl<ClueMapper, ClueEntity> i
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;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.StrPool;
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.modules.distribute.converter.CustomConverter;
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.CustomStoreEntity;
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) {
String phone = AESUtils.encrypt(customEntity.getCustomNid(), securityProperties.getPasswordSecretKey());
Long companyId = customEntity.getCompanyId();
List<ClueEntity> clueEntityList = clueService.findByCompanyIdAndNid(companyId, phone);
if (CollUtil.isNotEmpty(clueEntityList)) {
throw new BadRequestException("该资源已分发,请勿重复操作!");
}
if (status == 0) {
Gson gson = new Gson();
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) {
String code = LetterConst.D.concat(StrPool.DASHED.concat(DateUtil.format(DateUtil.date(), DateConst.YYYY_MM_DD)));
String maxCode = baseMapper.selectMaxBatchNoByCompanyId(code, companyId);
// 拼接编号
String newCode = StringUtils.isNotBlank(maxCode) ?
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.setCompanyId(companyId);
entity.setEnterName(username);
@ -338,10 +378,13 @@ public class CustomServiceImpl extends ExtendServiceImpl<CustomMapper, CustomEnt
String detailAddress = customDTO.getDetailAddress();
String radius = customDTO.getRadius();
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(radius)) throw new BadRequestException("半径不能为空");
if (CollUtil.isEmpty(customStoreEntities)) throw new BadRequestException("门店信息不能为空");
}
}
}

@ -105,4 +105,12 @@
and create_by = #{createBy}
group by custom_id
</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>

Loading…
Cancel
Save