home %!s(int64=3) %!d(string=hai) anos
achega
3a4ccfe3d3

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+**/target/
+
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 132 - 0
pom.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.1.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <groupId>com.example</groupId>
+    <artifactId>storage-ex</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>storage-ex</name>
+    <description>storage-ex</description>
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+    <dependencies>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- mysql数据库驱动 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- mybatis-plus -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+
+        <!--        &lt;!&ndash; myBatis-plus代码自动生成工具 &ndash;&gt;-->
+        <!--        <dependency>-->
+        <!--            <groupId>com.baomidou</groupId>-->
+        <!--            <artifactId>mybatis-plus-generator</artifactId>-->
+        <!--            <version>3.4.0</version>-->
+        <!--        </dependency>-->
+
+        <!--        &lt;!&ndash; myBatis-plus代码自动生成模板引擎 &ndash;&gt;-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.apache.velocity</groupId>-->
+        <!--            <artifactId>velocity-engine-core</artifactId>-->
+        <!--            <version>2.3</version>-->
+        <!--        </dependency>-->
+
+        <!-- hutool -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.3</version>
+        </dependency>
+
+        <!-- fastjson -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.7</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <!-- 指定java版本 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.3.1.RELEASE</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+        </resources>
+    </build>
+
+</project>

+ 19 - 0
src/main/java/com/example/storageex/StorageExApplication.java

@@ -0,0 +1,19 @@
+package com.example.storageex;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@Slf4j
+@EnableScheduling
+@SpringBootApplication
+public class StorageExApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(StorageExApplication.class, args);
+
+        log.info(">>>>>>>>>>> {}  启动成功", SpringApplication.class.getSimpleName());
+    }
+
+}

+ 34 - 0
src/main/java/com/example/storageex/config/MybatisConfig.java

@@ -0,0 +1,34 @@
+package com.example.storageex.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * mybatis扩展插件配置
+ */
+@Configuration
+@MapperScan("com.example.**.mapper")
+public class MybatisConfig {
+
+    /**
+     * 分页插件
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptorPage() {
+        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+        // 分页
+        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        // 乐观锁
+        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+        // 阻断(防止全表更新)
+        mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
+        return mybatisPlusInterceptor;
+    }
+
+}

+ 16 - 0
src/main/java/com/example/storageex/config/WebMvcConfig.java

@@ -0,0 +1,16 @@
+package com.example.storageex.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * Create by hyhweb on 2021/6/1 22:13
+ */
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**").allowedOrigins("*").allowedHeaders("*").allowedMethods("*");
+    }
+}

+ 54 - 0
src/main/java/com/example/storageex/controller/IndexController.java

@@ -0,0 +1,54 @@
+package com.example.storageex.controller;
+
+
+import com.example.storageex.service.IndexService;
+import com.example.storageex.utils.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/javaApi")
+public class IndexController {
+
+    @Autowired
+    private IndexService indexService;
+
+    @PostMapping("/selectDetails")
+    public R getPersonAttendData(@RequestBody Map<String, Object> condition) {
+        List<Map<String, Object>> maps = indexService.selectDetails(condition);
+        return R.ok(maps);
+    }
+
+
+    @PostMapping("getV3PlanData")
+    public R getV3PlanData(@RequestBody Map<String, String> condition) {
+        Map<String, Object> result = indexService.getV3PlanData(condition);
+        return R.ok(result);
+    }
+
+    @GetMapping("contractPayment")
+    public R contractPayment() {
+        Map<String, Object> result = indexService.contractPayment();
+        return R.ok(result);
+    }
+
+    @GetMapping("approvalRole")
+    public R approvalRole() {
+        List<Map<String, Object>> result = indexService.approvalRole();
+        return R.ok(result);
+    }
+
+    /**
+     * 盘点记录
+     */
+    @PostMapping("inventoryRecord")
+    public R inventoryRecord(@RequestBody Map<String, String> condition) {
+        List<Map<String, Object>> result = indexService.getInventoryRecord(condition);
+        return R.ok(result);
+    }
+
+
+}

+ 31 - 0
src/main/java/com/example/storageex/mapper/IndexMapper.java

@@ -0,0 +1,31 @@
+package com.example.storageex.mapper;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+public interface IndexMapper extends BaseMapper<Object> {
+
+    List<Map<String, Object>> selectDetails(Map<String, Object> condition);
+
+    List<Map<String, Object>> selectAllMaterialList(@Param("ew") QueryWrapper<Object> queryWrapper);
+
+    List<Map<String, Object>> selectInk();
+
+    List<Map<String, Object>> getPaidInLastAccountingPeriod(@Param("beginOfMonth") DateTime beginOfMonth, @Param("halfEndTime") String halfEndTime);
+
+    BigDecimal getCurrentAccountingPeriod(@Param("lowerHalfBeginTime") String lowerHalfBeginTime, @Param("endOfMonth") DateTime endOfMonth);
+
+    List<Map<String, Object>> gerPaid(@Param("lowerHalfBeginTime") String lowerHalfBeginTime, @Param("endOfMonth") DateTime endOfMonth);
+
+    List<Map<String, Object>> approvalRole();
+
+
+    List<Map<String, Object>> getInventoryRecord(@Param("ew") QueryWrapper<Object> wrapper);
+
+}

+ 118 - 0
src/main/java/com/example/storageex/mapper/xml/Index.xml

@@ -0,0 +1,118 @@
+<?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.example.storageex.mapper.IndexMapper">
+
+    <select id="selectDetails" resultType="java.util.Map">
+        SELECT
+        FromBillNo AS fromBillNo,
+        LEFT ( CompleteStockTime, 19 ) AS completeStockTime,
+        IFNULL( SUM(so.Amount), 0 ) AS amount,
+        IFNULL( ROUND( SUM(e.PayAmount), 2 ), 0 ) AS payAmount,
+        IFNULL( ROUND( p.pays, 2 ), 0 ) AS pays,
+        s.AccountDate accountDate
+        FROM
+        stock_inoutbill io
+        LEFT JOIN apply_stockoutdetail so ON io.FromBillNo = so.BalancePurBillNo
+        LEFT JOIN purchase_contract c ON io.FromBillNo = c.PurchaseBillNo
+        LEFT JOIN purchase_expressfee e ON c.ID = e.LinkPurchaseId
+        LEFT JOIN (
+        SELECT
+        PurchaseBillNo,
+        sum( PayAmount ) pays
+        FROM
+        apply_purchase_pay
+        WHERE
+        ApplyPayState = '2'
+        AND IsDelete = '0'
+        <if test="beginTime != null  and endTime != null ">
+            AND (UpdatedTime BETWEEN #{beginTime} AND #{endTime})
+        </if>
+        GROUP BY
+        PurchaseBillNo
+        ) p ON io.FromBillNo = p.PurchaseBillNo
+        LEFT JOIN supplier s ON c.SupplierId = s.ID
+        WHERE
+        io.BillType = '1'
+        AND io.IsDelete = '0'
+        GROUP BY FromBillNo
+    </select>
+    <select id="selectAllMaterialList" resultType="java.util.Map">
+        SELECT m.`Name`       AS materialName,
+               m.`Code`       AS materialCode,
+               s.Quantity     as stockQty,
+               m.Width        AS width,
+               m.CategoryCode AS categoryCode,
+               su.Quantity    AS userStockQty
+        FROM material m
+                 LEFT JOIN stock s ON m.`Code` = s.MaterialCode
+                 LEFT JOIN stockuser su ON m.`Code` = su.MaterialCode
+                 LEFT JOIN u_user uu ON uu.`ID` = su.`UserId`
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="selectInk" resultType="java.util.Map">
+        select m.Name     materialName,
+               m.Code     materialCode,
+               s.Quantity stockQty
+        from material m
+                 left join stock s on m.Code = s.MaterialCode
+        where m.categoryCode = '03.008.'
+          and s.Quantity > 0
+    </select>
+    <select id="getPaidInLastAccountingPeriod" resultType="java.util.Map">
+        SELECT CASE
+                   app.ApplyPayType
+                   WHEN 0 THEN
+                       '有账期'
+                   WHEN 1 THEN
+                       '预付款'
+                   END                      AS '类型',
+               round(sum(app.PayAmount), 2) AS '已付'
+        FROM apply_purchase_pay app
+        WHERE app.UpdatedTime BETWEEN #{beginOfMonth} AND #{halfEndTime}
+          AND app.ApplyPayState = 2
+        GROUP BY app.ApplyPayType
+    </select>
+    <select id="getCurrentAccountingPeriod" resultType="java.math.BigDecimal">
+        SELECT ifnull(sum(PayAmount), 0.00) PayAmount
+        FROM apply_purchase_pay app
+        WHERE ApplyPayType = 1
+          AND (CreatedTime BETWEEN #{lowerHalfBeginTime} AND #{endOfMonth})
+    </select>
+    <select id="gerPaid" resultType="java.util.Map">
+        SELECT ApplyPayType,
+               sum(PayAmount) PayAmount
+        FROM apply_purchase_pay app
+        WHERE ApplyPayState = 2
+          AND (UpdatedTime BETWEEN #{lowerHalfBeginTime} AND #{endOfMonth})
+        GROUP BY ApplyPayType
+    </select>
+    <select id="approvalRole" resultType="java.util.Map">
+        SELECT app.PurchaseBillNo,
+               r.`Name`
+        FROM apply_purchase_pay app
+                 LEFT JOIN (
+            SELECT LinkId,
+                   NodeId
+            FROM flow_applycheck
+            WHERE CreatedTime IN (SELECT max(CreatedTime) CreatedTime FROM flow_applycheck GROUP BY LinkId)) fa
+                           ON app.ID = fa.LinkId
+                 LEFT JOIN flow_node fn ON fa.NodeId = fn.ID
+                 LEFT JOIN u_role r ON fn.RoleKey = r.`Key`
+        WHERE ApproveBillState IN (0, 1)
+    </select>
+    <select id="getInventoryRecord" resultType="java.util.Map">
+        SELECT sc.ID id, ifnull(scd.abnormal, 0) abnormal
+        FROM stock_checkrecord sc
+                 LEFT JOIN (SELECT RecordId,
+                                   count(1) abnormal
+                            FROM stock_checkrecorddetail
+                            WHERE IsDelete != 1
+                              AND (HandTagCount != CheckTagCount OR CheckTagCount != TagQuantity)
+                              AND ApproveBillState = 2
+                            GROUP BY RecordId) scd ON sc.ID = scd.RecordId
+            ${ew.customSqlSegment}
+    </select>
+
+
+</mapper>

+ 20 - 0
src/main/java/com/example/storageex/service/IndexService.java

@@ -0,0 +1,20 @@
+package com.example.storageex.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IndexService extends IService<Object> {
+
+    List<Map<String, Object>> selectDetails(Map<String, Object> condition);
+
+    Map<String, Object> getV3PlanData(Map<String, String> condition);
+
+    Map<String, Object> contractPayment();
+
+    List<Map<String, Object>> approvalRole();
+
+    List<Map<String, Object>> getInventoryRecord(Map<String, String> condition);
+
+}

+ 227 - 0
src/main/java/com/example/storageex/service/impl/IndexServiceImpl.java

@@ -0,0 +1,227 @@
+package com.example.storageex.service.impl;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.storageex.mapper.IndexMapper;
+import com.example.storageex.service.IndexService;
+import com.example.storageex.utils.HttpHelper;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class IndexServiceImpl extends ServiceImpl<IndexMapper, Object> implements IndexService {
+
+
+    @Override
+    public List<Map<String, Object>> selectDetails(Map<String, Object> condition) {
+        if (ObjectUtil.isNotEmpty(condition.get("beginTime"))) {
+
+            // 获取到传过来的时间
+            Date beginTime = DateUtil.parse(condition.get("beginTime").toString());
+
+            // 获取到传过来时间的最后一天
+            Date endTime = DateUtil.endOfMonth(beginTime);
+
+            if (DateUtil.betweenDay(beginTime, endTime, false) > 15) {
+                beginTime = DateUtil.beginOfMonth(beginTime);
+                endTime = DateUtil.offsetDay(beginTime, 15);
+            } else {
+                beginTime = DateUtil.offsetDay(DateUtil.beginOfMonth(beginTime), 14);
+            }
+            condition.put("beginTime", beginTime);
+            condition.put("endTime", endTime);
+        }
+        return baseMapper.selectDetails(condition);
+    }
+
+    @Override
+    public Map<String, Object> getV3PlanData(Map<String, String> condition) {
+
+        Map<String, Object> result = new LinkedHashMap<>();
+
+        // 请求v3接口获取token
+        String tokenUrl = "http://mes.cfmfactory.com:8087/portal/getAccessTokenAction.do";
+        Map<String, String> getTokenMap = new HashMap<>();
+        getTokenMap.put("AppId", "1");
+        getTokenMap.put("AppSecret", "a2b1c2d3");
+        Map<String, Object> tokenResultMap = HttpHelper.doGet(tokenUrl, getTokenMap);
+        String token = tokenResultMap.get("token").toString();
+
+        // 请求v3接口获取所有人领料信息
+        String url = "http://mes.cfmfactory.com:8087/MesWeb/planPersonOutAction.do";
+        Date date = new Date();
+
+        DateTime parse = DateUtil.parse(DateUtil.format(date, "yyyy-MM-dd 7:30:00"));
+
+        if (date.compareTo(parse) < 0) {
+            date = DateUtil.offsetDay(date, -1);
+        }
+
+        HashMap<String, String> map = new HashMap<>();
+        map.put("action", "list");
+        map.put("status", "1");
+        map.put("beginDate", DateUtil.formatDateTime(date));
+        map.put("endDate", DateUtil.formatDateTime(date));
+        map.put("access_token", token);
+        Map<String, Object> resultMap = HttpHelper.doGet(url, map);
+
+        // 接收到的消息
+        List<JSONObject> items = (List<JSONObject>) resultMap.get("items");
+
+        String jobNo = condition.get("jobNo");
+
+        List<Map<String, Object>> v3DataList = new ArrayList<>();
+
+        Map<Object, List<JSONObject>> v3DataMap = items.stream()
+                .filter(item -> item.get("distributor").toString().equals(jobNo))
+                .collect(Collectors.groupingBy(item -> item.get("material")));
+
+        v3DataMap.forEach((k, v) -> {
+            Map<String, Object> itemMap = new HashMap<>();
+            itemMap.put("name", k);
+            itemMap.put("canTakeQty", v.stream().map(item -> new BigDecimal(item.get("plantotalsquare").toString())).reduce(BigDecimal.ZERO, BigDecimal::add));
+            v3DataList.add(itemMap);
+        });
+
+
+        BigDecimal paperManCanTakeQty = items.stream()
+                .filter(item -> item.get("paperMan").toString().equals(jobNo))
+                .map(item -> new BigDecimal(item.get("plantotalsquare").toString()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        if (paperManCanTakeQty.compareTo(BigDecimal.ZERO) > 0) {
+            HashMap<String, Object> rzMap = new HashMap<>();
+            rzMap.put("name", "热转印纸");
+            rzMap.put("canTakeQty", paperManCanTakeQty);
+            v3DataList.add(rzMap);
+        }
+
+        result.put("v3DataList", v3DataList);
+
+
+        QueryWrapper<Object> query = Wrappers.query();
+
+        List<Map<String, Object>> allMaterialList = new ArrayList<>();
+
+        if (v3DataList.size() > 0) {
+            query.gt("s.Quantity", 0);
+            query.and(q -> v3DataList.stream().map(item -> item.get("name").toString()).collect(Collectors.toList()).forEach(item ->
+                    q.or().likeRight("m.`Name`", item + "-")
+            ));
+            query.and(q -> q.eq("uu.JobNo", jobNo).or().isNull("uu.JobNo"));
+
+            allMaterialList = baseMapper.selectAllMaterialList(query);
+            for (Map<String, Object> material : allMaterialList) {
+                for (Map<String, Object> stringObjectMap : v3DataList) {
+                    if (material.get("materialName").toString().startsWith(stringObjectMap.get("name").toString())) {
+
+                        BigDecimal canTakeQty = (BigDecimal) stringObjectMap.get("canTakeQty");
+
+                        BigDecimal width = floatToBig((Float) material.get("width"));
+                        BigDecimal bigDecimal = new BigDecimal("100");
+
+                        BigDecimal userStockQty = (BigDecimal) material.get("userStockQty");
+                        userStockQty = userStockQty == null ? BigDecimal.ZERO : userStockQty;
+
+                        BigDecimal canTakeQtyBD = canTakeQty.subtract(userStockQty.multiply(width).divide(bigDecimal, 2, RoundingMode.HALF_UP))
+                                .multiply(bigDecimal).divide(width, 2, RoundingMode.HALF_UP);
+
+                        material.put("canTakeQty", canTakeQtyBD.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : canTakeQtyBD);
+                        break;
+                    }
+                }
+            }
+        }
+
+
+        HashMap<Object, Object> hashMap = new HashMap<>();
+
+        // 添加墨水
+        List<Map<String, Object>> inkList = baseMapper.selectInk();
+        for (Map<String, Object> item : inkList) {
+            item.put("width", 0);
+            item.put("canTakeQty", 16);
+        }
+        allMaterialList.addAll(inkList);
+
+
+        hashMap.put("list", allMaterialList);
+        result.put("allMaterialList", hashMap);
+
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> contractPayment() {
+
+        Map<String, Object> result = new LinkedHashMap<>();
+
+        Date date = new Date();
+        DateTime beginOfMonth = DateUtil.beginOfMonth(date);
+        DateTime endOfMonth = DateUtil.endOfMonth(date);
+
+        if (DateUtil.betweenDay(date, beginOfMonth, true) > 14) {
+            // 上半月结束时间
+            String halfEndTime = DateUtil.format(endOfMonth, "yyyy-MM-15 HH:mm:ss");
+            // 上个账期已付
+            List<Map<String, Object>> paidInLastAccountingPeriod =
+                    baseMapper.getPaidInLastAccountingPeriod(beginOfMonth, halfEndTime);
+            result.put("paidInLastAccountingPeriod", paidInLastAccountingPeriod);
+        }
+
+        // 下半月开始时间
+        String lowerHalfBeginTime = DateUtil.format(beginOfMonth, "yyyy-MM-16 HH:mm:ss");
+
+        // 本账期
+        BigDecimal currentAccountingPeriod = baseMapper.getCurrentAccountingPeriod(lowerHalfBeginTime, endOfMonth)
+                .setScale(2, RoundingMode.HALF_DOWN);
+        result.put("currentAccountingPeriod", currentAccountingPeriod);
+
+        // 已付
+        List<Map<String, Object>> paid = baseMapper.gerPaid(lowerHalfBeginTime, endOfMonth);
+        paid.forEach(item -> item.put("PayAmount", ((BigDecimal) item.get("PayAmount")).setScale(2, RoundingMode.HALF_DOWN)));
+        result.put("paid", paid);
+
+        return result;
+    }
+
+    @Override
+    public List<Map<String, Object>> approvalRole() {
+        return baseMapper.approvalRole();
+    }
+
+    @Override
+    public List<Map<String, Object>> getInventoryRecord(Map<String, String> condition) {
+
+        QueryWrapper<Object> wrapper = Wrappers.query()
+                .ne("sc.IsDelete", 1);
+
+        String beginTime = condition.get("beginTime");
+        String endTime = condition.get("endTime");
+        boolean NotEmptyFlag = ObjectUtil.isNotEmpty(beginTime) && ObjectUtil.isNotEmpty(endTime);
+        if (NotEmptyFlag) {
+            DateTime beginOfDay = DateUtil.beginOfDay(DateUtil.parse(beginTime));
+            DateTime endOfDay = DateUtil.endOfDay(DateUtil.parse(endTime));
+            wrapper.between("sc.CreatedTime", beginOfDay, endOfDay);
+        }
+
+        return baseMapper.getInventoryRecord(wrapper);
+    }
+
+
+    private BigDecimal floatToBig(float scale) {
+        DecimalFormat df = new DecimalFormat("##0.00");
+        return new BigDecimal(df.format(scale));
+    }
+
+}

+ 54 - 0
src/main/java/com/example/storageex/utils/HttpHelper.java

@@ -0,0 +1,54 @@
+package com.example.storageex.utils;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.StringJoiner;
+
+/**
+ * 通用http工具封装
+ */
+public class HttpHelper {
+
+
+    public static Map<String, Object> doGet(String url, Map<String, String> paramMap) {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        try {
+            StringJoiner joiner = new StringJoiner("&");
+            paramMap.forEach((k, v) -> joiner.add(k + "=" + v));
+
+            String urlNameString = url + "?" + joiner;
+
+            URL realUrl = new URL(urlNameString);
+            URLConnection connection = realUrl.openConnection();
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            connection.connect();
+            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (in != null) {
+                    in.close();
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        return JSONObject.parseObject(result.toString());
+    }
+
+}

+ 42 - 0
src/main/java/com/example/storageex/utils/R.java

@@ -0,0 +1,42 @@
+package com.example.storageex.utils;
+
+import lombok.Data;
+
+/**
+ * 统一返回结果的类
+ */
+@Data
+public class R {
+
+
+    // 返回码
+    private Integer code;
+
+    // 返回消息
+    private String msg;
+
+    // 返回数据
+    private Object result;
+
+    // 成功状态码
+    private static final Integer SUCCESS_CODE = 0;
+
+    // 成功消息提示
+    private static final String SUCCESS_MESSAGE = "成功";
+
+    // 成功静态方法
+    public static R ok() {
+        R r = new R();
+        r.setCode(SUCCESS_CODE);
+        r.setMsg(SUCCESS_MESSAGE);
+        return r;
+    }
+
+    // 成功静态方法
+    public static R ok(Object obj) {
+        R r = ok();
+        r.setResult(obj);
+        return r;
+    }
+
+}

+ 33 - 0
src/main/resources/application.yml

@@ -0,0 +1,33 @@
+server:
+  port: 9876
+
+spring:
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://rm-wz9f1jcr5466b42415o.mysql.rds.aliyuncs.com:3306/storage?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+    username: printer
+    password: RLP@uBr-w4G#AZ5
+
+  jackson:
+    time-zone: GMT+8
+    date-format: yyyy-MM-dd HH:mm:ss
+    default-property-inclusion: NON_NULL
+
+mybatis-plus:
+  mapper-locations: classpath*:com/**/mapper/xml/*.xml
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: true
+    lazy-loading-enabled: true
+    multiple-result-sets-enabled: true
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  global-config:
+    banner: false
+    db-config:
+      id-type: assign_id
+      table-underline: true
+      logic-delete-field: delFlag
+      logic-delete-value: 1
+      logic-not-delete-value: 0
+    enable-sql-runner: true
+

+ 96 - 0
src/test/java/com/example/storageex/CodeGenerator.java

@@ -0,0 +1,96 @@
+package com.example.storageex;
+
+//import com.baomidou.mybatisplus.annotation.DbType;
+//import com.baomidou.mybatisplus.annotation.FieldFill;
+//import com.baomidou.mybatisplus.annotation.IdType;
+//import com.baomidou.mybatisplus.generator.AutoGenerator;
+//import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+//import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+//import com.baomidou.mybatisplus.generator.config.PackageConfig;
+//import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+//import com.baomidou.mybatisplus.generator.config.po.TableFill;
+//import com.baomidou.mybatisplus.generator.config.rules.DateType;
+//import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+//
+//import java.util.Arrays;
+
+/**
+ * 后端自动生成工具
+ */
+public class CodeGenerator {
+
+//    public static void main(String[] args) {
+//
+//        // 生成代码备注创建者,可不填
+//        final String AUTHOR = "zhangLiJie";
+//
+//        // 模块名称
+//        final String OUTPUT_DIR = System.getProperty("user.dir") + "/src/main/java";
+//
+//        // 生成的包路径
+//        final String PARENT = "com.example";
+//
+//        // 生成模块的名称
+//        final String MODULE_NAME = "dingding";
+//
+//        // 需要生成的表名称,多表用,隔开
+//        final String INCLUDE = "check_leave";
+//
+//        // 创建代码生成器
+//        AutoGenerator mpg = new AutoGenerator();
+//
+//        // 全局配置
+//        GlobalConfig gc = new GlobalConfig();
+//        gc.setAuthor(AUTHOR);
+//        gc.setOutputDir(OUTPUT_DIR);
+//        gc.setOpen(false); //生成后是否打开资源管理器
+//        gc.setFileOverride(false); //重新生成时文件是否覆盖
+//        gc.setServiceName("%sService");  //去掉Service接口的首字母
+//        gc.setDateType(DateType.ONLY_DATE); //定义生成的实体类中日期类型
+//        gc.setSwagger2(false); //开启Swagger2模式
+//        gc.setIdType(IdType.ASSIGN_ID); //主键策略
+//        mpg.setGlobalConfig(gc);
+//
+//        // 数据源配置
+//        DataSourceConfig dsc = new DataSourceConfig();
+//        dsc.setUrl("jdbc:mysql://114.115.167.11:3306/dingding?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true");
+//        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
+//        dsc.setUsername("root");
+//        dsc.setPassword("123qwe!@#");
+//        dsc.setDbType(DbType.MYSQL);
+//        mpg.setDataSource(dsc);
+//
+//        // 包配置
+//        PackageConfig pc = new PackageConfig();
+//        pc.setParent(PARENT);// 包路径
+//        pc.setModuleName(MODULE_NAME); //模块名
+//        pc.setEntity("entity");
+//        pc.setService("service");
+//        pc.setServiceImpl("service.impl");
+//        pc.setMapper("mapper");
+//        pc.setXml("mapper.xml");
+//        mpg.setPackageInfo(pc);
+//
+//        // 策略配置
+//        StrategyConfig strategy = new StrategyConfig();
+//        strategy.setInclude(INCLUDE.split(","));
+//        strategy.setNaming(NamingStrategy.underline_to_camel); //数据库表映射到实体的命名策略(下划线转驼峰命名)
+//        strategy.setColumnNaming(NamingStrategy.underline_to_camel); //数据库表字段映射到实体的命名策略(下划线转驼峰命名)
+//        strategy.setEntityLombokModel(true); // 开启lombok
+//        strategy.setRestControllerStyle(true); //restful api风格控制器
+//        strategy.setVersionFieldName("version"); // 乐观锁字段名
+//        strategy.setLogicDeleteFieldName("isDel"); // 逻辑删除字段名
+////        strategy.setSuperServiceClass(BaseService.class); // service继承父类
+//        strategy.setTableFillList(Arrays.asList(
+//                new TableFill("del_flag", FieldFill.INSERT),
+//                new TableFill("version", FieldFill.INSERT)
+//        ));
+//
+//        mpg.setStrategy(strategy);
+//
+//
+//        // 执行
+//        mpg.execute();
+//    }
+
+}