package com.qdport.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.qdport.entity.PolicyFile; import com.qdport.enums.QDPortEnum; import com.qdport.query.QueryWrapperBuilder; import com.qdport.service.PolicyFileService; import com.qdport.service.PolicyFlowNoService; import com.qdport.util.StringUtil; import com.qdport.vo.PolicyFileVO; import com.qdport.vo.PolicyShareVO; import lombok.AllArgsConstructor; import com.qdport.entity.PolicyStrive; import com.qdport.query.PolicyStriveQuery; import com.qdport.vo.PolicyStriveVO; import com.qdport.mapper.PolicyStriveMapper; import com.qdport.service.PolicyStriveService; import com.qdport.wrapper.PolicyStriveWrapper; import com.qdport.core.tool.utils.Func; import com.qdport.core.tool.utils.BeanUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * 政策争取 * * @author yuheng * @since 1.0.0 2024-10-14 */ @Service public class PolicyStriveServiceImpl extends ServiceImpl implements PolicyStriveService { @Resource private PolicyFlowNoService policyFlowNoService; @Resource private PolicyFileService policyFileService; private final static BigDecimal decimal_50w = new BigDecimal(500000); private final static BigDecimal decimal_200w = new BigDecimal(2000000); private final static BigDecimal decimal_500w = new BigDecimal(5000000); private final static BigDecimal decimal_1000w = new BigDecimal(10000000); private final static BigDecimal decimal_500 = new BigDecimal(500); private final static BigDecimal decimal_1000 = new BigDecimal(1000); private final static BigDecimal decimal_1500 = new BigDecimal(1500); private final static BigDecimal decimal_2000 = new BigDecimal(2000); private final static BigDecimal decimal_3000 = new BigDecimal(3000); private final static BigDecimal decimal_4000 = new BigDecimal(4000); private final static BigDecimal decimal_5000 = new BigDecimal(5000); private final static BigDecimal decimal_6000 = new BigDecimal(6000); private final static BigDecimal decimal_8000 = new BigDecimal(8000); private final static BigDecimal decimal_10000 = new BigDecimal(10000); private final static BigDecimal decimal_12000 = new BigDecimal(12000); private final static BigDecimal decimal_15000 = new BigDecimal(15000); @Override public IPage page(PolicyStriveQuery query) { IPage page = new Page<>(query.getPage(), query.getSize()); page = baseMapper.selectPage(page, getWrapper(query)); return PolicyStriveWrapper.build().pageVO(page); } private QueryWrapper getWrapper(PolicyStriveQuery query) { QueryWrapper wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyStrive.class); wrapper.orderByDesc("CREATE_TIME"); return wrapper; } @Override public void save(PolicyStriveVO vo) { String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_STRIVE.getValue()); vo.setCreateTime(new Date()); vo.setUpdateTime(new Date()); vo.setBusinessNo(flowNo); PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class); baseMapper.insert(entity); vo.setId(entity.getId()); QueryWrapper fileWrapper = new QueryWrapper<>(); fileWrapper.eq("REF_ID", entity.getId()); fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue()); policyFileService.remove(fileWrapper); List fileList = vo.getFileList(); for (PolicyFileVO model : fileList) { model.setCreateTime(new Date()); model.setRefId(entity.getId()); model.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue()); policyFileService.save(model); } } @Override public void update(PolicyStriveVO vo) { vo.setUpdateTime(new Date()); PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class); updateById(entity); QueryWrapper fileWrapper = new QueryWrapper<>(); fileWrapper.eq("REF_ID", entity.getId()); fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue()); policyFileService.remove(fileWrapper); List fileList = vo.getFileList(); for (PolicyFileVO model : fileList) { model.setCreateTime(new Date()); model.setRefId(entity.getId()); model.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue()); policyFileService.save(model); } } @Override public void updateById(PolicyStriveVO vo) { vo.setUpdateTime(new Date()); updateRewardData(vo); PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class); updateById(entity); } @Override @Transactional(rollbackFor = Exception.class) public void delete(List idList) { removeByIds(idList); } private void updateRewardData(PolicyStriveVO vo) { Integer rewardType = vo.getRewardType(); Integer isLand = vo.getIsLand(); BigDecimal landAmount = vo.getLandAmount(); if (StringUtil.isEmpty(rewardType) || isLand == 0 || StringUtil.isEmpty(landAmount)) { return; } if (rewardType == 1) { if (landAmount.compareTo(decimal_50w) <= 0) { vo.setRewardRadix(decimal_500); } else if (landAmount.compareTo(decimal_200w) <= 0) { vo.setRewardRadix(decimal_1000); } else if (landAmount.compareTo(decimal_500w) <= 0) { vo.setRewardRadix(decimal_2000); } else if (landAmount.compareTo(decimal_1000w) <= 0) { vo.setRewardRadix(decimal_4000); } else { vo.setRewardRadix(decimal_5000); } } else if (rewardType == 2) { if (landAmount.compareTo(decimal_50w) <= 0) { vo.setRewardRadix(decimal_1000); } else if (landAmount.compareTo(decimal_200w) <= 0) { vo.setRewardRadix(decimal_2000); } else if (landAmount.compareTo(decimal_500w) <= 0) { vo.setRewardRadix(decimal_4000); } else if (landAmount.compareTo(decimal_1000w) <= 0) { vo.setRewardRadix(decimal_8000); } else { vo.setRewardRadix(decimal_10000); } } else if (rewardType == 3 || rewardType == 4) { if (landAmount.compareTo(decimal_50w) <= 0) { vo.setRewardRadix(decimal_1500); } else if (landAmount.compareTo(decimal_200w) <= 0) { vo.setRewardRadix(decimal_3000); } else if (landAmount.compareTo(decimal_500w) <= 0) { vo.setRewardRadix(decimal_6000); } else if (landAmount.compareTo(decimal_1000w) <= 0) { vo.setRewardRadix(decimal_12000); } else { vo.setRewardRadix(decimal_15000); } } } }