太自由

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
package com.sun.springboot.controller;

import com.alibaba.fastjson.JSONObject;
import com.sun.springboot.bean.ApplyMessage;
import com.sun.springboot.bean.ApplyMessageNew;
import com.sun.springboot.bean.ApplyTableMessage;
import com.sun.springboot.bean.ApplyUser;
import com.sun.springboot.bean.ApplyVo;
import com.sun.springboot.bean.User;
import com.sun.springboot.service.ApplyMessageService;
import com.sun.springboot.service.ApplyUserService;
import com.sun.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @author sunhongguang
 * @create 2020-11-19-23:34
 */
@RestController
@RequestMapping(path = "/new/apply")
public class ApplyController_new {

    @Autowired
    private UserService userService;
    @Autowired
    private ApplyUserService applyUserService;
    @Autowired
    private ApplyMessageService applyMessageService;

    @PostMapping(path = "/table")
    public synchronized ResponseEntity applyTable(@RequestBody JSONObject jsonObject) {

        // 获取申请人信息JSON对象
        JSONObject applyPersonJson = jsonObject.getJSONObject("applyUser");
        // 把申请人信息封装到ApplyUser对象中
        ApplyUser applyUser = JSONObject.toJavaObject(applyPersonJson, ApplyUser.class);

        // 获取申请的信息
        JSONObject applyMessageJson = jsonObject.getJSONObject("applyMessageNew");
        ApplyMessageNew applyMessageNew = JSONObject.toJavaObject(applyMessageJson, ApplyMessageNew.class);

        // 获取申请人信息里面的批量申请人集合
        List<String> batchApplyAccountList = applyMessageNew.getBatchApplyAccount();
        List<ApplyTableMessage> applyTable = applyMessageNew.getApplyTable();
        String test = applyTable.toString();

        List<String> batchApplyAccount = applyMessageNew.getBatchApplyAccount();
        String test1 = batchApplyAccount.toString();


        //判断批量申请列表中是否有不合法用户
        List<String> failList = judgeBatchApply(batchApplyAccountList);
        if (!CollectionUtils.isEmpty(failList)) {
            return ResponseEntity.ok(new HashMap<String, Object>() {{
                put("code", "-1");
                put("message", "申请失败!请检查批量申请的用户UM账号是否填写正确" + failList);
            }});
        }
        // 判断当前用户是否为第一次申请
        ApplyUser apply_user = this.applyUserService.findApplyUser(applyUser.getApplyUserAccount());
        if (apply_user == null) { // 如果apply_user为null,则说明这是用户第一次申请
            // 插入申请人信息到申请人信息表apply_user中
            this.applyUserService.saveApplyUser(applyUser);
            // 插入申请信息到申请表apply_message中
            int userId = this.applyUserService.findApplyUserId(applyUser.getApplyUserAccount());
            applyMessageNew.setApplyNum(1);
            applyMessageNew.setApplyUserId(userId);
            applyMessageNew.setTestTable(test);
            applyMessageNew.setTestBatchApplyAccount(test1);
            save(applyMessageNew);
        } else {
            // 如果此用户不是第一次申请,则先更新此用户(因为用户的用户名user_name,用户岗位user_job,用户部门user_department可能会变)
            applyUser.setId(apply_user.getId());
            this.applyUserService.updateApplyUser(applyUser);
            // 此用户不是第一次申请,则先去用户申请表中查找此申请用户的id
            int userId = this.applyUserService.findApplyUserId(apply_user.getApplyUserAccount());
            // 到申请信息表中查找最大的申请批次号
            int maxBatchApplyNum = this.applyUserService.findMaxBatchApplyNum_new(apply_user.getApplyUserAccount());
            applyMessageNew.setApplyNum(maxBatchApplyNum+1);
            applyMessageNew.setApplyUserId(apply_user.getId());
            applyMessageNew.setTestTable(test);
            applyMessageNew.setTestBatchApplyAccount(test1);
            save(applyMessageNew);
        }
        return ResponseEntity.ok(new HashMap<String, Object>() {{
            put("code", 0);
            put("message", "申请成功,待申批。");
        }});
    }

    private void save(ApplyMessageNew applyMessageNew) {
        this.applyMessageService.save(applyMessageNew);
    }

    /**
     * 判断批量申请列表中是否有不合法用户
     *
     * @param batchApplyAccountList 批量申请的用户列表
     * @return 批量申请列表中是否有不合法的UM账号
     */
    private List<String> judgeBatchApply(List<String> batchApplyAccountList) {
        List<String> failList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(batchApplyAccountList)) {
            // 遍历批量申请人,到用户表中查找
            for (String account : batchApplyAccountList) {
                User user = this.userService.findUserByAccount(account);
                if (user == null) {
                    failList.add(account);
                }
            }
        } else { // 如果没有批量申请人,则直接返回true
            return failList;
        }
        return failList;
    }
}

 

package com.sun.springboot.bean;


import com.fasterxml.jackson.annotation.JsonFormat;

import java.util.Date;
import java.util.List;

/**
 * @author sunhongguang
 * @create 2020-11-19-23:30
 */
public class ApplyMessageNew {

    private Integer id;
    private Integer applyUserId;
    private String eventName;
    private List<String> batchApplyAccount;
    private List<ApplyTableMessage> applyTable;
    private String applyReason;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date applyDate;
    private Integer applyNum;
    private String testTable;
    private String testBatchApplyAccount;

    public String getTestBatchApplyAccount() {
        return testBatchApplyAccount;
    }

    public void setTestBatchApplyAccount(String testBatchApplyAccount) {
        this.testBatchApplyAccount = testBatchApplyAccount;
    }

    public String getTestTable() {
        return testTable;
    }

    public void setTestTable(String testTable) {
        this.testTable = testTable;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getApplyUserId() {
        return applyUserId;
    }

    public void setApplyUserId(Integer applyUserId) {
        this.applyUserId = applyUserId;
    }

    public String getEventName() {
        return eventName;
    }

    public void setEventName(String eventName) {
        this.eventName = eventName;
    }

    public List<String> getBatchApplyAccount() {
        return batchApplyAccount;
    }

    public void setBatchApplyAccount(List<String> batchApplyAccount) {
        this.batchApplyAccount = batchApplyAccount;
    }

    public List<ApplyTableMessage> getApplyTable() {
        return applyTable;
    }

    public void setApplyTable(List<ApplyTableMessage> applyTable) {
        this.applyTable = applyTable;
    }

    public String getApplyReason() {
        return applyReason;
    }

    public void setApplyReason(String applyReason) {
        this.applyReason = applyReason;
    }

    public Date getApplyDate() {
        return applyDate;
    }

    public void setApplyDate(Date applyDate) {
        this.applyDate = applyDate;
    }

    public Integer getApplyNum() {
        return applyNum;
    }

    public void setApplyNum(Integer applyNum) {
        this.applyNum = applyNum;
    }

    @Override
    public String toString() {
        return "ApplyMessageNew{" +
                "id=" + id +
                ", applyUserId=" + applyUserId +
                ", eventName='" + eventName + '\'' +
                ", batchApplyAccount=" + batchApplyAccount +
                ", applyTable=" + applyTable +
                ", applyReason='" + applyReason + '\'' +
                ", applyDate=" + applyDate +
                ", applyNum=" + applyNum +
                ", testTable='" + testTable + '\'' +
                ", testBatchApplyAccount='" + testBatchApplyAccount + '\'' +
                '}';
    }
}
package com.sun.springboot.bean;

/**
 * @author sunhongguang
 * @create 2020-11-20-0:05
 */
public class ApplyNew {

    private ApplyUser applyUser;
    private ApplyMessageNew applyMessageNew;

    public ApplyUser getApplyUser() {
        return applyUser;
    }

    public void setApplyUser(ApplyUser applyUser) {
        this.applyUser = applyUser;
    }

    public ApplyMessageNew getApplyMessageNew() {
        return applyMessageNew;
    }

    public void setApplyMessageNew(ApplyMessageNew applyMessageNew) {
        this.applyMessageNew = applyMessageNew;
    }

    @Override
    public String toString() {
        return "ApplyNew{" +
                "applyUser=" + applyUser +
                ", applyMessageNew=" + applyMessageNew +
                '}';
    }
}
package com.sun.springboot.test;

import com.alibaba.fastjson.JSON;
import com.sun.springboot.bean.Apply;
import com.sun.springboot.bean.ApplyMessage;
import com.sun.springboot.bean.ApplyMessageNew;
import com.sun.springboot.bean.ApplyNew;
import com.sun.springboot.bean.ApplyTableMessage;
import com.sun.springboot.bean.ApplyUser;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author sunhongguang
 * @create 2020-11-14-10:24
 */
public class MainTest {

    public static void main(String[] args) {

        // 申请人对象构造
        ApplyUser applyUser = new ApplyUser();
        applyUser.setApplyUserName("孙鸿广"); // 申请人姓名
        applyUser.setApplyUserAccount("SUNHONGGUANG454"); // 申请人UM账户
        applyUser.setApplyJob("Java"); // 申请人职位
        applyUser.setApplyDepartment("GBD"); // 申请人部门

        // 批量申请人集合
        List<String> batchApplyAccountList = new ArrayList<>();
        batchApplyAccountList.add("shg1");
        batchApplyAccountList.add("shg2");
        batchApplyAccountList.add("shg3");

        ApplyMessageNew applyMessageNew = new ApplyMessageNew();

        applyMessageNew.setEventName("测试...");
        applyMessageNew.setBatchApplyAccount(batchApplyAccountList);


        // 申请的表信息
        List<ApplyTableMessage> applyTableMessageList = new ArrayList<>();
        ApplyTableMessage applyTableMessage1 = new ApplyTableMessage(1,"database_1","table_1","表注释1");
        ApplyTableMessage applyTableMessage2 = new ApplyTableMessage(2,"database_2","table_2","表注释2");
        ApplyTableMessage applyTableMessage3 = new ApplyTableMessage(3,"database_3","table_3","表注释3");
        applyTableMessageList.add(applyTableMessage1);
        applyTableMessageList.add(applyTableMessage2);
        applyTableMessageList.add(applyTableMessage3);

        applyMessageNew.setApplyTable(applyTableMessageList);
        applyMessageNew.setApplyReason("test...");
        applyMessageNew.setApplyDate(new Date());


        ApplyNew applyNew = new ApplyNew();
        applyNew.setApplyUser(applyUser);
        applyNew.setApplyMessageNew(applyMessageNew);
        String jsonString = JSON.toJSONString(applyNew,true);
        System.out.println(jsonString);
    }


}
{
    "applyMessageNew":{
        "applyDate":1605802027384,
        "applyReason":"test...",
        "applyTable":[
            {
                "databaseName":"database_1",
                "id":1,
                "tableComment":"表注释1",
                "tableName":"table_1"
            },
            {
                "databaseName":"database_2",
                "id":2,
                "tableComment":"表注释2",
                "tableName":"table_2"
            },
            {
                "databaseName":"database_3",
                "id":3,
                "tableComment":"表注释3",
                "tableName":"table_3"
            }
        ],
        "batchApplyAccount":[
            "LISI001",
            "ZHANGSAN002"
            
        ],
        "eventName":"测试..."
    },
    "applyUser":{
        "applyDepartment":"DGD",
        "applyJob":"C++",
        "applyUserAccount":"ZHANGSAN002",
        "applyUserName":"张三2"
    }
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sun.springboot.mapper.ApplyMessageMapper">

<!--保存申请信息到申请表中-->
<insert id="saveApplyMessage" parameterType="com.sun.springboot.bean.ApplyVo">
INSERT INTO `pingan`.`apply_message`
(
`apply_user_id`,
`apply_by`,
`event_name`,
`apply_date`,
`database_name`,
`table_name`,
`table_comment`,
`apply_reason`,
`apply_batch_num`
)
VALUES
(
#{applyVo.applyUserId},
#{applyVo.applyBy},
#{applyVo.eventName},
#{applyVo.applyDate},
#{applyVo.databaseName},
#{applyVo.tableName},
#{applyVo.tableComment},
#{applyVo.applyReason},
#{applyVo.applyBatchNum}
);
</insert>

<insert id="save" parameterType="com.sun.springboot.bean.ApplyMessageNew">
INSERT INTO `pingan`.`apply_message_new`
(
`apply_user_id`,
`event_name`,
`batch_apply_account`,
`apply_table`,
`apply_reason`,
`apply_date`,
`apply_batch_num`
)
VALUES
(
#{applyMessageNew.applyUserId},
#{applyMessageNew.eventName},
#{applyMessageNew.testBatchApplyAccount},
#{applyMessageNew.testTable},
#{applyMessageNew.applyReason},
#{applyMessageNew.applyDate},
#{applyMessageNew.applyNum}
)
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sun.springboot.mapper.ApplyUserMapper">

    <resultMap id="applyUserMap" type="com.sun.springboot.bean.ApplyUser">
        <id property="id" column="id"/>
        <result property="applyUserName" column="apply_user_name"/>
        <result property="applyUserAccount" column="apply_user_um_account"/>
        <result property="applyJob" column="apply_user_job"/>
        <result property="applyDepartment" column="apply_user_department"/>
    </resultMap>

    <!--查询申请人信息-->
    <select id="findApplyUser" resultMap="applyUserMap">
        select * from apply_user where apply_user_um_account =#{applyUserAccount}
    </select>

    <!--插入申请人信息到申请表中-->
    <insert id="saveApplyUser" parameterType="com.sun.springboot.bean.ApplyUser">

        INSERT INTO `pingan`.`apply_user`
            (
            `apply_user_name`,
            `apply_user_um_account`,
            `apply_user_job`,
            `apply_user_department`
            )
            VALUES
            (
            #{applyUser.applyUserName},
            #{applyUser.applyUserAccount},
            #{applyUser.applyJob},
            #{applyUser.applyDepartment}
            );
    </insert>

    <!--查找申请人的ID-->
    <select id="findApplyUserId" resultType="java.lang.Integer">
        select id from apply_user where apply_user_um_account = #{applyUserAccount}
    </select>

    <!--查找申请人最大的申请批次号-->
    <select id="findMaxBatchApplyNum" resultType="java.lang.Integer">
        SELECT IFNULL(MAX(apply_batch_num),0)
        FROM apply_message
        WHERE apply_user_id =
            (SELECT id FROM apply_user WHERE apply_user_um_account = #{applyUserAccount});
    </select>

    <!--查找申请人最大的申请批次号-->
    <select id="findMaxBatchApplyNum_new" resultType="java.lang.Integer">
        SELECT IFNULL(MAX(apply_batch_num),0)
        FROM apply_message_new
        WHERE apply_user_id =
            (SELECT id FROM apply_user WHERE apply_user_um_account = #{applyUserAccount});
    </select>

    <!--更新申请的用户信息-->
    <update id="updateApplyUser" parameterType="com.sun.springboot.bean.ApplyUser">
        UPDATE `pingan`.`apply_user`
            SET
            `apply_user_name` = #{apply_user.applyUserName} ,
            `apply_user_job` = #{apply_user.applyJob} ,
            `apply_user_department` = #{apply_user.applyDepartment}
            WHERE
            `id` = #{apply_user.id};
    </update>
</mapper>

 

 

posted on 2020-11-20 00:47  太自由  阅读(170)  评论(0编辑  收藏  举报