diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index e443ac3e0..228a1590a 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -234,7 +234,8 @@ public enum ErrorCodeEnum { LICENSE_LEGAL_STAGE_FAIL(131001,"营业执照阶段未上传!",null), GET_JURIDICAL_ID_CARD_NO_FAIL(131002,"获取法人身份证信息失败!",null), UPDATE_INVESTMENT_MANAGER_FAIL(131005,"当前用户已经为该门店招商经理",null), - CONFIRM_THE_APPROVER(131006,"您提交的铺位暂时找不到选址审批人,请联系系统管理员配置选址审批权限后再提交铺位审批",null) + CONFIRM_THE_APPROVER(131006,"您提交的铺位暂时找不到选址审批人,请联系系统管理员配置选址审批权限后再提交铺位审批",null), + ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/TallyBookStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/TallyBookStatusEnum.java new file mode 100644 index 000000000..6186ce10e --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/TallyBookStatusEnum.java @@ -0,0 +1,34 @@ +package com.cool.store.enums; + +/** + * @Author: WangShuo + * @Date: 2025/03/28/14:11 + * @Version 1.0 + * @注释: + */ +public enum TallyBookStatusEnum { + NOT_SUBMIT(0, "未提交"), + IS_SUBMIT(1, "已提交"); + + private Integer code; + private String desc; + + TallyBookStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) {} +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/TallyBookDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/TallyBookDAO.java new file mode 100644 index 000000000..484a40453 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/TallyBookDAO.java @@ -0,0 +1,36 @@ +package com.cool.store.dao; + +import com.cool.store.entity.TallyBookDO; +import com.cool.store.mapper.TallyBookMapper; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author: WangShuo + * @Date: 2025/03/28/09:50 + * @Version 1.0 + * @注释: + */ +@Repository +public class TallyBookDAO { + @Resource + private TallyBookMapper tallyBookMapper; + public Long insertSelective(TallyBookDO tallyBookDO) { + tallyBookMapper.insertSelective(tallyBookDO); + return tallyBookDO.getId(); + } + public Long updateByPrimaryKeySelective(TallyBookDO tallyBookDO) { + tallyBookMapper.updateByPrimaryKeySelective(tallyBookDO); + return tallyBookDO.getId(); + } + public List getTallyBookListByShopIdAndYear(Long shopId,Integer year) { + Example example = new Example(TallyBookDO.class); + example.createCriteria().andEqualTo("shopId",shopId).andEqualTo("year",year); + return tallyBookMapper.selectByExample(example); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TallyBookMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TallyBookMapper.java new file mode 100644 index 000000000..f14a18073 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TallyBookMapper.java @@ -0,0 +1,13 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.TallyBookDO; +import tk.mybatis.mapper.common.Mapper; + +/** + * @Author: WangShuo + * @Date: 2025/03/28/09:45 + * @Version 1.0 + * @注释: + */ +public interface TallyBookMapper extends Mapper { +} diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml index e3428d0c9..a8ef10902 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml @@ -28,6 +28,8 @@ + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/TallyBookMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/TallyBookMapper.xml new file mode 100644 index 000000000..dd503f4c9 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/TallyBookMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/TallyBookDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/TallyBookDTO.java new file mode 100644 index 000000000..740259f45 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/TallyBookDTO.java @@ -0,0 +1,90 @@ +package com.cool.store.dto; + +import com.cool.store.entity.TallyBookDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class TallyBookDTO { + + private Long id; + + @ApiModelProperty(value = "加盟商ID") + @NotNull(message = "加盟商ID不能为空") + @Size(max = 64, message = "加盟商ID长度不能超过64个字符") + private String partnerId; + + @ApiModelProperty(value = "店铺ID") + @NotNull(message = "店铺ID不能为空") + private Long shopId; + + @ApiModelProperty(value = "年") + @NotNull(message = "年不能为空") + private Integer year; + + @ApiModelProperty(value = "月") + @NotNull(message = "月不能为空") + private Integer month; + + @ApiModelProperty(value = "员工工资") + @NotNull(message = "员工工资不能为空") + private BigDecimal employeeSalary; + + @ApiModelProperty(value = "办公费") + @NotNull(message = "办公费不能为空") + private BigDecimal administrativeExpenses; + + @ApiModelProperty(value = "差旅费") + @NotNull(message = "差旅费不能为空") + private BigDecimal travelExpense; + + @ApiModelProperty(value = "促销费") + @NotNull(message = "促销费不能为空") + private BigDecimal promotionExpense; + + @ApiModelProperty(value = "水电费") + @NotNull(message = "水电费不能为空") + private BigDecimal utilities; + + @ApiModelProperty(value = "社会保险费") + @NotNull(message = "社会保险费不能为空") + private BigDecimal socialInsurancePremium; + + @ApiModelProperty(value = "员工宿舍费") + @NotNull(message = "员工宿舍费不能为空") + private BigDecimal staffDormitoryFee; + + @ApiModelProperty(value = "低值易耗品摊销") + @NotNull(message = "低值易耗品摊销不能为空") + private BigDecimal consumablesCost; + + @ApiModelProperty(value = "成本合计") + @NotNull(message = "成本合计不能为空") + private BigDecimal totalCost; + + public TallyBookDO toTallyBookDO() { + TallyBookDO tallyBookDO = new TallyBookDO(); + tallyBookDO.setPartnerId(partnerId); + tallyBookDO.setShopId(shopId); + tallyBookDO.setYear(year); + tallyBookDO.setMonth(month); + tallyBookDO.setEmployeeSalary(employeeSalary); + tallyBookDO.setAdministrativeExpenses(administrativeExpenses); + tallyBookDO.setTravelExpense(travelExpense); + tallyBookDO.setPromotionExpense(promotionExpense); + tallyBookDO.setUtilities(utilities); + tallyBookDO.setSocialInsurancePremium(socialInsurancePremium); + tallyBookDO.setStaffDormitoryFee(staffDormitoryFee); + tallyBookDO.setConsumablesCost(consumablesCost); + tallyBookDO.setTotalCost(totalCost); + tallyBookDO.setCreateTime(new Date()); + tallyBookDO.setUpdateTime(new Date()); + return tallyBookDO; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointInfoDO.java index ea75f0f96..cb3c89a2a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointInfoDO.java @@ -154,5 +154,10 @@ public class PointInfoDO { @Column(name = "storage_status") private Integer storageStatus; - + + @Column(name = "opportunity_point_code") + private String opportunityPointCode; + + @Column(name = "opportunity_point_name") + private String opportunityPointName; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/TallyBookDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/TallyBookDO.java new file mode 100644 index 000000000..f2de7f2ef --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/TallyBookDO.java @@ -0,0 +1,72 @@ +package com.cool.store.entity; + +import lombok.Data; + +import javax.persistence.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +@Entity +@Table(name = "xfsg_tally_book") +@Data +public class TallyBookDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "partner_id") + private String partnerId; + + @Column(name = "shop_id") + private Long shopId; + + @Column(name = "`year`") + private Integer year; + + @Column(name = "`month`") + private Integer month; + + @Column(name = "employee_salary") + private BigDecimal employeeSalary; + + @Column(name = "administrative_expenses", precision = 10, scale = 2) + private BigDecimal administrativeExpenses; + + @Column(name = "travel_expense", precision = 10, scale = 2) + private BigDecimal travelExpense; + + @Column(name = "promotion_expense", precision = 10, scale = 2) + private BigDecimal promotionExpense; + + @Column(name = "utilities", precision = 10, scale = 2) + private BigDecimal utilities; + + @Column(name = "social_insurance_premium", precision = 10, scale = 2) + private BigDecimal socialInsurancePremium; + + @Column(name = "staff_dormitory_fee", precision = 10, scale = 2) + private BigDecimal staffDormitoryFee; + + @Column(name = "consumables_cost", precision = 10, scale = 2) + private BigDecimal consumablesCost; + + @Column(name = "total_cost", precision = 10, scale = 2) + private BigDecimal totalCost; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "create_user", length = 255) + private String createUser; + + @Column(name = "update_time") + private Date updateTime; + + @Column(name = "update_user", length = 255) + private String updateUser; + + @Column(name = "status") + private Integer status; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/MiniAddPointRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/MiniAddPointRequest.java index 359db691d..ecdddbb56 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/MiniAddPointRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/MiniAddPointRequest.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.apache.commons.lang3.StringUtils; +import javax.persistence.Column; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; @@ -85,6 +86,12 @@ public class MiniAddPointRequest { @ApiModelProperty("街道") private String township; + @ApiModelProperty("机会点编号") + private String opportunityPointCode; + + @ApiModelProperty("机会点名称") + private String opportunityPointName; + public static PointDetailInfoDO convertDO(MiniAddPointRequest request) { PointDetailInfoDO result = new PointDetailInfoDO(); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TallyBookRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TallyBookRequest.java new file mode 100644 index 000000000..be1c70fd1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TallyBookRequest.java @@ -0,0 +1,89 @@ +package com.cool.store.request; + +import com.cool.store.entity.TallyBookDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class TallyBookRequest { + + @ApiModelProperty(value = "主键id,修改时候传") + private Long id; + + @ApiModelProperty(value = "加盟商ID") + private String partnerId; + + @ApiModelProperty(value = "店铺ID", required = true) + @NotNull(message = "店铺ID不能为空") + private Long shopId; + + @ApiModelProperty(value = "年", required = true) + @NotNull(message = "年不能为空") + private Integer year; + + @ApiModelProperty(value = "月", required = true) + @NotNull(message = "月不能为空") + private Integer month; + + @ApiModelProperty(value = "员工工资", required = true) + @NotNull(message = "员工工资不能为空") + private BigDecimal employeeSalary; + + @ApiModelProperty(value = "办公费", required = true) + @NotNull(message = "办公费不能为空") + private BigDecimal administrativeExpenses; + + @ApiModelProperty(value = "差旅费", required = true) + @NotNull(message = "差旅费不能为空") + private BigDecimal travelExpense; + + @ApiModelProperty(value = "促销费", required = true) + @NotNull(message = "促销费不能为空") + private BigDecimal promotionExpense; + + @ApiModelProperty(value = "水电费", required = true) + @NotNull(message = "水电费不能为空") + private BigDecimal utilities; + + @ApiModelProperty(value = "社会保险费", required = true) + @NotNull(message = "社会保险费不能为空") + private BigDecimal socialInsurancePremium; + + @ApiModelProperty(value = "员工宿舍费", required = true) + @NotNull(message = "员工宿舍费不能为空") + private BigDecimal staffDormitoryFee; + + @ApiModelProperty(value = "低值易耗品摊销", required = true) + @NotNull(message = "低值易耗品摊销不能为空") + private BigDecimal consumablesCost; + + @ApiModelProperty(value = "成本合计", required = true) + @NotNull(message = "成本合计不能为空") + private BigDecimal totalCost; + + public TallyBookDO toTallyBookDO() { + TallyBookDO tallyBookDO = new TallyBookDO(); + tallyBookDO.setPartnerId(partnerId); + tallyBookDO.setShopId(shopId); + tallyBookDO.setYear(year); + tallyBookDO.setMonth(month); + tallyBookDO.setEmployeeSalary(employeeSalary); + tallyBookDO.setAdministrativeExpenses(administrativeExpenses); + tallyBookDO.setTravelExpense(travelExpense); + tallyBookDO.setPromotionExpense(promotionExpense); + tallyBookDO.setUtilities(utilities); + tallyBookDO.setSocialInsurancePremium(socialInsurancePremium); + tallyBookDO.setStaffDormitoryFee(staffDormitoryFee); + tallyBookDO.setConsumablesCost(consumablesCost); + tallyBookDO.setTotalCost(totalCost); + tallyBookDO.setCreateTime(new Date()); + tallyBookDO.setUpdateTime(new Date()); + return tallyBookDO; + } + +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/TallyBookService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/TallyBookService.java new file mode 100644 index 000000000..8faa9ca63 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/TallyBookService.java @@ -0,0 +1,23 @@ +package com.cool.store.service; + +import com.cool.store.dto.TallyBookDTO; +import com.cool.store.entity.TallyBookDO; +import com.cool.store.request.TallyBookRequest; + +import java.util.Date; +import java.util.List; + +/** + * @Author: WangShuo + * @Date: 2025/03/28/09:59 + * @Version 1.0 + * @注释: + */ +public interface TallyBookService { + + Long insertOrUpdateSelective(TallyBookRequest request, String userId); + + List getTallyBookListByShopIdAndYear(Long shopId, Integer year); + + public TallyBookDO initData(Date date, Long shopId, String partnerId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TallyBookServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TallyBookServiceImpl.java new file mode 100644 index 000000000..cf78b6448 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TallyBookServiceImpl.java @@ -0,0 +1,93 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.TallyBookDAO; +import com.cool.store.dto.TallyBookDTO; +import com.cool.store.entity.TallyBookDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.TallyBookStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.TallyBookRequest; +import com.cool.store.service.TallyBookService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author: WangShuo + * @Date: 2025/03/28/09:59 + * @Version 1.0 + * @注释: + */ +@Service +public class TallyBookServiceImpl implements TallyBookService { + + @Resource + private TallyBookDAO tallyBookDAO; + + @Override + public Long insertOrUpdateSelective(TallyBookRequest request, String partnerId) { + TallyBookDO tallyBookDO = request.toTallyBookDO(); + if (request.getId()==null){ + tallyBookDO.setCreateUser(partnerId); + tallyBookDO.setPartnerId(partnerId); + tallyBookDO.setStatus(TallyBookStatusEnum.IS_SUBMIT.getCode()); + return tallyBookDAO.insertSelective(tallyBookDO); + }else{ + tallyBookDO.setUpdateUser(partnerId); + return tallyBookDAO.updateByPrimaryKeySelective(tallyBookDO); + } + } + + @Override + public List getTallyBookListByShopIdAndYear(Long shopId, Integer year) { + List list = tallyBookDAO.getTallyBookListByShopIdAndYear(shopId,year); + if (CollectionUtils.isEmpty(list)){ + return null; + } + List sortList = list.stream().sorted(Comparator.comparing(TallyBookDO::getMonth)).collect(Collectors.toList()); + List result= new ArrayList<>(); + for(TallyBookDO tallyBookDO : sortList){ + TallyBookDTO tallyBookDTO = new TallyBookDTO(); + BeanUtils.copyProperties(tallyBookDO,tallyBookDTO); + result.add(tallyBookDTO); + } + return result; + } + + public TallyBookDO initData(Date date,Long shopId, String partnerId){ + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + // 获取年份 + int year = localDate.getYear(); + // 获取月份 + int month = localDate.getMonthValue(); + List list = tallyBookDAO.getTallyBookListByShopIdAndYear(shopId,year); + if(CollectionUtils.isEmpty(list)){ + TallyBookDO tallyBookDO = new TallyBookDO(); + tallyBookDO.setShopId(shopId); + tallyBookDO.setPartnerId(partnerId); + tallyBookDO.setYear(year); + tallyBookDO.setMonth(month); + tallyBookDO.setCreateTime(new Date()); + tallyBookDO.setStatus(TallyBookStatusEnum.NOT_SUBMIT.getCode()); + return tallyBookDO; + } + List monthList = list.stream().map(TallyBookDO::getMonth).collect(Collectors.toList()); + if (!monthList.contains(month)){ + TallyBookDO tallyBookDO = new TallyBookDO(); + tallyBookDO.setShopId(shopId); + tallyBookDO.setPartnerId(partnerId); + tallyBookDO.setYear(year); + tallyBookDO.setMonth(month); + tallyBookDO.setCreateTime(new Date()); + tallyBookDO.setStatus(TallyBookStatusEnum.NOT_SUBMIT.getCode()); + return tallyBookDO; + } + return null; + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java index f87443701..3939a0ad7 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java @@ -301,8 +301,22 @@ public class XxlJobHandler { } + /** + * @Auther: wangshuo + * @Date: 2025/3/28 + * @description:每个月为可以生成记账的门店生成初始化数据 + */ + @XxlJob("initTallyBook") + public void initTallyBook() { + log.info("------start initTallyBook------"); + boolean hasNext = true; + int pageNum = 1; + int pageSize = 10; + List shopIdList = new ArrayList<>(); + while (hasNext) { - + } + } }