diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/WorkController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/WorkController.java index b777129..ea7733c 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/WorkController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/WorkController.java @@ -1,7 +1,21 @@ package com.cfive.pinnacle.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.cfive.pinnacle.entity.User; +import com.cfive.pinnacle.entity.UserWork; +import com.cfive.pinnacle.entity.Work; +import com.cfive.pinnacle.entity.common.ResponseCode; +import com.cfive.pinnacle.entity.common.ResponseResult; +import com.cfive.pinnacle.service.IWorkService; +import com.cfive.pinnacle.service.impl.UserWorkServiceImpl; +import com.cfive.pinnacle.service.impl.WorkServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.List; /** *

@@ -11,8 +25,45 @@ import org.springframework.web.bind.annotation.RestController; * @author FatttSnake * @since 2023-04-30 */ + @RestController +@CrossOrigin @RequestMapping("/work") public class WorkController { + @Autowired + private WorkServiceImpl workService; + @Autowired + private UserWorkServiceImpl userWorkService; + @GetMapping + public ResponseResult getAll() { + return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", workService.getAll()); + } + + @GetMapping("/todo/{userId}") + public ResponseResult getTodo(@PathVariable Long userId) { + return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", workService.getTodo(userId)); + } + + @GetMapping("/complete/{userId}") + public ResponseResult getComplete(@PathVariable Long userId) { + return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", workService.getComplete(userId)); + } + + @PostMapping + public ResponseResult addWork(@RequestBody Work work) { + System.out.println(work); + return ResponseResult.build(ResponseCode.DATABASE_SAVE_OK, "success", workService.addWork(work)); + } + + @DeleteMapping("/{id}") + public ResponseResult deleteById(@PathVariable long id) { + System.out.println(id); + return ResponseResult.build(ResponseCode.DATABASE_DELETE_OK, "success", workService.deleteByWorkId(id)); + } + + @PutMapping("/setComplete") + public ResponseResult updateWork(@RequestBody UserWork userWork) { + return ResponseResult.build(ResponseCode.DATABASE_DELETE_OK, "success", userWorkService.updateById(userWork)); + } } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserWork.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserWork.java index 78a8457..450df0b 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserWork.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserWork.java @@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.Version; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -35,12 +37,14 @@ public class UserWork implements Serializable { * 用户 */ @TableField("user_id") + @JsonSerialize(using = ToStringSerializer.class) private Long userId; /** * 工作事项 */ @TableField("work_id") + @JsonSerialize(using = ToStringSerializer.class) private Long workId; /** diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Work.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Work.java index f18ae7c..487c313 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Work.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Work.java @@ -9,7 +9,11 @@ import com.baomidou.mybatisplus.annotation.Version; import java.io.Serial; import java.io.Serializable; import java.time.LocalDateTime; +import java.util.List; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -30,6 +34,7 @@ public class Work implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** @@ -44,6 +49,9 @@ public class Work implements Serializable { @TableField("publisher_id") private Long publisherId; + @TableField(exist = false) + private String publisherName; + /** * 创建时间 */ @@ -81,4 +89,10 @@ public class Work implements Serializable { @TableField("version") @Version private Integer version; + @TableField(exist = false) + private List userWorkList; + @TableField(exist = false) + private List worker; + @TableField(exist = false) + private double progress; } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/WorkMapper.java b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/WorkMapper.java index 5fa6b8e..6f32f21 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/WorkMapper.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/WorkMapper.java @@ -4,6 +4,8 @@ import com.cfive.pinnacle.entity.Work; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** *

* 工作事项 Mapper 接口 @@ -14,5 +16,10 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface WorkMapper extends BaseMapper { + List getAll(); + + List getTodo(Long userId); + + List getComplete(Long userId); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IWorkService.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IWorkService.java index f55a2a5..136d17a 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IWorkService.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IWorkService.java @@ -3,6 +3,8 @@ package com.cfive.pinnacle.service; import com.cfive.pinnacle.entity.Work; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 工作事项 服务类 @@ -12,5 +14,13 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2023-04-30 */ public interface IWorkService extends IService { + List getAll(); + List getTodo(Long userId); + List getComplete(Long userId); + double getProgress(Long workId); + + String getUserName(Long userId); + boolean addWork(Work work); + boolean deleteByWorkId(Long wid); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/UserWorkServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/UserWorkServiceImpl.java index 63d3fa9..52d78a2 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/UserWorkServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/UserWorkServiceImpl.java @@ -17,4 +17,5 @@ import org.springframework.stereotype.Service; @Service public class UserWorkServiceImpl extends ServiceImpl implements IUserWorkService { + } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/WorkServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/WorkServiceImpl.java index e6cef54..a7ad604 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/WorkServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/WorkServiceImpl.java @@ -1,11 +1,19 @@ package com.cfive.pinnacle.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.cfive.pinnacle.entity.User; +import com.cfive.pinnacle.entity.UserWork; import com.cfive.pinnacle.entity.Work; +import com.cfive.pinnacle.mapper.UserMapper; +import com.cfive.pinnacle.mapper.UserWorkMapper; import com.cfive.pinnacle.mapper.WorkMapper; import com.cfive.pinnacle.service.IWorkService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 工作事项 服务实现类 @@ -16,5 +24,74 @@ import org.springframework.stereotype.Service; */ @Service public class WorkServiceImpl extends ServiceImpl implements IWorkService { + @Autowired + private WorkMapper workMapper; + @Autowired + private UserWorkMapper userWorkMapper; + @Autowired + private UserMapper userMapper; + @Override + public List getAll() { + List workList = workMapper.getAll(); + for (Work work: + workList) { + work.setProgress(getProgress(work.getId())); + work.setPublisherName(getUserName(work.getPublisherId())); + } + return workList; + } + + @Override + public List getTodo(Long userId) { + return workMapper.getTodo(userId); + } + + @Override + public List getComplete(Long userId) { + return workMapper.getComplete(userId); + } + + @Override + public double getProgress(Long workId) { + double workNum = userWorkMapper.selectCount(new QueryWrapper().eq("work_id",workId)); + double completeNum = userWorkMapper.selectCount(new QueryWrapper().eq("work_id",workId).eq("status",1)); + double progress = 0; + progress = (completeNum / workNum) * 100; + return progress; + } + + @Override + public String getUserName(Long userId) { + return userMapper.selectById(userId).getUsername(); + } + + @Override + public boolean addWork(Work work) { + boolean flag = false; + if (workMapper.insert(work) > 0) { + flag = true; + } + long workId = work.getId(); + for (User user : + work.getWorker()) { + UserWork userWork = new UserWork(); + userWork.setWorkId(workId); + userWork.setUserId(user.getId()); + if (userWorkMapper.insert(userWork) <= 0) { + flag = false; + } + } + return flag; + } + + @Override + public boolean deleteByWorkId(Long workId) { + boolean flag = false; + if (userWorkMapper.delete(new QueryWrapper().eq("work_id", workId)) > 0 && workMapper.deleteById(workId) > 0) { + flag = true; + } + return flag; + } + } diff --git a/Pinnacle/src/main/resources/mapper/WorkMapper.xml b/Pinnacle/src/main/resources/mapper/WorkMapper.xml index 780a08f..1bef4b7 100644 --- a/Pinnacle/src/main/resources/mapper/WorkMapper.xml +++ b/Pinnacle/src/main/resources/mapper/WorkMapper.xml @@ -1,5 +1,123 @@ + + + + + + + + + + + + + + + + + + + + delete + from t_task + where id = #{id}; + + + delete + from t_task + + + #{id} + + + + + update t_task + + + publisher_id = #{publisher_id} + + + task_status=#{taskStatus} + + + where id = #{id}; + + diff --git a/ui/src/assets/css/work/work.css b/ui/src/assets/css/work/work.css index bd5431e..c3b0bbd 100644 --- a/ui/src/assets/css/work/work.css +++ b/ui/src/assets/css/work/work.css @@ -4,7 +4,7 @@ .main { display: flex; height: 100vh; - width: 98vw; + width: 100vw; min-width: 600px; min-height: 600px; text-align: center; diff --git a/ui/src/components/Detail.vue b/ui/src/components/Detail.vue index d96e164..8c2907a 100644 --- a/ui/src/components/Detail.vue +++ b/ui/src/components/Detail.vue @@ -7,14 +7,14 @@ :data="taskData" border > - {{ taskData.publisher_id }} + {{ taskData.publisherId }} {{ taskData.createTime }} - {{ taskData.deadLine }} + {{ taskData.deadline }} - {{ taskData.taskContent }} + {{ taskData.content }} @@ -23,12 +23,12 @@ export default { data() { return { taskData: { - publisher_id: '1', + publisherId: '1', createTime: '1', - deadLine: '1', - taskStatus: false, + deadline: '1', + status: false, worker: '', - taskContent: '213' + content: '213' } } } diff --git a/ui/src/components/EditWork.vue b/ui/src/components/EditWork.vue index 2107bd1..9293718 100644 --- a/ui/src/components/EditWork.vue +++ b/ui/src/components/EditWork.vue @@ -6,30 +6,29 @@ multiple filterable :reserve-keyword="false" - value-key="userID" + value-key="username" placeholder="选择相对应的工作人员" > - + - - + + 创建 @@ -45,16 +44,16 @@ export default { data() { return { form: { - publisher_id: '', + publisherId: '', createTime: '', - deadLine: '', - taskContent: '', + deadline: '', + content: '', worker: [] }, workers: [ { - userID: '', - userName: '' + userId: '', + username: '' } ], rules: { @@ -64,14 +63,14 @@ export default { message: '请选择相应的工作人员' } ], - deadLine: [ + deadline: [ { type: 'date', required: true, message: '请输入终止日期' } ], - taskContent: [ + content: [ { required: true, message: '请输入工作内容' @@ -83,10 +82,10 @@ export default { methods: { getFormData() { axios - .get('http://localhost:8080/user') + .get('http://localhost:8621/user') .then((response) => { - console.log(response.data) - this.workers = response.data + console.log(response.data.data) + this.workers = response.data.data console.log(this.workers) }) .catch((reportError) => { @@ -96,7 +95,7 @@ export default { addWork(form) { console.log(form) axios - .post('http://localhost:8080/work', form) + .post('http://localhost:8621/work', form) .then((response) => { console.log(response.data) }) @@ -108,9 +107,9 @@ export default { //表单校验 this.$refs.ruleForm.validate((value) => { if (value) { - form.createTime = new Date().getTime().toString() - console.log(form) - form.publisher_id = String(1) + console.log(form.deadline) + form.createTime = new Date() + form.publisherId = String(1) this.addWork(form) this.$emit('setDialogVisible', false) console.log('submit!') diff --git a/ui/src/pages/work/AllTask.vue b/ui/src/pages/work/AllTask.vue index 211c14e..a8af168 100644 --- a/ui/src/pages/work/AllTask.vue +++ b/ui/src/pages/work/AllTask.vue @@ -2,28 +2,30 @@

- - - + + - + - - - @@ -84,9 +86,9 @@ export default { } }, methods: { - formatDate(deadLine) { - console.log(new Date(deadLine).toLocaleString()) - return new Date(deadLine).toLocaleString() + formatDate(deadline) { + console.log(new Date(deadline).toLocaleString()) + return new Date(deadline).toLocaleString() }, handleClick() { console.log('click') @@ -107,10 +109,10 @@ export default { }, getTableData() { axios - .get('http://localhost:8080/work') + .get('http://localhost:8621/work') .then((response) => { - console.log(response.data) - this.tableData = response.data + console.log(response.data.data) + this.tableData = response.data.data console.log(this.tableData) }) .catch((reportError) => { @@ -119,9 +121,9 @@ export default { }, deleteTableData(row) { axios - .delete('http://localhost:8080/work/' + row.id) + .delete('http://localhost:8621/work/' + row.id) .then((response) => { - console.log(response.data) + console.log(response.data.data) }) .catch((reportError) => { console.log(reportError) diff --git a/ui/src/pages/work/Complete.vue b/ui/src/pages/work/Complete.vue index 0a588d1..8f54ac4 100644 --- a/ui/src/pages/work/Complete.vue +++ b/ui/src/pages/work/Complete.vue @@ -3,8 +3,8 @@
- - + + - + @@ -52,9 +52,9 @@ export default { } }, methods: { - formatDate(deadLine) { - console.log(new Date(deadLine).toLocaleString()) - return new Date(deadLine).toLocaleString() + formatDate(deadline) { + console.log(new Date(deadline).toLocaleString()) + return new Date(deadline).toLocaleString() }, todoConfirmEvent(row) { console.log(row) @@ -80,7 +80,7 @@ export default { setTaskTodo(row) { var workDo = new Object() workDo.id = row.id - workDo.taskStatus = false + workDo.status = false axios .put('http://localhost:8080/work', workDo) .then((response) => { diff --git a/ui/src/pages/work/Todo.vue b/ui/src/pages/work/Todo.vue index b0a8177..0c9d563 100644 --- a/ui/src/pages/work/Todo.vue +++ b/ui/src/pages/work/Todo.vue @@ -3,8 +3,8 @@
- - + + - + @@ -51,9 +51,9 @@ export default { } }, methods: { - formatDate(deadLine) { - console.log(new Date(deadLine).toLocaleString()) - return new Date(deadLine).toLocaleString() + formatDate(deadline) { + console.log(new Date(deadline).toLocaleString()) + return new Date(deadline).toLocaleString() }, completeConfirmEvent(row) { console.log(row) @@ -79,7 +79,7 @@ export default { setTaskComplete(row) { var workDo = new Object() workDo.id = row.id - workDo.taskStatus = true + workDo.status = true axios .put('http://localhost:8080/work', workDo) .then((response) => {