初始化任务分配

161 篇文章 16 订阅

一 前端

1 路由

  {
    path: '/task',
    component: Layout,
    redirect: '/task/distribute',
    name: '任务管理',
    alwaysShow: true,
    meta: { title: '任务管理', icon: 'example' },
    children: [
      {
        path: 'distribute',
        name: '任务管理',
        component: () => import('@/views/task/distribute'),
        meta: { title: '任务分配', icon: 'table' }
      }
    ]
  },

2 页面

<template>
  <div class="app-container">
    <el-form label-width="120px">
      <el-form-item label="医院次数">
        <el-input v-model="taskDistributionVo.count1" />
      </el-form-item>
      <el-form-item label="公司次数">
        <el-input v-model="taskDistributionVo.count2" />
      </el-form-item>
      <el-form-item label="药房次数">
        <el-input v-model="taskDistributionVo.count3" />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="taskDistribution">任务分配</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
// 引入接口定义的 js 文件
import taskDistribution from "@/api/taskDistribution";
export default {
  data() {
    return {
      taskDistributionVo: {}
    };
  },
  methods: {
    // 添加
    taskDistribution() {
      taskDistribution
        .taskDistribution(this.taskDistributionVo)
        .then(response => {
          // 提示
          this.$message({
            type: "success",
            message: "任务分配成功!"
          });
          this.taskDistributionVo = {};
        });
    }
  }
};
</script>

3 api

import request from '@/utils/request'

export default {
    // 任务分配
    taskDistribution(taskDistributionVo) {
        return request({
            url: `/admin/task/distributeTask`,
            method: 'post',
            data: taskDistributionVo
        })
    },
}

二 后端

1 前端传过来的数据 

/**
* @className: TaskDistributionVo
* @description: 任务分配请求
* @date: 2021/10/17
* @author: cakin
*/
@Data
public class TaskDistributionVo {
    @ApiModelProperty(value = "医院拜访次数")
    private int count1;

    @ApiModelProperty(value = "商业拜访次数")
    private int count2;

    @ApiModelProperty(value = "药房拜访次数")
    private int count3;
}

2 实体类

/**
* @className: 任务
* @description: 任务实体
* @date: 2021/10/4
* @author: cakin
*/
@Data
@ApiModel(description = "Task")
public class Task extends BaseEntity {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "名称")
    @TableField("NAME")
    private String name;

    @ApiModelProperty(value = "所在省")
    @TableField("PROVINCE")
    private String province;

    @ApiModelProperty(value = "所在市")
    @TableField("CITY")
    private String city;

    @ApiModelProperty(value = "所在区")
    @TableField("DISTRICT")
    private String district;

    @ApiModelProperty(value = "业务类别")
    @TableField("TYPE")
    private Integer type;


    @ApiModelProperty(value = "拜访次数")
    @TableField("COUNT")
    private Integer count;
}

3 控制器

@Api(tags = "任务管理")
@RestController
@RequestMapping("/admin/task")
@CrossOrigin
public class TaskController {
    // 注入service
    @Autowired
    private TaskService taskService;


    // 1 分配任务
    @PostMapping("distributeTask")
    public Result distributeTask(@RequestBody TaskDistributionVo taskDistributionVo) {
        taskService.distributeTask(taskDistributionVo);
        return Result.ok();
    }
}

4 服务接口

/**
* @className: TaskService
* @description: 任务接口
* @date: 2021/10/4
* @author: cakin
*/
public interface TaskService extends IService<Task> {

    /**
     * @className: TaskService
     * @description: 任务分配
     * @date: 2021/10/17
     * @author: cakin
     */
    void distributeTask(TaskDistributionVo taskDistributionVo);
}

5 服务实现

/**
* @className: TaskServiceImpl
* @description: 任务实现类
* @date: 2021/10/4
* @author: cakin
*/
@Service
public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService {
    @Autowired
    private HospitalService hospitalService;
    @Autowired
    private CompanyService companyService;
    @Autowired
    private PharmacyService pharmacyService;

    /**
     * @className: TaskService
     * @description: 任务分配
     * @date: 2021/10/17
     * @author: cakin
     */
    @Override
    public void distributeTask(TaskDistributionVo taskDistributionVo) {
        List<Task> taskList = new ArrayList<>();
        // 清空任务
        this.getBaseMapper().clearTask();
        // 初始化任务
        initTask(taskDistributionVo, taskList);
        this.saveBatch(taskList);
    }

    private void initTask(TaskDistributionVo taskDistributionVo, List<Task> taskList) {
        // 医院拜访次数
        int count1 = taskDistributionVo.getCount1();
        List<Hospital> hospitalList = hospitalService.list();
        // 平均每一个医院拜访次数
        int avgHospitalCount = count1 / hospitalList.size();
        int plusHospitalCount = count1 % hospitalList.size();
        for (Hospital hospital : hospitalList) {
            Task task = new Task();
            task.setName(hospital.getName());
            task.setProvince(hospital.getProvince());
            task.setCity(hospital.getCity());
            task.setDistrict(hospital.getDistrict());
            task.setType(1);
            if (plusHospitalCount > 0) {
                task.setCount(avgHospitalCount + 1);
                plusHospitalCount--;
            } else {
                task.setCount(avgHospitalCount);
            }
            taskList.add(task);
        }

        // 公司拜访次数
        int count2 = taskDistributionVo.getCount2();
        List<Company> companyList = companyService.list();
        // 平均每一个公司拜访次数
        int avgCompanyCount = count2 / companyList.size();
        int plusCompanyCount = count2 % companyList.size();
        for (Company company : companyList) {
            Task task = new Task();
            task.setName(company.getName());
            task.setProvince(company.getProvince());
            task.setCity(company.getCity());
            task.setDistrict(company.getDistrict());
            task.setType(2);
            if (plusCompanyCount > 0) {
                task.setCount(avgCompanyCount + 1);
                plusCompanyCount--;
            } else {
                task.setCount(avgCompanyCount);
            }
            taskList.add(task);
        }

        // 药房拜访次数
        int count3 = taskDistributionVo.getCount3();
        List<Pharmacy> pharmacyList = pharmacyService.list();
        // 平均每一个药房拜访次数
        int avgPharmacyCount = count3 / pharmacyList.size();
        int plusPharmacyCount = count3 % pharmacyList.size();
        for (Pharmacy pharmacy : pharmacyList) {
            Task task = new Task();
            task.setName(pharmacy.getName());
            task.setProvince(pharmacy.getProvince());
            task.setCity(pharmacy.getCity());
            task.setDistrict(pharmacy.getDistrict());
            task.setType(3);
            if (plusPharmacyCount > 0) {
                task.setCount(avgPharmacyCount + 1);
                plusPharmacyCount--;
            } else {
                task.setCount(avgPharmacyCount);
            }
            taskList.add(task);
        }
    }
}

6 数据访问层

/**
* @className: TaskMapper
* @description: 任务数据访问
* @date: 2021/10/4
* @author: cakin
*/
public interface TaskMapper extends BaseMapper<Task> {
    // 清空指定表
    @Update("truncate table task")
    void clearTask();
}

三 测试

1 页面输入

2 数据库输出

mysql> select sum(count) from task;
+------------+
| sum(count) |
+------------+
|        160 |
+------------+
1 row in set (0.00 sec)


mysql> select * from task;
+----------------------------------+--------+----------+--------+----------+------+-------+---------------------+---------------------+------------+
| ID                               | NAME   | PROVINCE | CITY   | DISTRICT | TYPE | COUNT | CREATE_TIME         | UPDATE_TIME         | IS_DELETED |
+----------------------------------+--------+----------+--------+----------+------+-------+---------------------+---------------------+------------+
| 04525d4f5f74d6d7c0ab0315042aa6ef | 医院16 | 北京     | 直辖市 | 西城区   |    1 |     5 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 19373c04d96aaf207774d00fdfd95573 | 药房2  | 北京     | 直辖市 | 东城区   |    3 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 19c23a4003c84597adbffe64802e2bb3 | 药房1  | 北京     | 直辖市 | 西城区   |    3 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 1c0d0de4045eeedf3143262748239036 | 医院15 | 北京     | 直辖市 | 东城区   |    1 |     4 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 1d6546940eee8a6fa4f84c2fdee3517f | 医院12 | 北京     | 直辖市 | 西城区   |    1 |     5 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 1f22a2ab6f83772ec3bb5b0b4fbc61ba | 医院8  | 北京     | 直辖市 | 北城区   |    1 |     4 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 1fe9eaadaf455709aedd8832ce2c1c5e | 公司4  | 北京     | 直辖市 | 西城区   |    2 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 2f8f1eba28367892c14cdccf886f9645 | 医院1  | 北京     | 直辖市 | 西城区   |    1 |     5 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 2fb8356220288f5df939e456548dbbbf | 医院4  | 北京     | 直辖市 | 东城区   |    1 |     5 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 38a457258b5e7d39dddc3aeaa7a2db7e | 医院11 | 北京     | 直辖市 | 南城区   |    1 |     4 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 4915557b155d1b30aaa3764e7f539680 | 医院17 | 北京     | 直辖市 | 北城区   |    1 |     4 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 4f490c58fb2783f6f36c0ea7b30f8768 | 药房4  | 北京     | 直辖市 | 北城区   |    3 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 770b60d3bd75cdcc5769f0981ecc3377 | 医院17 | 北京     | 直辖市 | 东城区   |    1 |     4 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 86f8fd5d2e48ab3a0cded2d8203601b0 | 公司2  | 北京     | 直辖市 | 西城区   |    2 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| 9f6dc674e16d349b768ed9c6a976246c | 公司5  | 北京     | 直辖市 | 西城区   |    2 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| a328f2da0c68c4684fdf33648c0d235c | 公司3  | 北京     | 直辖市 | 东城区   |    2 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| a497a8b7ea11e55fbc0d4c47d04368b8 | 医院2  | 北京     | 直辖市 | 东城区   |    1 |     5 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| affc94aeed60c7c54e177c4900694a28 | 医院7  | 北京     | 直辖市 | 北城区   |    1 |     5 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| c4e09567843f5a211ba0163414435c8b | 药房3  | 北京     | 直辖市 | 东城区   |    3 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| d200d06bb369fc054f888a81cd38453a | 医院3  | 北京     | 直辖市 | 西城区   |    1 |     5 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| d79729ae067f9ad94f525727d38815e7 | 医院6  | 北京     | 直辖市 | 西城区   |    1 |     5 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| dc35fa89b9d201525febf12b85e6f208 | 药房5  | 北京     | 直辖市 | 西城区   |    3 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
| ef5e61b9c49436fde342dece7e327d9c | 公司1  | 北京     | 直辖市 | 东城区   |    2 |    10 | 2021-10-17 11:31:28 | 2021-10-17 11:31:28 |          0 |
+----------------------------------+--------+----------+--------+----------+------+-------+---------------------+---------------------+------------+
23 rows in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值