package com.zy.asrs.controller; import com.baomidou.mybatisplus.plugins.Page; import com.core.annotations.ManagerAuth; import com.core.common.R; import com.zy.asrs.entity.MonthlySettle; import com.zy.asrs.entity.MonthlySettleDetail; import com.zy.asrs.entity.param.DateRangeParam; import com.zy.asrs.entity.param.MonthlySettleQueryParam; import com.zy.asrs.entity.result.MonthlySettleStatisticsVO; import com.zy.asrs.service.MonthlySettleService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @RestController public class MonthlySettleController extends BaseController { @Autowired private MonthlySettleService monthlySettleService; /** * 获取月结信息 */ @RequestMapping(value = "/monthlySettle/{id}/auth") @ManagerAuth public R get(@PathVariable("id") Long id) { return R.ok(monthlySettleService.selectById(id)); } /** * 分页查询月结列表 */ @RequestMapping(value = "/monthlySettle/list/auth") @ManagerAuth public R list(MonthlySettleQueryParam param) { Page page = new Page<>(param.getCurr(), param.getLimit()); java.util.Map condition = new java.util.HashMap<>(); if (param.getSettleNo() != null && !param.getSettleNo().trim().isEmpty()) { condition.put("settleNo", param.getSettleNo()); } if (param.getStatus() != null) { condition.put("status", param.getStatus()); } if (param.getStartDate() != null && !param.getStartDate().trim().isEmpty() && param.getEndDate() != null && !param.getEndDate().trim().isEmpty()) { condition.put("startDate", param.getStartDate()); condition.put("endDate", param.getEndDate()); } page.setCondition(condition); return R.ok(monthlySettleService.getPage(page)); } /** * 获取最近的月结记录 */ @RequestMapping(value = "/monthlySettle/latest/auth") @ManagerAuth public R getLatest() { MonthlySettle latest = monthlySettleService.getLatestSettle(); return R.ok(latest); } /** * 获取下一个月结的起始日期 */ @RequestMapping(value = "/monthlySettle/nextStartDate/auth") @ManagerAuth public R getNextStartDate() { Date nextStartDate = monthlySettleService.getNextStartDate(); if (nextStartDate != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return R.ok(sdf.format(nextStartDate)); } return R.ok(null); } /** * 获取最晚月结记录的结束日期 */ @RequestMapping(value = "/monthlySettle/latestEndDate/auth") @ManagerAuth public R getLatestEndDate() { Date latestEndDate = monthlySettleService.getLatestEndDate(); if (latestEndDate != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return R.ok(sdf.format(latestEndDate)); } return R.ok(null); } /** * 检查月结时间范围内是否有未完成的订单 */ @RequestMapping(value = "/monthlySettle/checkUnfinished/auth") @ManagerAuth public R checkUnfinished(DateRangeParam param) { boolean hasUnfinished = monthlySettleService.hasUnfinishedOrders(param.getStartDate(), param.getEndDate()); if (hasUnfinished) { return R.error("月结时间范围内存在未完成的订单,无法进行月结"); } return R.ok(); } /** * 发起月结 */ @RequestMapping(value = "/monthlySettle/start/auth") @ManagerAuth public R startSettle(DateRangeParam param) { return R.ok(monthlySettleService.startSettle(param.getStartDate(), param.getEndDate(), getUserId())); } /** * 获取月结统计信息 */ @RequestMapping(value = "/monthlySettle/statistics/{id}/auth") @ManagerAuth public R getStatistics(@PathVariable("id") Long id) { return R.ok(monthlySettleService.getSettleStatistics(id)); } /** * 删除月结记录 */ @RequestMapping(value = "/monthlySettle/{id}/auth", method = RequestMethod.DELETE) @ManagerAuth public R delete(@PathVariable("id") Long id) { monthlySettleService.deleteSettle(id); return R.ok("删除成功"); } /** * 导出月结明细 */ @RequestMapping(value = "/monthlySettle/detail/export/{id}/auth") @ManagerAuth(memo = "导出月结明细") public R exportDetail(@PathVariable("id") Long id) { // 获取月结统计信息 MonthlySettleStatisticsVO statistics = monthlySettleService.getSettleStatistics(id); if (statistics == null || statistics.getDetails() == null) { return R.error("月结明细不存在"); } List details = statistics.getDetails(); // 定义导出字段 List fields = new ArrayList<>(); fields.add("matnr"); fields.add("maktx"); fields.add("batch"); fields.add("brand"); fields.add("beginningQty"); fields.add("endingQty"); fields.add("diffQty"); fields.add("inQty"); fields.add("outQty"); return R.ok(exportSupport(details, fields)); } }